EasyExcel 快速复习
一、什么是 EasyExcel?
EasyExcel 是阿里巴巴开源的基于 Java 的 Excel 操作库,核心目标是 低内存、高性能 地读写 Excel(支持 .xls 和 .xlsx)。
通俗理解:
EasyExcel 就是 Spring Boot 中 Java 对象(List)与 Excel 文件双向交互的技术。
主要场景:
Java 对象(List) → 写入 Excel 并导出(导出报表)
Excel 文件 → 读取数据并转换为 Java 对象(导入数据)
二、掌握 EasyExcel 需要搞懂的三个问题
-
Excel 的基本概念(开发视角)
工作簿(Workbook):一个 Excel 文件(如 order.xlsx)
工作表(Sheet):一个文件中的多个标签页(Sheet1、Sheet2...)
表头(Header):第一行,通常用于描述字段含义(如"姓名""年龄")
数据行(Row):表头以下的每一行,对应一条业务数据
单元格(Cell):行与列交叉的最小单位
在 EasyExcel 中,我们通常用一个 Java 实体类 对应 Excel 的 一列(字段),一个 List<实体> 对应 多行数据。
-
如何在 Spring Boot 中引入 EasyExcel?
这个核心在处理依赖兼容匹配
在 pom.xml 中添加依赖(最新稳定版):
xml
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>3.3.3</version> <!-- 2025 年主流版本 -->
</dependency>
注意:无需额外配置,直接在 Service 或 Controller 中使用即可。
- 交互步骤与最佳实践
✅ 场景一:导出 Excel(Java List → Excel)
步骤:
定义实体类,并用 @ExcelProperty("姓名") 标注字段
准备 List 数据
使用 EasyExcel.write(outputStream, clazz).sheet("Sheet1").doWrite(list)
示例:
// 实体类
java
public class User {
@ExcelProperty("用户ID")
private Long id;
@ExcelProperty("姓名")
private String name;
@ExcelProperty("邮箱")
private String email;}
✅ 场景二:导入 Excel(Excel → Java List)
步骤:
定义同样的实体类(带 @ExcelProperty)
接收前端上传的 MultipartFile
使用 EasyExcel.read(file.getInputStream(), clazz, listener).sheet().doRead()
通过 监听器(ReadListener) 分批处理数据(避免 OOM)
监听器示例:
java
public class UserExcelListener extends AnalysisEventListener<User> {
private static final int BATCH_COUNT = 1000;
private List<User> list = new ArrayList<>();
@Override
public void invoke(User user, AnalysisContext context) {
list.add(user);
if (list.size() >= BATCH_COUNT) {
// 批量保存到数据库
saveData(list);
Controller 接收:
java
@PostMapping("/import")
public String importExcel(@RequestParam("file") MultipartFile file) {
try {
EasyExcel.read(file.getInputStream(), User.class, new UserExcelListener())
.sheet()
.doRead();
} catch (Exception e) {
throw new RuntimeException("导入失败", e);
}
return "success";
三、最佳实践总结
✅ 实体类必须用 @ExcelProperty 标注字段顺序或名称
✅ 导入务必使用 监听器 + 分批处理,防止内存溢出(OOM)
✅ 导出大文件可考虑 分页查询 + 流式写入
✅ 支持自定义样式、合并单元格、下拉框等(进阶用法)
✅ 文件后缀:.xlsx 是默认格式,.xls 需额外注意兼容性(不推荐)
四、常用命令速查
功能
代码示例
导出
EasyExcel.write(outputStream, Class).sheet().doWrite(list)
导入
EasyExcel.read(inputStream, Class, listener).sheet().doRead()
注解
@ExcelProperty("列名")、@ColumnWidth(20)、@DateTimeFormat("yyyy-MM-dd")
通过以上内容,你已经掌握了 EasyExcel 的核心思想和实战用法。
重点记住:对象 ↔ Excel,靠注解对齐;大数据读写,靠监听器分批处理。