[英]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.