Java解析、生成Excel比较有名的框架有Apache poi、jxl等,使用者可自行斟酌。
一、 为什么使用 EasyExcel
1.1 内存控制
Apache poi、jxl也能解析Excel,但他们都存在一个问题就是非常的耗内存,poi有一套SAX模式的API可以一定程度的解决一些内存溢出的问题,但POI还是有一些缺陷,比如07版Excel解压缩以及解压后存储都是在内存中完成的,内存消耗依然很大。
easyexcel重写了poi对07版Excel的解析,一个3M的excel用POI sax解析依然需要100M左右内存,改用easyexcel可以降低到几M,并且再大的excel也不会出现内存溢出;03版依赖POI的sax模式,在上层做了模型转换的封装,让使用者更加简单方便。
1.2 使用简洁
EasyExcel 可以映射excel和实体类,让代码变的更加简洁,读写更方便。
二、springboot 整合 EasyExcel
2.1 添加maven依赖
<!-- spring-boot 使用自己项目的版本就好 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- alibaba 相关依赖 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>3.3.3</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
</dependency>
<!-- lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.24</version>
</dependency>
2.2 读Excel
2.2.1 准备数据源,Excel 表
姓名 | 证件号 | 证件类型 |
---|---|---|
张三 | 500000000000000000x | 户口簿 |
李四 | 5111111111111111111 | 身份证 |
王不二 | 5222222222222222222 | 身份证 |
赵五 | 5252513xdg | 护照 |
2.2.2 创建与数据表对应的实体类
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.format.DateTimeFormat;
import com.alibaba.excel.annotation.format.NumberFormat;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* @author lqf
* @date 2024/1/11 11:00
*/
@Data
@EqualsAndHashCode
public class AccountCenterByExcelVO {
/**
* 姓名
*/
// 可以使用指定 表格下标或者 表头名字 的方式来对应数据。视情况选择,优弊如下:
// 使用表下标,会让制表变得不灵活,使用表名会造成 名字重复,只有一个字段读取到数据
// @ExcelProperty(index = 1)
@ExcelProperty("姓名")