文章目录
- 1. EasyExcel 简介
- 2. 基础操作
- 2.1. 写入 Excel 🔥
- 2.2. 读取 Excel ✅
- 2.3. 使用模板 🎨
- 3. 常见问题与解决方案
- 3.1. 处理日期格式 📅
- 3.2. 数据写入失败:占位符无法匹配 ❌
- 3.3. 内存溢出:大数据量处理 ⚡
- 3.4. 空值处理 🚫
- 4. 面试常见问题
- 4.1. EasyExcel 与 POI 的区别
- 4.2. 如何优化 EasyExcel 性能?
- 4.3. Excel 文件读取时,有哪些事件可以监听?
- 5. 最终检查点 🔥
- 6. 总结 🌟
- 附:参考链接 🔗
1. EasyExcel 简介
✨ EasyExcel 是阿里巴巴开源的高效 Excel 读写工具,适用于 Java 项目中处理大量 Excel 数据。相比传统的 POI,EasyExcel 内存占用低,处理速度快,非常适合大数据量场景。
2. 基础操作
2.1. 写入 Excel 🔥
EasyExcel 提供了简单的 API 来写入 Excel。你只需要将数据列表传递给它,它会自动生成 Excel 文件。
步骤:
- 准备数据。
- 配置数据类(用
@ExcelProperty
注解字段)。 - 调用
EasyExcel.write()
方法写入数据。
示例代码:
java">import com.alibaba.excel.EasyExcel;
public class ExcelWriterDemo {
public static void main(String[] args) {
String fileName = "output.xlsx";
List<MyData> dataList = getData(); // 获取数据
EasyExcel.write(fileName, MyData.class).sheet("Sheet1").doWrite(dataList);
}
}
数据类配置:
java">@Data
public class MyData {
@ExcelProperty("序号")
private Integer id;
@ExcelProperty("名称")
private String name;
}
2.2. 读取 Excel ✅
EasyExcel 也提供了读取 Excel 文件的功能,支持监听每一行数据的读取。
示例代码:
java">EasyExcel.read("input.xlsx", MyData.class, new AnalysisEventListener<MyData>() {
@Override
public void invoke(MyData data, AnalysisContext context) {
System.out.println(data);
}
}).sheet().doRead();
2.3. 使用模板 🎨
你可以使用 Excel 模板,将数据填充到预设计好的模板中,这样可以减少重复工作。
示例代码:
java">InputStream in = this.getClass().getClassLoader().getResourceAsStream("template.xlsx");
OutputStream out = response.getOutputStream();
ExcelWriter excelWriter = EasyExcel.write(out).withTemplate(in).build();
excelWriter.fill(dataList, sheet);
excelWriter.finish();
3. 常见问题与解决方案
3.1. 处理日期格式 📅
日期字段的格式可能与需求不符。使用 @DateTimeFormat
或在读取时手动格式化。
解决方案:
java">@DateTimeFormat("yyyy-MM-dd HH:mm:ss")
@ExcelProperty("日期")
private LocalDateTime date;
3.2. 数据写入失败:占位符无法匹配 ❌
问题:在使用模板时,fill()
方法无法找到对应的占位符。
解决方案:
- 检查 Excel 模板中的占位符是否与 Java 类字段名一致。
- 确保占位符名称的 大小写 匹配。
3.3. 内存溢出:大数据量处理 ⚡
处理大量数据时可能会遇到内存溢出问题。建议使用流式写入,避免一次性加载所有数据。
解决方案:
java">ExcelWriter excelWriter = EasyExcel.write(outputStream).build();
WriteSheet writeSheet = EasyExcel.writerSheet("Sheet1").build();
excelWriter.write(dataList, writeSheet);
3.4. 空值处理 🚫
Excel 中可能存在空值,导致解析失败。
解决方案:
- 在数据类中使用默认值。
- 读取时判断空值并做处理。
java">@ExcelProperty("字段名")
private String field;
4. 面试常见问题
4.1. EasyExcel 与 POI 的区别
- 性能:EasyExcel 专为大数据量优化,内存占用低,处理速度快。
- API 简洁:API 更易上手,简洁明了。
4.2. 如何优化 EasyExcel 性能?
- 分批写入:避免一次性将所有数据写入内存。
- 模板使用:模板能减少重复生成 Excel 文件的工作。
4.3. Excel 文件读取时,有哪些事件可以监听?
invoke
:每读取到一行数据时触发。doAfterAllAnalysed
:数据读取完成后触发。onException
:出现异常时触发。
5. 最终检查点 🔥
✅ Excel 模板里是否有 {占位符}?
✅ fill() 是否能填充测试数据?
✅ XtInputStatisticsDto 里字段名和 Excel 占位符是否一致?
✅ EasyExcel 版本是否足够新(建议 3.x 及以上)?
你可以先手动测试填充,确保 EasyExcel 能找到占位符并填充数据,这样就不会 analysisCellList
为空了! 🚀
6. 总结 🌟
EasyExcel 是一个高效的 Excel 处理工具,特别适合大数据量的读取与写入。掌握它的基本用法和常见问题解决方案,能显著提高你的开发效率。
学完了可以看看下面这个实例哦!
EasyExcel 实践案例:打印工资条
附:参考链接 🔗
- EasyExcel 官方文档