使用 Apache Poi 生成批量 excel 文件时出现套接字异常
Posted
技术标签:
【中文标题】使用 Apache Poi 生成批量 excel 文件时出现套接字异常【英文标题】:Socket Exception while generating bulk excel file using Apache Poi 【发布时间】:2013-03-15 04:50:49 【问题描述】:我在为批量数据(超过 50 万条记录)生成 Excel 文件时收到SocketConnectionException
。
我的 Web 应用程序的代码写入 `outputstream.这是一段sn-p代码:
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();
【问题讨论】:
【参考方案1】:POI 提供基于 XSSF 构建的低内存占用 SXSSF API。
SXSSF 是 XSSF 的 API 兼容的流式扩展,可在必须生成非常大的电子表格且堆空间有限时使用。 SXSSF 通过限制对滑动窗口内行的访问来实现其低内存占用,而 XSSF 允许访问文档中的所有行。不再在窗口中的旧行在写入磁盘时变得不可访问。
在自动刷新模式下,可以指定访问窗口的大小,以在内存中保存一定数量的行。当达到该值时,创建附加行会导致索引最低的行从访问窗口中删除并写入磁盘。或者,可以将窗口大小设置为动态增长;可以根据需要通过显式调用 flushRows(int keepRows) 定期对其进行修剪。
由于实现的流式特性,与 XSSF 相比存在以下限制:
在某个时间点只能访问有限数量的行。 不支持Sheet.clone()。不支持公式计算 我认为此链接可能会对您有所帮助我认为您会想要使用 XSSF EventModel 代码。请参阅POI documentation 以开始使用。或了解更多详情,请点击here
此链接也可能对您有所帮助。 Writing a large resultset to an Excel file using POI
【讨论】:
以上是关于使用 Apache Poi 生成批量 excel 文件时出现套接字异常的主要内容,如果未能解决你的问题,请参考以下文章