在 Java Web 项目中,Excel 的导入导出是常见需求,技术栈丰富。以下是主流方案、优缺点及适用场景总结。
技术栈 | 是否推荐 | 支持格式 | 特点 / 优势 | 使用难度 |
---|---|---|---|---|
Apache POI | ✅ 常用 | .xls 、.xlsx |
功能全、稳定、低层操作,适合定制化 | 中 |
EasyExcel(阿里) | ✅ 强烈推荐 | .xlsx |
内存占用小,性能优越,适合大数据量导入导出 | 简单 |
JXL(已废弃) | ❌ 不推荐 | .xls |
太老旧,不支持 .xlsx ,功能有限 |
简单 |
ExcelUtils / Hutool | ⚠️ 小型项目 | .xls 、.xlsx |
工具类封装好,适合轻量需求,但扩展性差 | 非常简单 |
Aspose.Cells | ⚠️ 商业库 | .xls 、.xlsx |
功能强大,跨平台,支持图表/公式/格式复杂导出 | 简单(收费) |
.xls
(HSSF)、.xlsx
(XSSF)<dependency>
<groupId>org.apache.poigroupId>
<artifactId>poi-ooxmlartifactId>
<version>5.2.3version>
dependency>
适合:需要复杂样式、表格公式、图表导出的业务场景。
.xls
,只支持 .xlsx
<dependency>
<groupId>com.alibabagroupId>
<artifactId>easyexcelartifactId>
<version>3.3.2version>
dependency>
适合:大文件导入导出、Web 接口提供 Excel 下载上传、内存敏感系统。
ExcelUtil.getReader().read()
、write()
很方便<dependency>
<groupId>cn.hutoolgroupId>
<artifactId>hutool-allartifactId>
<version>5.8.22version>
dependency>
适合:小项目、后管系统、临时导出功能。
适合:政府项目、报表系统、需要复杂 Excel 生成的项目。
应用场景 | 推荐技术栈 |
---|---|
后台管理系统小量导入导出 | EasyExcel / Hutool |
需要复杂格式(合并单元格、样式) | Apache POI |
高性能大批量导入导出(万级以上) | ✅ EasyExcel(首选) |
Web 前端下载模板、上传回填 | EasyExcel + 模板导入导出 |
Java 微服务 → Excel 导出 | EasyExcel + Spring MVC |
高级报表生成(图表、公式) | Aspose.Cells(商业) |
技术 | 用途 |
---|---|
Spring MVC | 上传下载控制器处理 Excel |
Spring Validation | 导入时校验字段合法性 |
Redis + 异步任务 | 大文件导出任务异步处理 + 进度通知 |
Sa-Token/JWT | 导入导出接口权限控制 |
Vue/React 前端 | 提供文件选择上传 + 下载按钮 |
// 读取导入
EasyExcel.read(file.getInputStream(), MyModel.class, new MyListener()).sheet().doRead();
// 导出
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
EasyExcel.write(response.getOutputStream(), MyModel.class).sheet("Sheet1").doWrite(dataList);