欢迎来到淼淼之森的个人小站。  交流请加我微信好友: studyjava。  也欢迎关注同名公众号:Java学习之道

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

  |   0 评论   |   0 浏览

错误复现

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

标题:java解决poi导出excel使用SXSSF时“Attempting to write a row[?] in the range [0,?]that is already written to disk.”异常
作者:mmzsblog
地址:https://www.mmzsblog.cn/articles/2025/03/14/1741922688808.html

如未加特殊说明,文章均为原创,转载必须注明出处。均采用CC BY-SA 4.0 协议

本网站发布的内容(图片、视频和文字)以原创、转载和分享网络内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。若本站转载文章遗漏了原文链接,请及时告知,我们将做删除处理!文章观点不代表本网站立场,如需处理请联系首页客服。
• 网站转载须在文章起始位置标注作者及原文连接,否则保留追究法律责任的权利。
• 公众号转载请联系网站首页的微信号申请白名单!

个人微信公众号 ↓↓↓                 

微信搜一搜 Java 学习之道