五种Excel表格导出方案

发布于:2025-08-13 ⋅ 阅读:(14) ⋅ 点赞:(0)

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 渲染与编辑
  • 后端:负责文件存储与传输,不解析内容

流程:

  1. 前端导出 JSON → 后端存为 Excel
  2. 后端返回 Excel 二进制流 → 前端渲染

优势:

  • 支持复杂表格交互(合并单元格、图表)
  • 在线协作编辑

对比表

技术

数据量支持

易用性

功能完整性

典型场景

Apache POI

中(SXSSF 优化)

⭐⭐

⭐⭐⭐⭐⭐

精细控制 Excel 样式/公式

EasyExcel

⭐⭐⭐⭐⭐(百万级)

⭐⭐⭐⭐

⭐⭐⭐⭐

Spring Boot 大数据量导入导出

Easy-POI

⭐⭐⭐⭐⭐

⭐⭐⭐⭐

嵌套表格、模板导出

JXL

⭐(6 万行)

⭐⭐⭐⭐

⭐⭐

旧系统维护/简单导出

SpreadJS

依赖前端

⭐⭐

⭐⭐⭐⭐⭐

在线 Excel 协作编辑

使用建议

  1. 追求开发效率 → EasyExcel / Easy-POI
  2. 处理百万级数据 → EasyExcel 流式处理
  3. 需要复杂样式/公式 → Apache POI / SpreadJS
  4. 维护旧系统(.xls) → JXL(建议迁移到 POI)

网站公告

今日签到

点亮在社区的每一天
去签到