終於有一款組件能夠全面超越Apache POI

在 GrapeCity Documents出現之前,服務端文檔組件向來以Apache POI爲表明,做爲一款由Java編寫的開源API庫,Apache POI 主要應用於對Microsoft Office文檔進行讀、寫,以及建立和維護。java

但正如POI所定義的那樣:做爲「Poor Obfuscation Implementation」首字母的縮寫,Apache POI僅提供「簡單的模糊實現」,其在建立複雜邏輯的大型文檔時,常常會捉襟見肘。git

若是想經過簡單的代碼邏輯,快速建立、加載、編輯、導入/導出大型文檔(Excel、Word、PDF),並將其部署到雲端時,又該如何實現?github

而這些需求,偏偏是GrapeCity Documents 能夠知足的。編程

GrapeCity Documents是什麼?

image.png

GrapeCity Documents 是一款快速且高效的服務端文檔組件包,可在 Windows、Mac、Linux 上完美運行,同時適用於 .NET和 Java 平臺,可在不依賴 Microsoft Office 和 Acrobat 組件的狀況下,提供快速生成、加載、編輯和保存 Excel、PDF、Word文檔的功能。windows

GrapeCity Documents 由四種針對不一樣文檔和開發框架的組件構成:app

· 適用於全部 .NET 平臺的 Excel 文檔 API —— GcExcel(.NET)框架

· 適用於全部 Java 平臺的 Excel 文檔 API —— GcExcel(Java)性能

· 適用於全部 .NET 平臺的 PDF 文檔 API —— GcPDF學習

· 適用於全部 .NET 平臺的 Word 文檔 API —— GcWord測試

下面,咱們將以其中的GcExcel 爲例,詳細對比它與 Apache POI 的功能及性能優劣。

功能對比:GcExcel VS Apache POI

1.公式數量

GcExcel支持452種Excel公式。

Apache POI中,支持的公式數量不多(雖然Apache POI網站羅列了280多種可評估的公式,但在API中僅顯示爲157種)。

2.是否支持導出PDF

GcExcel不但支持導出PDF格式,還可控制頁面設置選項。

Apache POI不支持導出PDF。

3.條件格式

GcExcel支持多種條件格式,如自定義圖標集、判斷是否高於平均值(AboveAverage)、發生日期判斷、Top 10和重複項判斷,且這些條件格式的設置規則與VSTO保持一致。

但在Apache POI中,使用高級API來增長條件格式判斷會受限。所以,只能使用標記爲內部用途的低級類來處理Top十、高於平均值(AboveAverage)等格式化選項。

4.圖表類型

GcExcel的圖表界面與VSTO一致,支持約53種圖表類型。

Apache POI對圖表的支持很是有限,僅支持Line、Bar、Column、Scatter和Radar圖表類型。

5.迷你圖

GcExcel徹底支持添加和配置迷你圖(Sparklines)。

Apache POI目前不支持Sparklines。

6.剪切、複製、粘貼形狀

GcExcel支持剪切、複製、粘貼形狀,Apache POI不支持。

7.過濾器數據類型

GcExcel普遍支持文本、數字、日期、顏色和圖標等過濾器。

Apache POI僅支持基本的AutoFilter,須要使用低級類來實現應用過濾或建立任何其餘高級過濾器。

8.排序

GcExcel支持全部類型的行排序、列排序、自定義排序、顏色和圖標排序。

Apache POI沒有內置的排序功能。可是,用戶可使用shiftRows()/ ShiftColumns()並以編程方式對數據進行排序。

9.切片器

GcExcel支持帶有數據透視表的切片器,而Apache POI則不支持。

10.導出CSV格式

GcExcel支持導出爲CSV格式。

Apache POI沒有提供內置的導出CSV選項。可是,可使用編程的方式建立相應的CSV / HTML文件。

11.漸變填充

GcExcel支持漸變填充,而Apache POI不支持。

12.單元格中獲取/設置值

在對單個單元格執行獲取/設置值的狀況下,GcExcel比Apache POI表現的更好。

13.示例與幫助文檔

使用Apache POI,許多功能須要訪問和了解底層API才能實現, 但Apache POI提供的示例和文檔數量十分有限,對於開發人員來講學習成本較大。

而GcExcel做爲獨立於平臺的API 組件,具有高性能、低內存消耗的特色,而且與Excel對象模型嚴格兼容。GcExcel更加易於使用且功能全面,經過其提供的在線演示示例和幫助文檔,開發人員能夠快速上手,迅速掌握產品使用技巧。

性能對比:GcExcel VS Apache POI

讓咱們經過一個GcExcel Java的基準測試項目對比其與Apache POI的性能優劣,該項目是一個java gradle項目,能夠輸出GcExcel、POI和Aspose.Cells的性能結果,以下所示:

· 設置:獲取和保存100,000 * 30單元格的double / string / date值,下圖顯示了double值的結果。

· GcExcel 用時不超過0.2S ;Apache POI 則達到18.7S左右

image.png

image.png

· 設置:計算和保存20,000 * 30個單元格的公式,結果以下:

· GcExcel 用時不超過1S ;Apache POI 則達到10S左右

image.png

· 打開並保存一個20.5MB 的 Excel文件,其中包含了許多數據、公式和單元格格式,結果以下:

· GcExcel 用時不超過4.9S ;Apache POI 則達到10S左右

· GcExcel 內存消耗爲72.1MB;Apache POI 爲3518.2MB

image.png
image.png

結論

從以上結果能夠看出,GcExcel 是目前爲止速度最快、內存消耗最少的服務端電子表格組件。

儘管 Apache POI 是免費的,但它的速度和內存消耗遠遠達不到企業級項目的標準,這就是爲何我只選擇100,000 30個單元格的緣由,由於即便在1,000,000 30個單元格的狀況下,GcExcel Java仍舊能夠平穩運行。

除此以外,爲了保證Apache POI成功運行,還必須將JVM最小堆大小配置爲4G,不然它將拋出OutOfMemory異常。 如下是build.gradle中的JVM配置:

applicationDefaultJvmArgs = ["-Xms4096m", "-Xmx8192m"]

你們能夠從GitHub上下載這個測試項目:

https://github.com/GrapeCity/GcExcel-Java/tree/master/benchmark, 並使用如下命令行運行它:

  • on mac: ./gradlew run --args="double" //參數能夠是double, string, date, formula, bigfile
  • on windows: gradlew run --args="double" //參數能夠是double, string, date, formula, bigfile

請注意,第一次運行會很是慢,由於它須要下載gradle和全部相關軟件包。


以上,就是GrapeCity Documents 與Apache POI 在功能和性能上的對比測試,從數據可見,不管是運行速度,仍是內存消耗,GrapeCity Documents 都要比Apache POI表現的更爲優秀。

若是您也有服務端處理 Excel、Word、PDF等文檔的需求,須要快速批量操做大型文檔,能夠前往GrapeCity Documents 官網,下載試用。

相關文章
相關標籤/搜索