找回密码
立即注册
搜索
发回帖 发新帖

5033

积分

0

好友

645

主题
发表于 2 小时前 | 查看: 7| 回复: 0

前言

在云栈社区的技术讨论中,不少开发者最近都发现了一个变化:EasyExcel 不仅没新功能了,连 Bug 都没人修了。GitHub 仓库已经在 2025 年 9 月被阿里正式归档。

但故事没有结束。EasyExcel 的作者离开阿里后,重新写了一个项目 FastExcel,而最近 FastExcel 又改名了。这篇文章专门聊聊这件事,希望能帮到你。

一、EasyExcel 是怎么“凉”的?

EasyExcel 是阿里在 2018 年开源的 Java Excel 处理库,一度是 GitHub 上最火的 Java 项目之一,累计超过 33,000 颗 Star。

它最大的突破是把 Excel 解析方式换成了 SAX 流式解析——不一次性把整个 Excel 加载进内存,而是一行一行地读。官方测试数据显示,仅需 16MB 内存就可以读取 75M(46 万行 25 列)的 Excel 文件,耗时仅 23 秒。在那个 POI 动不动就 OOM 的年代,EasyExcel 的出现堪称救星。

但问题出在 2023 年。EasyExcel 的核心作者(玉箫)从阿里离职,之后 EasyExcel 进入事实上的停更状态:

  • GitHub Issues 响应延迟超过 30 天
  • PR 合并基本停滞
  • 近半年无正式版本发布(最新 v3.3.2 发布于 2023 年 10 月)
  • 对 Spring Boot 3.x、Java 21、Apache POI 5.x 的兼容性支持滞后

2024 年 11 月,阿里正式宣布 EasyExcel 将停止更新,逐步进入维护模式。2025 年 9 月,GitHub 仓库被正式归档,变成只读状态。

很多人以为故事到这里就结束了。一个 33k Star 的项目,就这样“凉”了。但就在大家一筹莫展之际,原作者站了出来。

二、FastExcel 来了

2024 年 12 月,EasyExcel 原作者玉箫公开了一个新项目——FastExcel。很多人以为它只是 EasyExcel 的简单 fork,结果一看代码才发现,这几乎是一场彻底重构。

2.1 FastExcel 和 EasyExcel 的关系

FastExcel 和 EasyExcel 的关系可以总结为四个字:无缝承接。

对比维度 EasyExcel(停更) FastExcel(活跃)
API 兼容性 — 完全一致
迁移成本 — 换包名就行
性能 基准 更好、更稳定
功能 基本功能 读取指定行数、Excel 转 PDF
维护状态 ❌ 已归档 ✅ 持续更新
开源协议 Apache 2.0 MIT(商业友好)

FastExcel 做了三件关键的事情:

第一,性能继续压榨。在原有 SAX 解析基础上,进一步优化了内存和 IO 处理。实测中,有开发者从 EasyExcel 切换到 FastExcel 后,处理时间从将近 1 分钟降到了 18 秒左右,内存峰值控制在 800MB 以内。

第二,支持更多复杂 Excel 特性。1.0.0 版本就新增了读取 Excel 指定行数和将 Excel 转换为 PDF 的功能。很多原本需要自己写大量代码的功能,被重新封装进了框架里。

第三,兼容 EasyExcel API。这是最关键的一点——从 EasyExcel 迁移到 FastExcel,只需简单地更换包名和 Maven 依赖即可完成升级。很多项目甚至可以一行代码不改,直接迁移。

从 EasyExcel 到 FastExcel,代码几乎不用改:

<!-- EasyExcel(已停更) -->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>easyexcel</artifactId>
    <version>4.0.3</version>
</dependency>

<!-- FastExcel(活跃维护) -->
<dependency>
    <groupId>cn.idev.excel</groupId>
    <artifactId>fastexcel</artifactId>
    <version>1.3.0</version>
    <!-- 请使用最新版本 -->
</dependency>

Java 代码层面,把 com.alibaba.excel 改成 cn.idev.excel 就行。API 几乎一模一样,迁移成本极低。FastExcel 上线短短一个月,GitHub 星标就突破了 1.8K。

三、FastExcel 又“消失”了?

