一 Excel导入导出的应用场景
1 数据导入
减轻录入工作量
2 数据导出
统计信息归档
3 数据传输
异构系统之间数据传输
二 EasyExcel简介
1 官方网站
https://github.com/alibaba/easyexcel
快速开始:https://www.yuque.com/easyexcel/doc/easyexcel
2 EasyExcel特点
Java领域解析、生成Excel比较有名的框架有Apache poi、jxl等。但他们都存在一个严重的问题就是非常的耗内存。如果你的系统并发量不大的话可能还行,但是一旦并发上来后一定会OOM或者JVM频繁的full gc。
EasyExcel是阿里巴巴开源的一个excel处理框架,以使用简单、节省内存著称。EasyExcel能大大减少占用内存的主要原因是在解析Excel时没有将文件数据一次性全部加载到内存中,而是从磁盘上一行行读取数据,逐个解析。
EasyExcel采用一行一行的解析模式,并将一行的解析结果以观察者的模式通知处理(AnalysisEventListener)
三 写实战
1 创建一个普通的maven项目
项目名:alibaba_easyexcel
2 pom中引入xml相关依赖
1<dependencies> 2 <!-- easyexcel --> 3 <dependency> 4 <groupId>com.alibaba</groupId> 5 <artifactId>easyexcel</artifactId> 6 <version>2.1.7</version> 7 </dependency> 8 <!-- easyexcel依赖slf4j-simple --> 9 <dependency> 10 <groupId>org.slf4j</groupId> 11 <artifactId>slf4j-simple</artifactId> 12 <version>1.7.5</version> 13 </dependency> 14 <!-- easyexcel依赖xmlbeans --> 15 <dependency> 16 <groupId>org.apache.xmlbeans</groupId> 17 <artifactId>xmlbeans</artifactId> 18 <version>3.1.0</version> 19 </dependency> 20 <!-- lombok --> 21 <dependency> 22 <groupId>org.projectlombok</groupId> 23 <artifactId>lombok</artifactId> 24 <version>1.18.10</version> 25 </dependency> 26 <!-- junit --> 27 <dependency> 28 <groupId>junit</groupId> 29 <artifactId>junit</artifactId> 30 <version>4.12</version> 31 </dependency> 32</dependencies>
3 创建实体类
1@Data 2public class ExcelStudentData { 3 /** 4 * 姓名 5 */ 6 @ExcelProperty(value = "姓名", index = 2) 7 private String name; 8 /** 9 * 生日 10 */ 11 @DateTimeFormat("yyyy年MM月dd日HH时mm分ss秒") 12 @ExcelProperty(value = "生日", index = 3) 13 private Date birthday; 14 /** 15 * 薪资 16 */ 17 @NumberFormat("#.##%") 18 @ExcelProperty(value = "薪资", index = 5) 19 private Double salary; 20 /** 21 * 忽略密码字段 22 */ 23 @ExcelIgnore 24 private String password; 25}
4 创建测试
1public class ExcelWriteTest { 2 /** 3 * 功能描述:07版测试 4 * 5 * @author cakin 6 * @date 2020/11/30 7 */ 8 @Test 9 public void simpleWrite07() { 10 String fileName = "F:/temp/simpleWrite-07.xlsx"; 11 EasyExcel.write(fileName, ExcelStudentData.class) 12 .sheet("学生信息") 13 .doWrite(data()); 14 } 15 16 17 /** 18 * 功能描述:03版测试 19 * 20 * @author cakin 21 * @date 2020/11/30 22 */ 23 @Test 24 public void simpleWrite03() { 25 String fileName = "F:/temp/simpleWrite-03.xls"; 26 EasyExcel.write(fileName, ExcelStudentData.class) 27 .excelType(ExcelTypeEnum.XLS) // 默认是 XLSX 28 .sheet("学生信息") 29 .doWrite(data()); 30 } 31 32 33 /** 34 * 功能描述:构造数据 35 * 36 * @author cakin 37 * @date 2020/11/30 38 */ 39 private List<ExcelStudentData> data() { 40 List<ExcelStudentData> list = new ArrayList<>(); 41 for (int i = 0; i < 65535; i++) { 42 ExcelStudentData data = new ExcelStudentData(); 43 data.setName("Helen" + i); 44 data.setBirthday(new Date()); 45 data.setSalary(0.12345); 46 data.setPassword("123456"); 47 list.add(data); 48 } 49 return list; 50 } 51}
四 测试

五 说明
- 07版本的Excel和03版本的写入方式有所不同,03版本是一次性写入,可能会导致内容溢出问题,07版本是一条条写入。07版本写入文件后,大小较03版要小。
- 03版本的Excel一次最多可写65536行,07版本没限制。