使用EasyExce对excel进行读取

EasyExcel

  • EasyExcel是阿里开源的一个excel处理框架,以使用简单、节省内存著称,其能大大减少内存占用的原因是因为在解析Excel的时候,并没有把excel文件中所有的内容都一次性全部加载到内存中,而是从文件中一行一行进行读取,逐个解析。
  • Java领域中,excel处理的比较有名的框架主要是poi和jxl,但这两个都存在内存占用非常大的问题,如果系统的并发量不大的话基本没有什么问题,但是如果并发使用量特别大的话,极容易造成OOM问题。
  • EasyExcel读取文件采用一行一行读取,数据读取后,会调用对应的Listener进行处理,这里采用了观察者的设计模式。
  • github地址

show the code

  • pom文件
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>easyexcel</artifactId>
        <version>2.2.7</version>
    </dependency>
    
  • 定义跟excel文件中内容对应的java实体类
    @Data
    public class ExcelData {
    
        @ExcelProperty("id")
        private Integer id ;
        @ExcelProperty("name")
        private String name ;
        @ExcelProperty("email")
        private String email ;
    }
    
    其中ExcelProperty注解指定了实体类中的属性与excel文件中文件头的对应关系。
  • 编写相应的Listener
    class MyListener2 extends AnalysisEventListener<ExcelData> {
    
        private List<ExcelData> dataList ;
    
        public MyListener2(List<ExcelData> dataList){
            this.dataList = dataList ;
        }
    
        public void invoke(ExcelData data, AnalysisContext context) {
            dataList.add(data);
        }
    
        public void doAfterAllAnalysed(AnalysisContext context) {
            System.out.println("数据读取完毕。。。。。。");
        }
    }
    
    其中,dataList属性为接收数据的存储结构,在listener构造器中进行传入。监听器中,invoke方法为easyExcel每读取一行数据后进行调用的方法,而doAfterAllAnalysed方法为excel文件整体读取完毕后调用的方法。
  • 调用code
    @Test
    public void test_EasyExcel() throws Exception {
        List<ExcelData> dataList = new LinkedList<ExcelData>();
    	//指定读取的文件
        ExcelReaderBuilder builder = EasyExcel.read("C:\\\\Users\\\\Administrator\\\\Desktop\\\\123.xlsx");
        //自动关闭流
        builder.autoCloseStream(true);
        //指定excel文件的type
        builder.excelType(ExcelTypeEnum.XLSX);
        //注册数据读取后处理的监听器
        builder.registerReadListener(new MyListener2(dataList));
        //指定标题与属性的对应关系的class
        builder.head(ExcelData.class);
    	//读取文件
        builder.doReadAll();
    	//打印获取到的数据
        for (ExcelData data : dataList) {
        System.out.println(data);
        }
    }
    
  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值