介绍
EasyExcel是一个基于Java的、快速、简洁、解决大文件内存溢出的Excel处理工具。
他能让你在不用考虑性能、内存的等因素的情况下,快速完成Excel的读、写等功能。
快速:快速的读取excel中的数据。
简洁:映射excel和实体类,让代码变的更加简洁。
大文件:在读写大文件的时候使用磁盘做缓存,更加的节约内存。
官方文档:https://easyexcel.opensource.alibaba.com/
引入依赖
xml
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>3.1.0</version>
</dependency>
创建实体类
java
package com.example.study.vo.sys;
import com.alibaba.excel.annotation.ExcelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @author guochao
* @version 1.0
* @date 2023/10/18
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class SysClassifyExcelVo {
@ExcelProperty(value = "id",index = 0)
private Long id;
@ExcelProperty(value = "名称",index = 1)
private String name;
@ExcelProperty(value = "类型",index = 2)
private String type;
@ExcelProperty(value = "上级id",index = 3)
private Long parentId;
@ExcelProperty(value = "排序",index = 4)
private Long sort;
}
创建监听类
java
package com.itgc.test;
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import java.util.ArrayList;
import java.util.List;
/**
* @author guochao
* @version 1.0
* @date 2023/10/18
*/
public class ExcelListener<T> extends AnalysisEventListener<T> {
private List<T> data = new ArrayList<>();
//读取exceL内容,
//从第二行开始读取,把每行读取内容封装到t对象里面
@Override
public void invoke(T t, AnalysisContext analysisContext) {
data.add(t);
}
public List<T> getData(){
return data;
}
@Override
public void doAfterAllAnalysed(AnalysisContext analysisContext) {
}
}
使用
java
package com.itgc.test;
import com.alibaba.excel.EasyExcel;
import com.example.study.vo.sys.SysClassifyExcelVo;
import java.util.ArrayList;
import java.util.List;
/**
* @author guochao
* @version 1.0
* @date 2023/10/18
*/
public class EasyExcelTest {
public static void main(String[] args) {
// read();
write();
}
//读操作
public static void read(){
//1 定义读取excel文件位置
String fileName = "D://01.xlsx";
//2 调用方法
ExcelListener<SysClassifyExcelVo> excelListener = new ExcelListener<>();
EasyExcel.read(fileName, SysClassifyExcelVo.class,excelListener).sheet().doRead();
List<SysClassifyExcelVo> data = excelListener.getData();
System.out.println(data);
}
//写操作
public static void write(){
List<SysClassifyExcelVo> list = new ArrayList<>();
list.add(new SysClassifyExcelVo(1L,"分类1","课程",0L,0L));
list.add(new SysClassifyExcelVo(2L,"分类1-1","课程",1L,1L));
EasyExcel.write("D://02.xlsx",SysClassifyExcelVo.class)
.sheet("分类数据").doWrite(list);
}
}