EasyExcel的基本使用

  • 官方网址:https://www.yuque.com/easyexcel/doc/easyexcel
  • 应用场景
    • 数据导入:减少录入工作量
    • 数据导出:统计信息归档
    • 数据传输:异构系统之间数据传输
  • EasyExcel特点
    • 它是阿里巴巴开源的一个excel处理框架,以使用简单、节省内存著称。EasyExcel能大量减少占用内存的主要原因是在解析Excel时没有将文件数据一次性全部加载到内存中,而是从磁盘中一行行读取数据,逐个解析。
    • EasyExcel采用一行一行的解析模式,并将一行的解析结果以观察者的模式通知处理(AnalysisEventListener)
  • EasyExcel写操作
    • 导入依赖的版本对应关系(版本慎重选择,否则发生冲突)
      <dependency>
          <groupId>com.alibaba</groupId>
          <artifactId>easyexcel</artifactId>
          <version>2.1.1</version>
      </dependency>
      
      <!--xls-->
      <dependency>
          <groupId>org.apache.poi</groupId>
          <artifactId>poi</artifactId>
          <version>3.17</version>
      </dependency>
      <!--xlsx-->
      <dependency>
          <groupId>org.apache.poi</groupId>
          <artifactId>poi-ooxml</artifactId>
          <version>3.17</version>
      </dependency>
    • 创建一个与excel表格字段相对应的实体类(字段==属性)
      package com.xsha.demo.excel;
      
      import com.alibaba.excel.annotation.ExcelProperty;
      import lombok.Data;
      
      @Data
      public class MyData {
          // 设置excel表表头
          @ExcelProperty(value = "学生编号")
          private String sno;
      
          @ExcelProperty(value = "学生姓名")
          private String sname;
      }
    • 代码测试
      // 实现EasyExcel写操作
        @Test
        public void writeExcel() {
            // 1.设置写入文件夹地址和excel文件名称
            String filename = "D:\\SpringProjects\\guli_parent\\service\\service_education\\src\\test\\java\\com\\xsha\\demo\\excel\\files\\write.xlsx";
            // 2.准备数据集
            List<MyData> list = new ArrayList<>();
            for (int i = 0; i < 5; i++) {
                MyData data = new MyData();
                data.setSno(i);
                data.setSname("xiansen"+i);
                list.add(data);
            }
            // 3.调用EasyExcel里面的方法实现写的操作,第一个参数是文件路径,第二个参数是实体类名称
            EasyExcel.write(filename, MyData.class).sheet("学生列表").doWrite(list);
        }
  • EasyExcel读操作
    • 导入的依赖及版本控制是一样的
    • 创建的实体类也是excel表格字段一致,只不过在注解中增加一个属性,指定表格的第几个字段(从0开始)
      package com.xsha.demo.excel;
      
      import com.alibaba.excel.annotation.ExcelProperty;
      import lombok.Data;
      
      @Data
      public class MyData {
      
          // 设置excel表表头
          @ExcelProperty(value = "学生编号", index = 0)
          private Integer sno;
      
          @ExcelProperty(value = "学生姓名", index = 1)
          private String sname;
      }
    • 创建一个“监听器”进行excel表的读取(结构较为固定,内容根据需求变动)
      package com.xsha.demo.excel;
      
      import com.alibaba.excel.context.AnalysisContext;
      import com.alibaba.excel.event.AnalysisEventListener;
      
      import java.util.Map;
      
      public class ExcelListener extends AnalysisEventListener<MyData> {
          // 逐行读取excel表格的内容
          @Override
          public void invoke(MyData data, AnalysisContext analysisContext) {
              System.out.println(data.getSno()+"-----"+data.getSname());
          }
          
          // 读取表头的内容
          @Override
          public void invokeHeadMap(Map<Integer, String> headMap, AnalysisContext context) {
              System.out.println("表头:"+headMap);
          }
          
          // 读取完成之后
          @Override
          public void doAfterAllAnalysed(AnalysisContext analysisContext) {
          
          }
      }
    • 代码测试
      // 实现EasyExcel读操作
      @Test
      public void readExcel() {
          // 1.设置读取文件夹地址和excel文件名称
          String filename = "D:\\SpringProjects\\guli_parent\\service\\service_education\\src\\test\\java\\com\\xsha\\demo\\excel\\files\\write.xlsx";
          // 3.调用EasyExcel里面的方法实现读的操作,第一个参数是文件路径,第二个参数是实体类名称,第三个参数是监听器
          EasyExcel.read(filename, MyData.class, new ExcelListener()).sheet("学生列表").doRead();
      }
正文到此结束
评论插件初始化中...
Loading...