• 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 = "存放文件的绝对路径\\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:\\xusha\\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();
        }
        
  • 相关阅读:
    [转]element UI表单校验特殊需求用法实现
    Windows10启用远程桌面并修改默认端口号
    [转]vuetreeselect 爬坑之路
    [转]关于IDEA创建module时名字后面出现中括号的情况例如 aaaa[bbbb]
    [转]玩转IDEA项目结构Project Structure,打Jar包、模块/依赖管理全搞定
    vue 父组件向子组件传值,子组件接收不到问题
    【Golang】golang开发微信公众号网页授权功能
    【Golang】golang实现sha256加密函数
    【Golang】golang实现urlencode urldecode函数
    【MySQL】mysql因为字符集导致left join出现Using join buffer (Block Nested Loop)
  • 原文地址:https://www.cnblogs.com/aitiknowledge/p/15937517.html
Copyright © 2020-2023  润新知