当我从数据库查询到数据,如何将它变成Excel表格的形式展示
<!-- easyexcel-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>2.1.6</version>
</dependency>
<!--lombok-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.14.6</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>RELEASE</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.58</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.58</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.28</version>
</dependency>
log4j.properties
log4j.rootLogger=DEBUG, stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n
@ContentRowHeight(20)
@HeadRowHeight(20)
@ColumnWidth(25)
@Data
@NoArgsConstructor
public class AllNodeList implements Serializable {
@ExcelProperty(value = "Level",index = 0)
private Integer orderno;
@ExcelProperty(value = "Id",index = 1)
private Integer id;
@ExcelProperty(value = "rname",index = 2)
@ColumnWidth(30)
private String rname;
@ExcelProperty(value = "resourcetype",index = 3)
@ColumnWidth(30)
private String resourcetype;
@ExcelProperty(value = "priority",index = 4)
private Integer priority;
@ExcelProperty(value = "parentid",index = 5)
private Integer parentid;
//此处空出了第7 列
@ExcelProperty(value = "permission",index = 7)
@ColumnWidth(40)
private String permission;
}
}
在写的过程中暂时没有用到
package study.controller;
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import study.bo.Node4Menu;
import com.alibaba.fastjson.JSON;
import java.util.ArrayList;
import java.util.List;
/**
* @author wangshiqin
* @version 1.0
* @className NodeDataListener
* @description 监听节点信息生成Excel
* @date 2021/5/28
*/
public class NodeDataListener extends AnalysisEventListener<Node4Menu> {
List<Node4Menu> list = new ArrayList<>();
private final Logger logger = LoggerFactory.getLogger(NodeDataListener.class);
/**
* 如果使用了spring,请使用这个构造方法。
* 每次创建Listener的时候需要把spring管理的类传进来
*/
public NodeDataListener() {}
/**
* 这个每一条数据解析都会来调用
* @param
* @param analysisContext
*/
@Override
public void invoke(Node4Menu node4Menu, AnalysisContext analysisContext) {
System.out.println("完成了一条数据的解析 --> " + JSON.toJSONString(node4Menu));
list.add(node4Menu);
}
/**
* 所有数据解析完成了
* 都会来调用
* @param context
*/
@Override
public void doAfterAllAnalysed(AnalysisContext context) {
System.out.println(JSON.toJSONString(list));
}
}
package study.service;
import com.alibaba.excel.EasyExcel;
import study.bo.Node4Menu;
import java.util.List;
/**
* @author wangshiqin
* @version 1.0
* @className Data2Excel
* @description 写到Excel中
* @date 2021/5/28
*/
public class Data2Excel {
public void writetoExcel(List<Node4Menu> node4Menu){
//桌面文件名
String fileName = "node4menu.xlsx";
// 这里 需要指定写用哪个class去读,然后写到第一个sheet,名字为模板 然后文件流会自动关闭
// 参数一:写入excel文件路径
// 参数二:写入的数据类型是Person
// data()方法是写入的数据,结果是List<Person>集合
EasyExcel.write(fileName, Node4Menu.class).sheet("模板").doWrite(node4Menu);
}
}
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2GdlwdxZ-1622440007412)(G:\Excel.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ntysI98n-1622440007418)(G:\模板.png)]
扩展:
public class ComplexHeadData {
/**
* 主标题 将整合为一个单元格效果如下:
* —————————————————————————
* | 主标题 |
* —————————————————————————
* |字符串标题|日期标题|数字标题|
* —————————————————————————
*/
@ExcelProperty({"主标题", "字符串标题"})
private String string;
@ExcelProperty({"主标题", "日期标题"})
private Date date;
@ExcelProperty({"主标题", "数字标题"})
private Double doubleData;
}
public void simpleRead() {
// 根据名字读取
String fileName = "demo.xlsx";
// 这里 需要指定读用哪个class去读,然后读取第一个sheet 文件流会自动关闭
EasyExcel.read(fileName
, DemoData.class, new DemoDataListener()).sheet().doRead();
在实体类中,会根据注释中的名称 或者index = 多少列 来读取