文章目录
先说结论
如果你的 Excel 文件不大,POI 也能用。可一旦进入"几万行导入、几十万行导出"的场景,POI 很容易把内存和响应时间一起拖垮。EasyExcel 的价值就在于它把大文件处理变成了流式读写,避免一次性把整本工作簿塞进内存。
POI 的问题在哪
POI 的典型写法是先把 workbook、sheet、row、cell 全部构建出来,再统一处理。数据一大,内存占用会非常明显,导出时还容易卡顿,甚至 OOM。
EasyExcel 怎么解决
EasyExcel 基于 SAX 思路做流式处理。读取时按行回调,写出时按批次生成,不需要把全部数据常驻内存。
java
EasyExcel.read(file, UserRow.class, new AnalysisEventListener<UserRow>() {
@Override
public void invoke(UserRow data, AnalysisContext context) {
// 单行处理
}
@Override
public void doAfterAllAnalysed(AnalysisContext context) {
// 收尾
}
}).sheet().doRead();
适合什么场景
- 大批量导入
- 定时任务导出
- 后台管理系统下载报表
- 需要边读边校验、边处理的场景
常见坑
- 表头映射不一致
- 导入校验逻辑过重
- 导出时样式处理和数据写入混在一起
- 大文件导出时没做分页和分批写入
最后
EasyExcel 不是"替代所有 Excel 处理"的银弹,但在大数据量场景里,它确实比 POI 更顺手,也更稳。