FastExcel,下一代Excel處理工具
11月6日消息,阿里巴巴旗下的Java Excel工具庫EasyExcel近日宣布,將停止更新,未來將逐步進(jìn)入維護(hù)模式,將繼續(xù)修復(fù)Bug,但不再主動新增功能。
圖片
EasyExcel以其快速、簡潔和解決大文件內(nèi)存溢出的能力而著稱,官方測試顯示,僅需16M內(nèi)存即可讀取75M(46萬行25列)的Excel文件,且耗時(shí)僅23秒。
目前項(xiàng)目在GitHub上擁有超過30k的stars和7.5k的forks,維護(hù)6年關(guān)閉了超過3000個(gè)issue。
但有個(gè)好消息:EasyExcel的作者創(chuàng)建了新項(xiàng)目:FastExcel。
開源地址:https://github.com/CodePhiliaX/fastexcel
作者選擇為它起名為 FastExcel,以突出這個(gè)框架在處理 Excel 文件時(shí)的高性能表現(xiàn),而不僅僅是簡單易用。
FastExcel 將始終堅(jiān)持免費(fèi)開源,并采用最開放的 MIT 協(xié)議,使其適用于任何商業(yè)化場景。這為開發(fā)者和企業(yè)提供了極大的自由度和靈活性。FastExcel 的一些顯著特點(diǎn)包括:
- 完全兼容原 EasyExcel 的所有功能和特性,這使得用戶可以無縫過渡。
- 從 EasyExcel 遷移到 FastExcel 只需簡單地更換包名和 Maven 依賴即可完成升級。
- 在功能上,比 EasyExcel 提供更多創(chuàng)新和改進(jìn)。
- FastExcel 1.0.0 版本新增了讀取 Excel 指定行數(shù)和將 Excel 轉(zhuǎn)換為 PDF 的功能。
他們計(jì)劃在未來推出更多新特性,以不斷提升用戶體驗(yàn)和工具實(shí)用性。
FastExcel 致力于成為您處理 Excel 文件的最佳選擇。
主要特性:
- 高性能讀寫: FastExcel 專注于性能優(yōu)化,能夠高效處理大規(guī)模的 Excel 數(shù)據(jù)。相比一些傳統(tǒng)的 Excel 處理庫,它能顯著降低內(nèi)存占用。
- 簡單易用: 該庫提供了簡潔直觀的 API,使得開發(fā)者可以輕松集成到項(xiàng)目中,無論是簡單的 Excel 操作還是復(fù)雜的數(shù)據(jù)處理都能快速上手。
- 流式操作: FastExcel 支持流式讀取,將一次性加載大量數(shù)據(jù)的問題降到最低。這種設(shè)計(jì)方式在處理數(shù)十萬甚至上百萬行的數(shù)據(jù)時(shí)尤為重要。
建議您使用最新版本的 FastExcel,因?yàn)樽钚掳姹局械男阅軆?yōu)化、BUG修復(fù)和新功能都會讓您的使用更加方便。
當(dāng)前 FastExcel 底層使用 poi 作為基礎(chǔ)包,如果您的項(xiàng)目中已經(jīng)有 poi 相關(guān)組件,需要您手動排除 poi 的相關(guān) jar 包。
如果您使用 Maven 進(jìn)行項(xiàng)目構(gòu)建,請?jiān)?pom.xml 文件中引入以下配置:
<dependency>
<groupId>cn.idev.excel</groupId>
<artifactId>fastexcel</artifactId>
<version>1.0.0</version>
</dependency>
如果您使用 Gradle 進(jìn)行項(xiàng)目構(gòu)建,請?jiān)?build.gradle 文件中引入以下配置:
dependencies {
implementation 'cn.idev.excel:fastexcel:1.0.0'
}
EasyExcel 與 FastExcel 的區(qū)別:
- FastExcel 支持所有 EasyExcel 的功能,但是 FastExcel 的性能更好,更穩(wěn)定。
- FastExcel 與 EasyExcel 的 API 完全一致,可以無縫切換。
- FastExcel 會持續(xù)的更新,修復(fù) bug,優(yōu)化性能,增加新功能。EasyExcel 如何升級到 FastExcel
1. 修改依賴
將 EasyExcel 的依賴替換為 FastExcel 的依賴,如下:
<!-- easyexcel 依賴 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>xxxx</version>
</dependency>
依賴替換為
<dependency>
<groupId>cn.idev.excel</groupId>
<artifactId>fastexcel</artifactId>
<version>1.0.0</version>
</dependency>
2. 修改代碼
將 EasyExcel 的包名替換為 FastExcel 的包名,如下:
// 將 easyexcel 的包名替換為 FastExcel 的包名
import com.alibaba.excel.**;
替換為
import cn.idev.excel.**;
3. 不修改代碼直接依賴 FastExcel
如果由于種種原因您不想修改代碼,可以直接依賴 FastExcel ,然后在 pom.xml 文件中直接依賴 FastExcel。EasyExcel 與 FastExcel 可以共存,但是長期建議替換為 FastExcel。
4. 建議以后使用 FastExcel 類
為了兼容性考慮保留了 EasyExcel 類,但是建議以后使用 FastExcel 類,F(xiàn)astExcel 類是FastExcel 的入口類,功能包含了 EasyExcel 類的所有功能,以后新特性僅在 FastExcel 類中添加。
簡單示例:讀取 Excel 文件 下面是讀取 Excel 文檔的例子:
// 實(shí)現(xiàn) ReadListener 接口,設(shè)置讀取數(shù)據(jù)的操作
publicclass DemoDataListener implements ReadListener<DemoData> {
@Override
public void invoke(DemoData data, AnalysisContext context) {
System.out.println("解析到一條數(shù)據(jù)" + JSON.toJSONString(data));
}
@Override
public void doAfterAllAnalysed(AnalysisContext context) {
System.out.println("所有數(shù)據(jù)解析完成!");
}
}
public static void main(String[] args) {
String fileName = "demo.xlsx";
// 讀取 Excel 文件
FastExcel.read(fileName, DemoData.class, new DemoDataListener()).sheet().doRead();
}
簡單示例:創(chuàng)建 Excel 文件 下面是一個(gè)創(chuàng)建 Excel 文檔的簡單例子:
// 示例數(shù)據(jù)類
publicclass DemoData {
@ExcelProperty("字符串標(biāo)題")
private String string;
@ExcelProperty("日期標(biāo)題")
private Date date;
@ExcelProperty("數(shù)字標(biāo)題")
private Double doubleData;
@ExcelIgnore
private String ignore;
}
// 填充要寫入的數(shù)據(jù)
private static List<DemoData> data() {
List<DemoData> list = new ArrayList<>();
for (int i = 0; i < 10; i++) {
DemoData data = new DemoData();
data.setString("字符串" + i);
data.setDate(new Date());
data.setDoubleData(0.56);
list.add(data);
}
return list;
}
public static void main(String[] args) {
String fileName = "demo.xlsx";
// 創(chuàng)建一個(gè)名為“模板”的 sheet 頁,并寫入數(shù)據(jù)
FastExcel.write(fileName, DemoData.class).sheet("模板").doWrite(data());}