工作原理
-
Excel文件解析
EasyExcel通过POI库解析Excel文件,将文件内容读取到内存中。POI库提供了对Excel文件的解析和操作功能。
-
数据读取
EasyExcel通过POI提供的API,按照指定的规则读取Excel文件中的数据。可以按行读取数据,也可以按照指定的单元格范围读取数据。
-
数据处理
EasyExcel将读取到的数据进行处理,可以进行数据转换、筛选、排序等操作。还可以通过注解方式将数据映射到Java对象中,简化数据处理过程。
-
数据写入
EasyExcel通过POI提供的API,将处理后的数据写入到新的Excel文件中,或者将数据追加到已有的Excel文件中。可以指定写入的单元格位置和样式。
使用类型
业务场景
1、按sheet页进行导入导出
2、单sheet导出导出
3、标题指定行数
4、大文件导入
业务问题
-
公式的数据导入异常
- 场景:导入的时候发现部分数据无法解析
- 排查原因:
- 查看未读取到的数据特点(含有公式)
- 通过断点调试,判断文件流读取的数据是否正常
- 找到异常的代码块
- 解决方案:
- 修改代码,是数据类型少判断一层(字符串只判断了日期)
- 含有公式的数据不导入,在服务器进行计算
-
格式转换
- 转换异常导致读取不到(如日期等)
- 解决方案:
- 创建类型转换工具类
- 使用@JsonFormat注解进行转换(常用在日期)
- 解决方案:
- 自定义处理逻辑(一般比较复杂,如需要进行字符串拆分、拼接等)
- 转换异常导致读取不到(如日期等)
-
大文件上传解析问题(限、拆、)
- 太大导致内存溢出
- 解决方案:
- 限制上传大小
- 分片上传:给每段小文件添加文件信息(索引、状态、大小等)
- 多线程拆分解析
- 解决方案:
- 多sheet导入
- 解决方案:多线程并发解析,实质依旧是进行拆分处理
注意多线程的数据一致性问题
- 解决方案:多线程并发解析,实质依旧是进行拆分处理
- 太大导致内存溢出
使用方法
<!--常用工具类 -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
</dependency>
<!-- io常用工具类 -->
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
</dependency>
<!-- excel工具 -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
</dependency>
相关工具类+格式适配器接口代码:https://blog.csdn.net/qq_45698181/article/details/132318302