如果你最近去 GitHub 搜 FastExcel,可能会发现搜不到原来的项目了。别慌。不是项目死了,是它“毕业”了——进入了 Apache 软件基金会。

2025 年底到 2026 年初,FastExcel 的作者把项目整套捐给了 Apache 软件基金会,成为 Apache POI 的子项目,更名为 Apache Fesod (Incubating)。

“Fesod”的全称是“Fast. Easy. Spreadsheet and Other Documents”——Fast、Easy、Spreadsheet 和其他文档。

2026 年 1 月 21 日,Fesod 发布了第一个孵化版本 2.0.0-incubating。2026 年 2 月 11 日,2.0.1-incubating 正式发布。

这意味着什么?代码所有权从个人/公司转给了 Apache 基金会——跟 Apache POI、Maven、Tomcat 一个待遇。这意味着长期维护有了保障,版本节奏会跟 Apache 其他项目一样稳定,不会再出现“原作者离职就停更”的情况。

这不是“FastExcel 死了”,而是“FastExcel 拿到了 Apache 终身保障”。

四、FastExcel vs Fesod 现在该用哪个?

很多人可能会懵:“上个月刚改完 import,怎么又换名字了?”别紧张。这次不是停更,是升级。

对比维度 FastExcel Apache Fesod
groupId cn.idev.excel org.apache.fesod
artifactId fastexcel fesod
状态 过渡命名,新项目别用 Apache 孵化中
最新版本 1.3.0 2.0.1-incubating
维护保障 个人维护 Apache 基金会长期保障

判断很简单:

  • 新项目 → 直接上 Apache Fesod,少一次后续迁移
  • 现有 EasyExcel/FastExcel 项目 → 切 Fesod,三步走

五、代码实战

如果你现在在用 FastExcel,迁移到 Fesod 其实非常简单。核心就是换坐标、改 import、换入口类。

5.1 第一步:替换 Maven 依赖

<!-- 旧的 FastExcel -->
<dependency>
    <groupId>cn.idev.excel</groupId>
    <artifactId>fastexcel</artifactId>
    <version>1.3.0</version>
</dependency>

<!-- 新的 Apache Fesod -->
<dependency>
    <groupId>org.apache.fesod</groupId>
    <artifactId>fesod</artifactId>
    <version>2.0.1-incubating</version>
</dependency>

5.2 第二步:修改导入包

把 cn.idev.excel 改成 org.apache.fesod:

// 旧的导入
import cn.idev.excel.EasyExcel;
import cn.idev.excel.annotation.ExcelProperty;

// 新的导入
import org.apache.fesod.Fesod;
import org.apache.fesod.annotation.ExcelProperty;

5.3 第三步:换入口类

// 旧的 FastExcel 写法
EasyExcel.write(response.getOutputStream(), User.class)
    .sheet("用户列表")
    .doWrite(users);

// 新的 Fesod 写法(API 几乎一致)
Fesod.write(response.getOutputStream(), User.class)
    .sheet("用户列表")
    .doWrite(users);

5.4 完整示例:百万行数据导出

@RestController
@RequestMapping("/api/export")
public class ExportController {

    @GetMapping("/orders")
    public void exportOrders(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");

        // 流式写入——边查边写,不 OOM
        try (ExcelWriter writer = Fesod.write(response.getOutputStream(), OrderExportVO.class)
                .sheet("订单数据")
                .build()) {

            int page = 1;
            int pageSize = 10000;
            while (true) {
                List<OrderExportVO> pageData = orderService.pageOrders(page, pageSize);
                if (pageData.isEmpty()) {
                    break;
                }
                writer.write(pageData);
                page++;
            }
        }
    }
}

这就是 Fesod 的核心优势——流式写入,百万行数据也不会 OOM。有物流企业使用 FastExcel(现 Fesod)后,报表生成时间从 4 小时缩短至 20 分钟,服务器资源占用减少 60%。

六、5 种技术方案对比

方案 维护状态 适用规模 内存模型 致命短板
Apache POI 活跃 任意 DOM(重) 十万行级写入容易 OOM
POI SXSSF 活跃 大文件 流式 写还行,读不擅长
Hutool Excel 活跃 <1 万行 简单 高级特性受限
EasyExcel ❌ 2024 年停更 任意 流式 不再有新功能/bug 修复
FastExcel ⚠️ 过渡命名 任意 流式 已是过渡命名,新项目别用
Apache Fesod ✅ Apache 孵化 任意 流式 仍在 Incubating 阶段

