1.Apache POI(基础库方案)
核心特点:
- 官方底层库,支持 .xls(HSSF) 和 .xlsx(XSSF / SXSSF)
- 提供完整 API(单元格操作、公式计算、样式控制)
- 缺点:
内存消耗较大(XSSF 全内存加载,SXSSF 流式写入可缓解)
代码量较多,需要手动处理行列与类型转换
典型代码:
Workbook wb = new XSSFWorkbook();
Sheet sheet = wb.createSheet("Data");
Row row = sheet.createRow(0);
row.createCell(0).setCellValue("姓名");
row.createCell(1).setCellValue("年龄");
try (FileOutputStream fos = new FileOutputStream("data.xlsx")) {
wb.write(fos);
}
适用场景:需要精细控制 Excel 样式、公式或旧版 .xls 兼容的场景。
2.EasyExcel(阿里开源流式方案)
核心优化:
- 基于事件模型逐行解析/写入,解决 POI 内存溢出
- 注解驱动:@ExcelProperty 映射字段与列
- 监听器机制:分批处理数据(如每 1000 条入库一次)
典型代码:
public class DataListener extends AnalysisEventListener<Person> {
@Override
public void invoke(Person person, AnalysisContext context) {
// 单行处理
}
@Override
public void doAfterAllAnalysed(AnalysisContext context) {
// 全部完成
}
}
EasyExcel.read("data.xlsx", Person.class, new DataListener())
.sheet()
.doRead();
适用场景:大数据量导入导出(>10 万行)、Spring Boot 快速集成。
3.Easy-POI(注解驱动方案)
扩展功能:
- 基于 POI 封装,简化复杂结构导出(如一对多嵌套表)
- 注解配置:@Excel 定义列名/格式,@ExcelCollection 处理嵌套
- 校验支持:集成 Hibernate Validator
一对多导出示例:
public class OrderVO {
@Excel(name = "订单号")
private String orderId;
@ExcelCollection(name = "商品列表")
private List<Product> products;
}
ExcelExportUtil.exportExcel(exportParams, OrderVO.class, orderList);
适用场景:导出含子表格的报表(如订单+商品明细)、需要表头校验的场景。
4.JXL(轻量级旧版方案)
特点与限制:
- 仅支持 .xls 格式(最大 65536 行)
- API 简洁但功能弱(不支持公式、条件格式等)
- 适合小数据量快速操作
导出示例:
WritableWorkbook workbook = Workbook.createWorkbook(new File("output.xls"));
WritableSheet sheet = workbook.createSheet("Sheet1", 0);
sheet.addCell(new Label(0, 0, "Hello"));
workbook.write();
workbook.close();
适用场景:遗留系统维护、无需新 Excel 格式的简单导出。
5.前后端协作方案(SpreadJS + 后端)
实现模式:
- 前端:SpreadJS 实现 Excel 渲染与编辑
- 后端:负责文件存储与传输,不解析内容
流程:
- 前端导出 JSON → 后端存为 Excel
- 后端返回 Excel 二进制流 → 前端渲染
优势:
- 支持复杂表格交互(合并单元格、图表)
- 在线协作编辑
对比表
技术 |
数据量支持 |
易用性 |
功能完整性 |
典型场景 |
Apache POI |
中(SXSSF 优化) |
⭐⭐ |
⭐⭐⭐⭐⭐ |
精细控制 Excel 样式/公式 |
EasyExcel |
⭐⭐⭐⭐⭐(百万级) |
⭐⭐⭐⭐ |
⭐⭐⭐⭐ |
Spring Boot 大数据量导入导出 |
Easy-POI |
中 |
⭐⭐⭐⭐⭐ |
⭐⭐⭐⭐ |
嵌套表格、模板导出 |
JXL |
⭐(6 万行) |
⭐⭐⭐⭐ |
⭐⭐ |
旧系统维护/简单导出 |
SpreadJS |
依赖前端 |
⭐⭐ |
⭐⭐⭐⭐⭐ |
在线 Excel 协作编辑 |
使用建议
- 追求开发效率 → EasyExcel / Easy-POI
- 处理百万级数据 → EasyExcel 流式处理
- 需要复杂样式/公式 → Apache POI / SpreadJS
- 维护旧系统(.xls) → JXL(建议迁移到 POI)