一.简介
Java领域解析、生成Excel比较有名的框架有Apache poi、jxl等。但他们都存在一个严重的问题就是非常的耗内存。如果你的系统并发量不大的话可能还行,但是一旦并发上来后一定会OOM或者JVM频繁的full gc。
easyExcel是阿里巴巴开源的一个excel处理框架,以使用简单、节省内存著称。
二.写操作
1.引入依赖
对office操作还要引入POI依赖
Apache POI是Apache软件基金会的开源项目,POI提供API给Java程序对Microsoft Office格式档案读和写的功能。 .NET的开发人员则可以利用NPOI (POI for .NET) 来存取 Microsoft Office文档的功能。
<!--xls-->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>${poi.version}</version>
</dependency>
<!--xlsx-->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>${poi.version}</version>
</dependency>
<dependencies>
<!-- https://mvnrepository.com/artifact/com.alibaba/easyexcel -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>2.1.1</version>
</dependency>
</dependencies>
2.创建实体类
创建实体类与excel中的数据对应
* 读操作的时候还要标记对应列关系
*/
@Data
public class DemoData {
@ExcelProperty(value = "学生姓名",index = 0)
private String sname;
@ExcelProperty(value = "学生编号",index = 1)
private Integer sno;
}
3.进行写操作
将自己设定的list写入excel中
public class TestWriteEasyExcel {
public static void main(String[] args) {
//实现excel的写操作
//设置写入的文件夹地址和excel文件名,
String filename="H:\\write.xlsx";
//调用easyexcel中的方法是实现写操作,
//文件流自动关闭
EasyExcel.write(filename,DemoData.class).sheet("学生列表").doWrite(getData());
}
//创建一个方法返回list集合
private static List<DemoData> getData(){
List<DemoData> list=new ArrayList<>();
for(int i=0;i<10;i++){
DemoData demoData=new DemoData();
demoData.setSno(i);
demoData.setSname("lucy"+i);
list.add(demoData);
}
return list;
}
}
执行后
三.读操作
与写操作不同的是,在实体类中添加了index属性注解
并且添加了一个监听器
1.添加依赖
2.创建excel监听器,一行一行的读取信息
public class ExcelListener extends AnalysisEventListener<DemoData> {
//一行一行的读取信息,但是不读表头
@Override
public void invoke(DemoData demoData, AnalysisContext analysisContext) {
System.out.println("******"+demoData);
}
//读取表头信息,里面有方法,复制即可
public void invokeHeadMap(Map<Integer, String> headMap, AnalysisContext context) {
System.out.println("表头"+headMap);
}
//读取完成之后
@Override
public void doAfterAllAnalysed(AnalysisContext analysisContext) {
}
}
3.读操作
public class TestReadEasyExcel {
public static void main(String[] args) {
String filename="H:\\write.xlsx";
EasyExcel.read(filename,DemoData.class,new ExcelListener()).sheet().doRead();
}
}
4.测试