EasyExcel-为什么比POI更适合批量导入导出

文章目录

先说结论

如果你的 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 更顺手,也更稳。