- 官方网址:https://www.yuque.com/easyexcel/doc/easyexcel
- 应用场景
- 数据导入:减少录入工作量
- 数据导出:统计信息归档
- 数据传输:异构系统之间数据传输
- EasyExcel特点
- 它是阿里巴巴开源的一个excel处理框架,
以使用简单、节省内存著称
。EasyExcel能大量减少占用内存的主要原因是在解析Excel时没有将文件数据一次性全部加载到内存中,而是从磁盘中一行行读取数据,逐个解析。 - EasyExcel采用一行一行的解析模式,并将一行的解析结果以观察者的模式通知处理(AnalysisEventListener)
- 它是阿里巴巴开源的一个excel处理框架,
- EasyExcel写操作
- 导入依赖的版本对应关系(版本慎重选择,否则发生冲突)
com.alibaba easyexcel 2.1.1 org.apache.poi poi 3.17 org.apache.poi poi-ooxml 3.17 - 创建一个与excel表格字段相对应的实体类(字段==属性)
package com.xsha.demo.excel; import com.alibaba.excel.annotation.ExcelProperty; import lombok.Data; @Data public class MyData { // 设置excel表表头 @ExcelProperty(value = "学生编号") private String sno; @ExcelProperty(value = "学生姓名") private String sname; }
- 代码测试
// 实现EasyExcel写操作 @Test public void writeExcel() { // 1.设置写入文件夹地址和excel文件名称 String filename = "D:\xusha\SpringProjects\guli_parent\service\service_education\src\test\java\com\xsha\demo\excel\files\write.xlsx"; // 2.准备数据集 List
list = new ArrayList<>(); for (int i = 0; i <5; i++) { MyData data = new MyData(); data.setSno(i); data.setSname("xiansen"+i); list.add(data); } // 3.调用EasyExcel里面的方法实现写的操作,第一个参数是文件路径,第二个参数是实体类名称 EasyExcel.write(filename, MyData.class).sheet("学生列表").doWrite(list); }
- 导入依赖的版本对应关系(版本慎重选择,否则发生冲突)
- EasyExcel读操作
- 导入的依赖及版本控制是一样的
- 创建的实体类也是excel表格字段一致,只不过在注解中增加一个属性,指定表格的第几个字段(从0开始)
package com.xsha.demo.excel; import com.alibaba.excel.annotation.ExcelProperty; import lombok.Data; @Data public class MyData { // 设置excel表表头 @ExcelProperty(value = "学生编号", index = 0) private Integer sno; @ExcelProperty(value = "学生姓名", index = 1) private String sname; }
- 创建一个“监听器”进行excel表的读取(结构较为固定,内容根据需求变动)
package com.xsha.demo.excel; import com.alibaba.excel.context.AnalysisContext; import com.alibaba.excel.event.AnalysisEventListener; import java.util.Map; public class ExcelListener extends AnalysisEventListener
{ // 逐行读取excel表格的内容 @Override public void invoke(MyData data, AnalysisContext analysisContext) { System.out.println(data.getSno()+"-----"+data.getSname()); } // 读取表头的内容 @Override public void invokeHeadMap(Map headMap, AnalysisContext context) { System.out.println("表头:"+headMap); } // 读取完成之后 @Override public void doAfterAllAnalysed(AnalysisContext analysisContext) { } } - 代码测试
// 实现EasyExcel读操作 @Test public void readExcel() { // 1.设置读取文件夹地址和excel文件名称 String filename = "D:\xusha\SpringProjects\guli_parent\service\service_education\src\test\java\com\xsha\demo\excel\files\write.xlsx"; // 3.调用EasyExcel里面的方法实现读的操作,第一个参数是文件路径,第二个参数是实体类名称,第三个参数是监听器 EasyExcel.read(filename, MyData.class, new ExcelListener()).sheet("学生列表").doRead(); }