EasyExcel - Excel处理工具新手入门指南
项目概览
| |
| 项目名称 | |
| 组织 | |
| Stars | 1.5K+ (Gitee) / 30K+ (GitHub) ⭐⭐⭐⭐⭐ |
| Watching | |
| 语言 | |
| Gitee 仓库 | https://gitee.com/easyexcel/easyexcel[1] |
| 官网 | https://easyexcel.opensource.alibaba.com/[2] |
| 最新版本 | |
| 开源协议 | |
项目简介
EasyExcel 是阿里巴巴开源的一个快速、简洁、解决大文件内存溢出的 Java 处理 Excel 工具。
核心价值
•低内存:16M 内存 23 秒读取 75M (46W 行 25 列) 的 Excel•简单易用:一行代码完成读写操作•高性能:极速模式更快读取
⚠️ 维护公告
EasyExcel 已进入维护模式,会进行 Bug 修复,但不再主动新增功能。建议用户评估并迁移到其他产品。
核心功能特性
1. 读取 Excel
•✅ 大文件读取不内存溢出•✅ 支持多种读取模式•✅ 支持异步读取•✅ 支持读取多个 Sheet
2. 写入 Excel
•✅ 支持大数据量写入•✅ 支持模板填充•✅ 支持样式设置•✅ 支持合并单元格
3. Web 上传下载
•✅ 支持 Web 环境上传•✅ 支持 Web 环境下载•✅ 支持响应流输出
4. 高级功能
•✅ 支持数据转换•✅ 支持数据校验•✅ 支持动态列•✅ 支持加密解密
技术架构
┌─────────────────────────────────────────────────────────────┐│ EasyExcel │├─────────────────────────────────────────────────────────────┤│ 核心模块 ││ ├── easyexcel-core # 核心功能 ││ ├── easyexcel-support # 支持模块 ││ └── easyexcel-test # 测试模块 │├─────────────────────────────────────────────────────────────┤│ 特性 ││ ├── SAX 模式解析 (07版 Excel) ││ ├── 内存优化 (降低到几M) ││ ├── 模型转换封装 ││ └── 注解驱动 │└─────────────────────────────────────────────────────────────┘
适用场景
🌟 典型应用场景
🎯 目标用户
•Java 后端开发者•需要处理 Excel 的场景•大数据量导入导出需求
学习曲线
难度评估
简单 ⭐ - API 简洁,容易上手
优势
1.文档完善 - 官方文档详细2.示例丰富 - 提供大量示例3.社区活跃 - 钉钉群答疑4.性能优秀 - 内存占用低
前置知识
•Java 基础•POI 基础(可选)
快速开始
1. 环境要求
2. Maven 引入
<dependency> <groupId>com.alibaba</groupId> <artifactId>easyexcel</artifactId> <version>4.0.3</version></dependency>
3. 代码示例
定义实体类
@Datapublic class DemoData { @ExcelProperty("字符串标题") private String string; @ExcelProperty("日期标题") private Date date; @ExcelProperty("数字标题") private Double doubleData;}
读取 Excel
// 定义监听器public class DemoDataListener extends AnalysisEventListener<DemoData> { private List<DemoData> list = new ArrayList<>(); @Override public void invoke(DemoData data, AnalysisContext context) { list.add(data); } @Override public void doAfterAllAnalysed(AnalysisContext context) { // 读取完成后的操作 saveData(); } private void saveData() { // 保存数据到数据库 }}// 读取 ExcelString fileName = "demo.xlsx";EasyExcel.read(fileName, DemoData.class, new DemoDataListener()).sheet().doRead();
写入 Excel
String fileName = "output.xlsx";EasyExcel.write(fileName, DemoData.class) .sheet("模板") .doWrite(dataList);
Web 下载
@GetMapping("download")public void download(HttpServletResponse response) throws IOException { response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); response.setCharacterEncoding("utf-8"); String fileName = URLEncoder.encode("测试", "UTF-8").replaceAll("\\+", "%20"); response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx"); EasyExcel.write(response.getOutputStream(), DemoData.class) .sheet("模板") .doWrite(dataList());}
Web 上传
@PostMapping("upload")@ResponseBodypublic String upload(MultipartFile file) throws IOException { EasyExcel.read(file.getInputStream(), DemoData.class, new DemoDataListener()) .sheet() .doRead(); return "success";}
性能对比
常见问题
Q1: 如何处理大数据量?
解决方案:使用分批读取,在监听器中分批处理数据
Q2: 如何设置单元格样式?
@ExcelProperty(value = "标题", index = 0)@ContentStyle(horizontalAlignment = HorizontalAlignment.CENTER)private String title;
Q3: 如何处理复杂表头?
解决方案:使用 @ExcelProperty 注解的 value 数组
Q4: 如何导出百万级数据?
解决方案:使用分页查询 + 分批写入
学习资源
官方资源
•🌐 官网:https://easyexcel.opensource.alibaba.com/[3]•📖 文档:https://easyexcel.opensource.alibaba.com/docs/current/[4]•💬 钉钉群:见官方文档
推荐学习路径
1.第一天:了解基本概念,引入依赖2.第二天:学习读取 Excel3.第三天:学习写入 Excel4.第四天:学习 Web 上传下载5.第五天:学习高级功能
项目推荐指数
综合推荐指数:⭐⭐⭐⭐⭐ 强烈推荐!
适用人群总结
✅ 最适合
•需要处理 Excel 的开发者•大数据量导入导出场景•Web 上传下载 Excel
⚠️ 注意
•项目已进入维护模式•建议评估替代方案
结语
EasyExcel 是一款非常优秀的 Excel 处理工具,解决了 POI 内存溢出的问题,是处理大数据量 Excel 的首选工具。
虽然项目已进入维护模式,但仍然是处理 Excel 的最佳选择之一!
报告生成时间:2026年5月数据来源:Gitee 官方数据
References
[1]: https://gitee.com/easyexcel/easyexcel
[2]: https://easyexcel.opensource.alibaba.com/
[3]: https://easyexcel.opensource.alibaba.com/
[4]: https://easyexcel.opensource.alibaba.com/docs/current/