Spring Boot 中的 POI(Apache POI)读写office文件

一、什么是 Apache POI

Apache POI 是 Apache 基金会的项目,用于读写 Microsoft Office 格式的文件

  • Excel (.xls): HSSF(旧格式,Excel 97-2003)
  • Excel (.xlsx): XSSF(新格式,Excel 2007+)
  • Word (.docx): XWPF
  • PowerPoint (.pptx): XSLF

二、为什么用 POI

场景 说明
数据导出 用户下载报表、订单列表、用户清单
数据导入 用户上传 Excel 批量导入数据
模板生成 合同、发票、报告等固定格式文档
数据统计 生成图表、汇总数据

三、核心 API 概念

Excel 对象模型

Workbook(工作簿)
├── Sheet(工作表)
│   ├── Row(行)
│   │   └── Cell(单元格)
│   │       └── CellStyle(样式)

两种实现方式

模式 内存占用 适用场景
UserModel API XSSFWorkbook 高(整个文件加载到内存) 小文件(< 1万行)
Event API (SAX) SXSSF 低(流式处理) 大文件(10万+行)

四、POI 替代方案对比

方案 优点 缺点 适用场景
Apache POI 官方标准,功能最全 API 繁琐,内存占用大 中小文件
EasyExcel 阿里出品,内存占用极低 功能相对少 大数据量导出导入
JXL 轻量 已停止维护,不支持 .xlsx 老旧项目
Spring Batch 批处理框架集成 学习成本高 海量数据处理

总结

方案 适用行数 内存占用 推荐度
XSSFWorkbook (POI) < 1万行 ⭐⭐⭐
SXSSFWorkbook (POI) 1万-100万行 ⭐⭐⭐⭐
EasyExcel 10万-千万行 极低 ⭐⭐⭐⭐⭐

核心建议:

  1. 小文件(< 1万行)用 POI 原生 API
  2. 大文件(1万+行)优先用 EasyExcel
  3. 导入导出都要做安全校验(文件类型、大小、行数)
  4. 长数字(手机号、身份证)用字符串格式存储
  5. 中文文件名要用 URLEncoder 编码