EasyExcel使用

352 阅读1分钟

EasyExcel 是阿里巴巴开源的一个excel处理框架,以使用简单、节省内存著称,它采用一行一行的解析模式,并将一行的解析结果以观察者的模式通知处理(AnalysisEventListener)。能大大减少占用内存的主要原因就是在解析Excel时没有将文件数据一次性全部加载到内存中,而是从磁盘上一行行读取数据,逐个解析。在项目中遇到表格导入导出需求时 推荐使用。

1: pom中引入xml相关依赖

<!-- Easy excel 工具 -->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>easyexcel</artifactId>
    <version>2.1.1</version>
</dependency>

案例入门: 1 : 创建实体类 使用注解 @ExcelProperty

@Data
public class DemoData {

    @ExcelProperty(value = "编号",index = 0)
    private int sno;

    @ExcelProperty(value = "姓名",index = 1)
    private String sname;

    public int getSno() {
        return sno;
    }
    
    public void setSno(int sno) {
        this.sno = sno;
    }

}

定义测试类 模拟excel测试数据 :

// 模拟EXCEL 测试数据
private  static List<DemoData>  data() {
    List<DemoData> list = new ArrayList<DemoData>();
    for (int i = 0; i < 10; i++) {
        DemoData data = new DemoData();
        data.setSno(i);
        data.setSname("张三"+i);
        list.add(data);
    }
    return list;
}

导出测试:

@Test
public void writeTest(){
     //导出位置及文件名
     String fileName = "E:\eduOnlinePrject\feige.xlsx";
     EasyExcel.write(fileName,DemoData.class).sheet("method1").doWrite(data());
}

导出的测试数据 image.png

导入测试: 定义Excel监听类 ExcelListener 继承 AnalysisEventListener。导入后逻辑 在 invoke 方法中处理。

public class ExcelListener  extends AnalysisEventListener<DemoData> {

   //一行一行去读取excle内容
   @Override
   public void invoke(DemoData demoData, AnalysisContext analysisContext) {
       System.out.println(" 读取excle数据: "+demoData.toString());
   } 
   
   //读取完成后执行
   @Override
   public void doAfterAllAnalysed(AnalysisContext analysisContext) {
       System.out.println("读取excle内容结束");
   }
}

测试方法:

// 导入
 @Test
 public void readTest(){
     String fileName = "E:\eduOnlinePrject\ltf.xlsx";
     EasyExcel.read(fileName,DemoData.class,new ExcelListener()).sheet().doRead();
 }

读取Excel数据:

image.png


项目中使用: 1. 导入Excel数据

定义导入数据对象:

image.png

控制层 前端上传Excel 导入文件:

image.png

服务层:获取文件输入流 调用EasyExcel read方法:

image.png 定义Excel 读取监听器 SubjectExcelListener ,继承AnalysisEventListener 实现 invoke方法:

image.png

1. 导出Excel数据 调用EasyExcel write方法即可。

@Override
public void outSubject() {
    String file = UUID.randomUUID().toString();
    String fileName = "E:\eduOnlinePrject\"+ file +".xlsx";
    List<EduSubject> eduSubjects = baseMapper.selectList(null);
    EasyExcel.write(fileName,EduSubject.class).sheet().doWrite(eduSubjects);
}