龙空技术网

Easyexcel快速入门—解决文件上传解析结果统计方案

研博数据 63

前言:

目前兄弟们对“java读取excel文件内存溢出”大体比较重视,朋友们都需要了解一些“java读取excel文件内存溢出”的相关资讯。那么小编同时在网络上网罗了一些有关“java读取excel文件内存溢出””的相关内容,希望同学们能喜欢,咱们一起来了解一下吧!

  前言:应用于在原有excel基础上,对解析失败行进行标记处理,仅提供思路,若有不足还望指正。

  一、什么是Easyexcel

  EasyExcel是一个基于Java的、快速、简洁、解决大文件内存溢出的Excel处理工具。

  他能让你在不用考虑性能、内存的等因素的情况下,快速完成Excel的读、写等功能。

  所需依赖

  二、读Excel

  1. 关联对象

  创建对象的属性数据类型需要与excel单元格中数据类型相同,如日期,数字需要格式转换可参考官方文档自定义格式转换。

  2. 编写监听器

  定义一个类实现ReadListener接口,并且重写invoke(),doAfterAllAnalysed(),onException()方法。

  因为ReadListener不能被spring管理,每次使用都需要new出来,所以如果需要使用springBean对象可以通过构造器注入。

  invoke()方法为每解析excel中一行数据都会执行的方法,可以在此方法中对解析后得到的对象中的数据进行数据校验,在这里就可以对校验有误的数据进行记录行号。

  在demo中,本次还定义了BATCH_COUNT和cachedDataList,BATCH_COUNT用来限制最多读取多少条数据同时插入到数据库中,避免一条条插入资源浪费。cachedDataList即对未达到最大数量前所读取到数据的临时缓存。每进行一次插入后都需要对cachedDataList进行清理

  onException()方法是在invoke()方法解析抛出异常时执行的方法,在方法的入参context中可以获取抛出异常的行数,列数以及数据,可以通过记录行号进行标记。

  doAfterAllAnalysed()方法是在所有数据都解析完之后触发执行,可以在此处进行最后的数据插入操作,并且清理集合。然后对所统计的到的结果进行统计处理。

  三、结果统计思路

  通过在监听器中定义一个集合,用于临时缓存onException方法执行时所获得的行号,然后存储到异常行号集合中,在最后执行doAfterAllAnalysed()方法时通过异常集合中的行号对文件中对应的行进行标记处理。因为Easyexcel依赖了poi,所以可以直接通过poi的依赖直接在指定行的最后一列添加处理失败的逻辑,如此便可以在不创建新的excel文件的前提下,对上传的excel文件进行解析结果处理。最后便可以将处理后的excel文件进行导出。

标签: #java读取excel文件内存溢出