五种Excel表格导出方案
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> {@Overridepublic void invoke(Person person, AnalysisContext context) {// 单行处理}@Overridepublic 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)