性能数据对比(50 万行写入):

方案 写入速度 GC 次数 GC 暂停 峰值内存 综合评价
dhatim/FastExcel 13s 18 次 285ms 1.68GB 速度最快,内存效率差
Apache Fesod 21s 7 次 68ms - 综合最优
EasyExcel/FastExcel 相当 相当 42-55ms - 性能一致

Apache Fesod 速度与其他流式框架在同一量级(差异 <10%),但内存效率遥遥领先——GC 次数仅为其他框架的 40%。高并发场景下,内存效率比原始速度更重要——一个 GC 暂停可能抵消所有速度优势。

七、优缺点

优点

  1. API 无缝迁移:从 EasyExcel 到 FastExcel 再到 Fesod,API 几乎完全一致。迁移成本极低,换包名就能用。
  2. 流式处理,百万行不 OOM:继承 EasyExcel 的 SAX 流式解析基因,百万行数据边读边处理,内存占用始终控制在 MB 级。
  3. 持续迭代,功能不断增强:读取指定行数、Excel 转 PDF 等实用功能,底层流式处理逻辑持续优化。
  4. Apache 基金会保障:项目进入 Apache 孵化器后,代码所有权从个人/公司转给基金会,长期维护有保障。
  5. MIT 协议,商业友好:MIT 协议允许商业场景免费使用、二次开发。
  6. 内存效率行业领先:Fesod 的 GC 效率比 EasyExcel/FastExcel 高 2.5 倍,GC 次数仅为其他框架的 40%。

缺点

  1. 还在孵化阶段:Apache Fesod 目前还在 Incubating 阶段,2.x API 有微调。
  2. 命名变迁有点乱:一年三连跳——EasyExcel → FastExcel → Apache Fesod。很多人刚换了 FastExcel,又得换 Fesod。
  3. FastExcel 已停更:FastExcel 1.3.0 之后不会再更新了。还用 FastExcel 意味着不会有新功能和 bug 修复。
  4. 需要改代码:从 FastExcel 迁移到 Fesod 需要换坐标、改 import、换入口类。虽然工作量不大,但还是要改。

八、选型建议

场景 推荐 理由
新项目 ✅ Apache Fesod 少一次后续迁移
在用 EasyExcel ✅ 迁移到 Fesod 换依赖 + 改 import
在用 FastExcel ✅ 迁移到 Fesod 换坐标 + 改 import + 换入口类
极简场景(几行 Excel) Hutool 一行调用 别上重武器
需要 Excel 转 PDF ✅ Fesod 内置该能力

九、写在最后

回到最初的问题:EasyExcel 凉了?FastExcel 又改名了?

EasyExcel 确实凉了。2025 年 9 月阿里正式归档了 GitHub 仓库,不再有任何维护。

FastExcel 没有凉,它只是“毕业”了——从个人项目升级成了 Apache 顶级开源项目,改名叫 Apache Fesod。从 EasyExcel 到 FastExcel 再到 Apache Fesod,这个 Excel 处理库完成了一次罕见的“一年三连跳”。

这其实是开源项目能拿到的最好结局——从个人维护变成了 Apache 基金会长期保障。对于开发者来说,现状其实很简单:

  • 新项目直接上 Apache Fesod
  • 老项目逐步迁移,从 EasyExcel/FastExcel 换到 Fesod

别因为“又要改代码”就犹豫。这次迁移换来的,是 Apache 基金会级的长期维护保障、持续的功能迭代,以及更优的内存效率。

Fesod 还处于孵化阶段,但已经有很多企业开始在真实场景中使用了。对于需要处理大规模 Excel 的企业来说,这是目前最值得选择的方案。

开源地址:




上一篇:Navop 开源:AI 装进 SSH 终端,数据库/服务器/远程桌面一站式运维
下一篇:微信为什么用SQLite存聊天记录?十三亿用户的本地存储架构拆解
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-10-8 02:33 , Processed in 0.070122 second(s), 38 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2026 云栈社区.

快速回复 返回顶部 返回列表