zoukankan      html  css  js  c++  java
  • 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/

  • 相关阅读:
    WINREG.H 编译出错
    WINREG.H 编译出错
    JS创建对象的几种方式
    清除radio单选框外边距
    Dragging MovieClips
    Cannot Say No
    分层提高软件系统的可测试性
    如何从技术上掌控项目?
    领导我只需要你告诉我你要做什么,怎么做让我来好吗?
    如何依据框架进行任务分解
  • 原文地址:https://www.cnblogs.com/BobXie85/p/12362961.html
Copyright © 2011-2022 走看看