POI匯出百萬級別資料 親測有效

2021-09-24 11:15:40 字數 1596 閱讀 9017

最近做乙個專案 有個匯出功能之前一直採用的xssfworkbook實現匯出,但這次資料量較多使用xssfworkbook匯出的時候導致記憶體溢位。

於是我採用了sxssfworkbook這個類來實現匯出。

簡單的說當資料量龐大時就需要用到sxssfworkbook來匯出資料

注:這裡我poi使用的3.9版本的

表頭的值一定要對應資料的key!!!

主要**:

/**

* @param headlist 表頭

* @param maplist 資料

* @param title 檔名

* 匯出時資料量較大時採用此方法匯出

* maplist中的key值 必須和headlist中的值對應

*/public void exceport(httpservletresponse response, listheadlist, list> maplist, string title) 毫秒; list數量為 {}", endtime0 - starttime0, maplist.size());

long starttime = system.currenttimemillis();

// 建立第一行,作為header表頭

row header = sheet.createrow(0);

// 迴圈建立header單元格(根據實際情況靈活建立即可)

for (int i = 0; i < headlist.size(); i++)

//遍歷建立行,匯出資料

for (int i = 1; i < maplist.size(); i++)

}response.setheader("content-disposition", "attachment;filename=" + new string((title + ".xlsx").getbytes("utf-8"), "iso-8859-1"));

fos = response.getoutputstream();

sxssfworkbook.write(fos);

fos.flush();

long endtime = system.currenttimemillis();

logger.info("資料全部匯出至excel總耗時:{} 毫秒!", endtime - starttime, maplist.size());

} catch (exception e) finally

if (fos != null)

} catch (ioexception e) }}

樣式方法:

public static xssfcellstyle getvaluestylebysxssfworkbook(sxssfworkbook workbook)
這樣就完成了!是不是巨簡單!

呼叫的時候也非常簡單按照注釋上的要求傳相應的引數就行了

親測有效!

模擬了匯出100w條資料至excel只需要7.4秒!!

JAVA使用POI如何匯出百萬級別資料

經常使用excel的人應該都能知道excel2007及以上版本可以輕鬆實現儲存百萬級別的資料,但是系統中的大量資料如何能夠快速準確的匯入到excel中這好像是個難題,對於一般的web系統,我們為了解決成本,基本都是使用的入門級web伺服器tomcat,jdk在32為系統中支援的記憶體不能超過2個g,...

JAVA使用POI如何匯出百萬級別資料

用過poi的人都知道,在poi以前的版本中並不支援大資料量的處理,如果資料量過多還會常報oom錯誤,這時候調整jvm的配置引數 也不是乙個好對策 注 jdk在32位系統中支援的記憶體不能超過2個g,而在64位中沒有限制,但是在64位的系統中,效能並不是太好 好在poi3.8版本新出來了乙個sxssf...

JAVA使用POI如何匯出百萬級別資料

用過poi的人都知道,在poi以前的版本中並不支援大資料量的處理,如果資料量過多還會常報oom錯誤,這時候調整jvm的配置引數也不是乙個好對策 注 jdk在32位系統中支援的記憶體不能超過2個g,而在64位中沒有限制,但是在64位的系統中,效能並不是太好 好在poi3.8版本新出來了乙個sxssfw...