[英]Socket Exception while generating bulk excel file using Apache Poi
在為批量數據(超過50萬條記錄)生成Excel文件時,我收到SocketConnectionException
。
我的Web應用程序的代碼寫入`outputstream。 這是一段代碼:
while (sr.next()) {
counter++; //advance counter
view = (DataClass) sr.get(0);
try {
//writing fields values for Activity Report file
reportService.writeExcelFieldsValue(rowCounter,sheet,view,user,exportedFields);
rowCounter++;
} catch (Exception e) {
throw new RuntimeException(e);
}
if (counter == chunkSize || sr.isLast()) {
counter = 0; //reset counter
//Clear the session after a chunk and before next chunk
getSession().clear();
}
}
wb.write(bos);
bos.flush();
POI提供了一個基於XSSF的低內存占用的SXSSF API。
SXSSF是XSSF的API兼容流擴展,可用於必須生成非常大的電子表格且堆空間有限的情況。 SXSSF通過限制對滑動窗口內的行的訪問來實現其低內存占用,而XSSF允許對文檔中的所有行進行訪問。 不再存在於窗口中的較舊的行由於被寫入磁盤而變得不可訪問。
在自動刷新模式下,可以指定訪問窗口的大小,以在內存中保留一定數量的行。 當達到該值時,創建額外的一行將導致具有最低索引的行從訪問窗口中刪除並寫入磁盤。 或者,可以將窗口大小設置為動態增長。 可以根據需要通過顯式調用flushRows(int keepRows)定期對其進行修剪。
由於實現的流性質,與XSSF相比存在以下限制:
我認為您將要使用XSSF EventModel代碼。 請參閱POI文檔以開始使用。 或有關更多詳細信息,請單擊此處
另外,此鏈接可能會對您有所幫助。 使用POI將大型結果集寫入Excel文件
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.