一、什么是 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万行)用 POI 原生 API
- 大文件(1万+行)优先用 EasyExcel
- 导入导出都要做安全校验(文件类型、大小、行数)
- 长数字(手机号、身份证)用字符串格式存储
- 中文文件名要用 URLEncoder 编码