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