如何增強Java Excel API 的導入和導出性能

前言

GrapeCity Documents for Excel (以下簡稱GcExcel) 是葡萄城公司的一款服務端表格組件,它提供了一組全面的 API 以編程方式生成 Excel (XLSX) 電子表格文檔的功能,支持爲多個平臺創建、操作、轉換和共享與 Microsoft Excel 兼容的電子表格;從而使其成爲解決所有電子表格挑戰的完美解決方案。

本博客主要介紹了加載 Excel (XLSX) 文件時導入選項的時間性能以及使用導出選項優化的文件大小。測試是在一些 Excel 文檔上進行的,這些文檔包含真實的函數、公式和多行多列的數據。

測試機配置

  • 操作系統 - Microsoft Windows 10 Professional
  • 版本 - 21H2(OS Version 19044.1645)
  • 系統類型 - x64
  • 處理器 - Intel(R) Core(TM) i7-10850H CPU @ 2.70GHz 2.71 GHz,6 核,12 線程
  • 安裝的物理內存 (RAM) - 16.00 GB

測試數據

Excel 文件,其中包含簡單和複雜的公式、大量數據記錄、多列數據、樣式、命名對象等。

Excel 導入

GcExcel 在導入 Excel文檔時提供兩個選項:

  • DoNotAutoFitAfterOpened
  • DoNotRecalculateAfterOpened

測試代碼

String outFilePath = Paths.get("Files", "Output", "GcExcel").toString();
String inputFilePath = Paths.get("Files", "Input").toString();
String fileName = "output.xlsx";

Workbook workbook = new Workbook();
long start = System.currentTimeMillis();

// NO EXPORT OPTION
workbook.open(inputFilePath);

// EXPORT OPTIONS
XlsxOpenOptions openOptions = new XlsxOpenOptions();
openOptions.setDoNotAutoFitAfterOpened(true);
openOptions.setDoNotRecalculateAfterOpened(true);
workbook.open(inputFilePath, openOptions);

long stop = System.currentTimeMillis();
double openTime = (double) (stop - start) / 1000;

workbook.save(Paths.get(outFilePath, fileName).toString());

測試指標

針對上述測試文檔(使用和不使用導入選項)計算的加載時間結果如下所示:

Excel 導出

GcExcel 允許使用以下選項控制未使用的樣式和命名對象以及沒有任何數據的單元格區域的導出:

  • ExcludeUnusedStyles
  • ExcludeUnusedNames
  • ExcludeEmptyRegionCells

這些選項允許您選擇是保留還是丟棄導出文檔中不需要的項目。因此,它有助於優化保存文件的大小。

測試代碼

String outFilePath = Paths.get("Files", "Output", "GcExcel").toString();
String inputFilePath = Paths.get("Files", "Input").toString();
String fileName = "output.xlsx";
Path path = Paths.get(outFilePath, fileName);

Workbook workbook = new Workbook();
workbook.open(inputFilePath);

// NO EXPORT OPTION
workbook.save(path.toString());

// EXPORT OPTIONS
XlsxSaveOptions saveOptions = new XlsxSaveOptions();
saveOptions.setExcludeUnusedNames(true);
saveOptions.setExcludeUnusedStyles(true);
saveOptions.setExcludeEmptyRegionCells(true);
saveOptions.setIgnoreFormulas(true);
workbook.save(path.toString(), saveOptions);

File outputFile = new File(path.toString());
long size = outputFile.length();
BigDecimal sizeInKB = new BigDecimal(size).divide(new BigDecimal(1024));
BigDecimal sizeInMB = sizeInKB.divide(new BigDecimal(1024), 2, BigDecimal.ROUND_HALF_UP);
System.out.println("Size in MB: " + sizeInMB);

測試指標

保存文檔後的文件大小。

使用和不使用導出選項保存這些測試文檔後的文件大小如下所示:

總結

通過上述的測試結果表明,在使用了GcExcel之後導入不同文件的速度快了接近1秒,同時導出文件的大小也縮小了一半,顯著提升了數據處理和文件操作的效率。這使得用戶能夠更快地處理大量數據並生成更精簡、高效的文件輸出。以上就是針對不同Excel文件的導入導出測試,如果您想了解更多詳細信息,歡迎點擊這裏查看。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章