使用 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 文件时出现套接字异常的主要内容,如果未能解决你的问题,请参考以下文章

JAVA使用poi包,向Excel中写入批量数据

apache poi 生成excel

java利用poi技术导入批量excel数据,并且分段存入数据库怎么解决

POI 导出大批量数据的Excel

POI 生成excel(大数据量) SXSSF

采用apache POI 框架生成excel文件