簡體   English   中英

使用apache POI將xlsx文件分頁到XSSFworkbook

[英]pagination of xlsx file to XSSFworkbook using apache POI

現在,在我的代碼中,我正在將xlsx文件讀入XSSFWorkbook,然后最終將其寫入數據庫。 但是,當xlsx文件的大小增加時,它將導致outOfMemory錯誤。 我無法增加服務器大小,也無法將xlsx文件分成多個部分。 我嘗試使用文件(而不是inputstream)加載工作簿,但這也無濟於事。

我正在尋找一次讀取10k行(而不是一次讀取整個文件)並迭代寫入工作簿然后寫入數據庫的方法。

有使用Apache POI做到這一點的好方法嗎?

POI包含專門為此目的設計的稱為“事件模型”的東西。 在常見問題中提到:

SS eventmodel包是一種用於讀取Excel文件而不將整個電子表格加載到內存中的API。 它確實需要用戶方面的更多知識,但將內存消耗減少了十倍以上。 它基於AWT事件模型和SAX的結合。 如果您需要只讀訪問權限,這是最好的方法。

但是,您可能要先仔細檢查問題是否在其他地方。 簽出此項目

  1. 我認為POI正在使用太多內存! 我能做什么? 這個問題很多,但是通常原因並不是您最初想的那樣。 因此,首先要檢查的是-問題的根源是什么? 你的檔案? 您的密碼? 您的環境? 還是Apache POI?

(如果您在這里,您可能會認為它是Apache POI。但是,通常不是這樣!一台中等大小的筆記本電腦,從一開始就具有不錯的但沒有太大的堆大小,通常可以讀取或寫入100列的文件並在幾秒鍾內(包括啟動JVM的時間)在10萬行之內。 Apache POI附帶了一些程序和一些示例程序,可用於進行一些基本的性能檢查。 為了測試文件生成,要使用的類在示例包SSPerformanceTest中。 使用寫入類型(HSSF,XSSF或SXSSF)的參數,行數,列數以及是否保存文件來運行SSPerformanceTest。 如果您無法在3秒內在HSSF和SXSSF中運行50,000行50列,而在10秒內運行XSSF(最好是在不到3秒內運行全部!),那么問題就出在您的環境上。 接下來,使用示例程序ToCSV嘗試通過HSSF或XSSF讀取文件。 相關的是XLSX2CSV,它對.xlsx使用SAX解析。 針對您的問題文件和由SSPerformanceTest生成的相同大小的簡單文件運行此文件。 如果這很慢,則可能是Apache POI的文件處理方式問題(POI做出了一些假設,這些假設可能並不總是適用於所有文件)。 如果這些測試速度很快,那么您的代碼中就有性能問題!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM