本篇文章只记录EasyExcel的读(read)
一、 EasyExcel 是做什么的?
首先看下EasyExcel解释:
EasyExcel是阿里巴巴开源的一个excel处理框架,是一个基于Java的简单、省内存的读写Excel的开源项目。EasyExcel能大大减少占用内存的主要原因是在解析Excel时没有将文件数据一次性全部加载到内存中,而是从磁盘上一行行读取数据,逐个解析。
开源地址:
github地址:https://github.com/alibaba/easyexcel
(光看代码我还是有点懵懵,到小破站搜了相关视频,狂神的一个视频直接解释得一清二楚。几乎直接照着他说的做就好了,当然了要根据自己的实际情况进行适当改动。)
二、项目背景
我做的一个小项目需要把excel表中的数据导入到数据库中,然而有些数据列中还包含了很多数组对象[{…},{…},{…},{…}],而这里面的内容是要当成一个一个字段分别储存到数据库里的,因为人工或者excel都不太现实。所以就去了解了一下这个框架的使用。
excel如下:
注意:excel 不要有任何表头,因为是直接从实体类对应的参数列开始读取
三、具体使用过程
1. pom.xml 配置要加:
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>2.2.6</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.alibaba/fastjson -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.75</version>
</dependency>
2. 代码共有三个步骤:
- 创建excel对应的实体对象Dao类;
- 写监听器:默认是一行行的读取excel,所以需要创建excel一行一行的回调监听器,监听器主要实现了读取和储存;
- 调取监听器:配置好excel的位置,调取监听器读取表,然后存入数据库
步骤一:建立excel对应的实体类
ps: 使用 @ExcelProperty 注解来说明对应的excel列
"电阻测试数据"对应的实体类
(这里需要说明一下,我当时在excel上把这4个参数名全部替换成了对应的英文名)
如果最后要存到数据库里的表结构 和 excel对应的实体类有出入(比如读取到的某个字段是数组对象结构如上图excel中的"电阻测试数据",那么还需要经过处理拆分成多个字段才能分开存入数据库),那就需要额外建立一个与数据库的表对应的类(略),用于接收所有数据并存入数据库中。
数据库创建的表:
步骤二:写监听器
监听器具体实现
/**
* Date:2021/10/20
* Description: excel一行一行的回调监听器
*
* @author ivyhu
*/
@Component
public class DemoDataListener extends AnalysisEventListener<ExcelModel> {
@Resource
ChargingStationMapper charingStationResistanceReportMapper;
@Resource
CharingStationServiceImpl charingStationServiceImpl;
private static final Logger LOGGER = LoggerFactory.get