java解决poi导出excel使用SXSSF时“Attempting to write a row[?] in the range [0,?]that is already written to disk.”异常

SXSSFWorkbook  workbook = new SXSSFWorkbook();// 创建一个Excel文件  
Sheet sheet = workbook.createSheet(filename);// 创建一个Excel的Sheet
......
row = sheet.getRow(parDepRowIdx);
if (row == null) {
    row = sheet.createRow(parDepRowIdx);
}

row在前面已经create过,但在这里get到的值为null(不知道什么原因),再次使用create时报错“Attempting to write a row[?] in the range [0,?]that is already written to disk”。

报错原因:当前要创建的行小于等于最近已经创建的行时,就会抛出异常。SXSSFWorkbook其本身实现方式在于,不断的将一定行数的表格写入临时文档,最终将所有的临时文档合并起来,这种方式中保证了内存的占用数理想,并且导出的效率也比较理想。在这种实现中,如果一个行已经写入临时文档了,就不能再修改了,因此在源代码中直接限制了重复创建并写同一栏,并在此抛出异常。

 

解决方法:

使用XSSFWorkbook替代SXSSFWorkbook,,然后直接用getRow获取行

XSSFWorkbook workbook = new XSSFWorkbook();// 创建一个Excel文件
Sheet sheet = workbook.createSheet(filename);// 创建一个Excel的Sheet

 

转相关文章:https://www.dazhuanlan.com/2019/12/05/5de8b4f10760f/

posted @   Bob.Xie  阅读(20380)  评论(2编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示