第一種:hssfworkbook
poi匯出excel最常用的方式;但是此種方式的侷限就是匯出的行數至多為65535行,超出65536條後系統就會報錯。此方式因為行數不足七萬行所以一般不會發生記憶體不足的情況(oom)。
第二種:xssfworkbook
這種形式的出現是為了突破hssfworkbook的65535行侷限。其對應的是excel2007(1048576行,16384列)擴充套件名為「.xlsx」,最多可以匯出104萬行,不過這樣就伴隨著乙個問題---oom記憶體溢位,原因是你所建立的book sheet row cell等此時是存在記憶體的並沒有持久化。
第三種:sxssfworkbook
從poi 3.8版本開始,提供了一種基於xssf的低記憶體占用的sxssf方式。對於大型excel檔案的建立,乙個關鍵問題就是,要確保不會記憶體溢位。其實,就算生成很小的excel(比如幾mb),它用掉的記憶體是遠大於excel檔案實際的size的。如果單元格還有各種格式(比如,加粗,背景標紅之類的),那它占用的記憶體就更多了。對於大型excel的建立且不會記憶體溢位的,就只有sxssfworkbook了。它的原理很簡單,用硬碟空間換記憶體(就像hash map用空間換時間一樣)。
sxssfworkbook是streaming版本的xssfworkbook,它只會儲存最新的excel rows在記憶體裡供檢視,在此之前的excel rows都會被寫入到硬碟裡(windows電腦的話,是寫入到c盤根目錄下的temp資料夾)。被寫入到硬碟裡的rows是不可見的/不可訪問的。只有還儲存在記憶體裡的才可以被訪問到。
hssfworkbook:只能操作excel2003,副檔名是.xls;
xssfworkbook:可以操作excel 2007+ 雖然可以操作大量資料,但實際操作時會出問題, 問題原因是建立物件過多,而這些物件都在記憶體中,所以可能導致溢位,副檔名是.xlsx;
sxssfworkbook:它是在xssfworkbook基礎上進行優化,它的原理是首先設定乙個記憶體中物件的數量值,預設為100個物件,當記憶體中所產生的物件數超出規定的限制時,就會將這些物件寫入到臨時的xml檔案中,此時記憶體中的這些物件就可以銷毀了,以後不斷這樣進行,副檔名是.xlsx;
sxssfworkbook缺點分析
測試結果:
通過測試證明,我們可以sxssfworkbook來實現百萬資料的匯出,實際所消耗的時間是很少的。只要將技術很好的結合在一起,比如jdbc,oracle,sxssfworkbook,thread結合一起就可以很好的實現百萬資料的poi。
POI匯出Excel的三種 workbook的區別
三種workbook分別是hssfworkbook xssfworkbook sxssfworkbook 第一種 hssfworkbook 針對excel 2003版本,擴充套件名為.xls,此種的侷限就是匯出的行數最多為65535行。因為匯出行數受限,不足7萬行,所以一般不會傳送記憶體溢位 oom...
推薦匯出Excel的3個專案
1.phpexcel 太大,而且效率太低,但是功能全,只在必要的時候用,不推薦用 2.spreadsheet excel writer 小巧靈活,簡單,實用,效率高,推薦在能滿足情況下使用 3.phpexcelbuilder 小巧靈活,簡單,實用,可以採用excel xml匯出複雜的excel。但是...
Excel實用知識3
excel 實用知識 3純手打,可能有錯別字,使用的版本是 office2013 資料透視表 資料透視表是一種互動式的 可以進行某些計算,比如求和,使用者可以動態地改變 上的版面布置。插入 資料透視表 選擇好要分析的區域,在新工作表上建立 確定 然後勾選要的內容,得到結果 資料透檢視 建立資料透視表...