EasyExcel
使用场景
- 数据导入,减轻录入工作量
- 数据导出,统计信息归档
- 数据传输,异构系统之间数据传输
EasyExcel介绍
节省内存,逐行读取
- Java领域解析、生成Excel比较有名的框架有Apache poi、jxl等。但他们都存在一个严重的问题就是非常的耗内存。如果你的系统并发量不大的话可能还行,但是一旦并发上来后一定会OOM或者JVM频繁的full gc。
- EasyExcel是阿里巴巴开源的一个excel处理框架,以使用简单、节省内存著称。EasyExcel能大大减少占用内存的主要原因是在解析Excel时没有将文件数据一次性全部加载到内存中,而是从磁盘上一行行读取数据,逐个解析。
- EasyExcel采用一行一行的解析模式,并将一行的解析结果以观察者的模式通知处理(AnalysisEventListener)。
EasyExcel读写操作
导入依赖
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>2.1.1</version>
</dependency>
创建实体类
package com.online.edu.eduservice.entity;
import com.alibaba.excel.annotation.ExcelProperty;
import lombok.Data;
import lombok.ToString;
/**
* @author Double strong
* @date 2020/4/20 9:33
*/
@Data
@ToString
public class ExcelDemo {
// 设置表头
@ExcelProperty("学生编号")
private int sno;
@ExcelProperty("学生姓名")
private String sname;
}
测试写操作
// easyExcel测试写数据
@Test
public void testWrite(){
List<ExcelDemo> list=new ArrayList<>();
for (int i=0;i<10;i++)
{
ExcelDemo excelDemo=new ExcelDemo();
excelDemo.setSno(i);
excelDemo.setSname("张三"+i);
list.add(excelDemo);
}
String fileName="D:\\111.xlsx";
//传入 文件地址,写操作类对象,表单名,数据集合
EasyExcel.write(fileName,ExcelDemo.class).sheet("表单1").doWrite(list);
}
测试读操作
创建读取操作监听器ExcelListener
- 实现
AnalysisEventListener<ExcelDemo
>接口方法 invoke
一行行的读取数据doAfterAllAnalysed
整个过程结束后执行该方法invokeHeadMap
读取表头信息
package com.online.edu.eduservice.Utils;
import com.alibaba