最近做乙個專案 有個匯出功能之前一直採用的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...