【问题标题】:Null pointer exception with jexcel while writing写入时jexcel出现空指针异常
【发布时间】:2013-09-04 14:00:57
【问题描述】:

我需要使用 JExcel 将内容附加到现有的 excel 文件中。

我正在尝试以下方法:

  1. 从现有工作簿中读取

    workbook = Workbook.getWorkbook(new File(errorFilePath));
    
  2. 将现有工作簿中的可写工作簿创建到临时文件中

    if (!tempFile.exists()) {
       tempFile.getParentFile().mkdirs();
       tempFile.createNewFile();
    }
    newCopy = Workbook.createWorkbook(tempFile, workbook);
    excelSheet = newCopy.getSheet(0);
    
  3. 写入可写工作簿(times 是可写单元格格式变量)

    Label label;
    label = new Label(column, row, stringData, times);
    excelSheet .addCell(label);
    
  4. 关闭现有和可写工作簿->删除现有工作簿 在 finally 块中 -> 将临时文件名重命名为现有(现已删除)工作簿名称

     finally {
            if (null != newCopy) {
                newCopy.write();
                newCopy.close();
            }
            if (null != workbook) {
                workbook.close();
            }
            if (null != errorFile && errorFile.exists()) {
                errorFile.delete();
            }
            if (null != tempFile) {
                tempFile.renameTo(new File(errorFilePath));
            }
    
        }
    

    问题是第一次运行一切正常(无需重新部署)。 但是,每当我更改一些 java 代码,并且重新部署 Web 应用程序时,在关闭新创建的工作簿时(写入后),我都会收到一个空指针异常。

我得到以下堆栈跟踪(源自 newCopy.write() 行)

   java.lang.NullPointerException
at jxl.write.biff.CellValue.getData(CellValue.java:259)
at jxl.write.biff.LabelRecord.getData(LabelRecord.java:141)
at jxl.biff.WritableRecordData.getBytes(WritableRecordData.java:71)
at jxl.write.biff.File.write(File.java:147)
at jxl.write.biff.RowRecord.writeCells(RowRecord.java:329)
at jxl.write.biff.SheetWriter.write(SheetWriter.java:479)
at jxl.write.biff.WritableSheetImpl.write(WritableSheetImpl.java:1514)
at jxl.write.biff.WritableWorkbookImpl.write(WritableWorkbookImpl.java:950)

Java 版本:1.6

JExcel 版本:2.6.10

Windows 7

【问题讨论】:

  • 发布您的错误堆栈跟踪
  • 你是在生成 xls 还是 xlsx 文件?
  • xls 文件...并发布堆栈跟踪
  • 能否请您也尝试关闭 tempFile。问题是 excel API 通常会为每次编辑保留一个锁定文件,这可能会阻止您在重新部署后再次使用该文件。
  • tempFile 是一个文件对象(它们没有关闭方法。) tempFile 作为参数传递给 jexcel,它从中创建 newCopy(参见代码 sn-p 2) newCopy 在 finally 块中关闭

标签: java jexcelapi


【解决方案1】:

嗯,第一个怀疑是,在这一行:

label = new Label(column, row, stringData, times);

您传递了null 参数。

【讨论】:

  • 我已经检查过...没有空参数... 问题是第一次运行时一切正常(无需重新部署)。但是,每当我更改一些 java 代码,并且 Web 应用程序重新部署时,我在关闭新创建的工作簿(写入后)时会收到一个空指针异常。 为什么只在重新部署时?
【解决方案2】:

我遇到了同样的问题。 我试图使用 insertRow 在循环中动态地向工作表添加行。花了几个小时后,它可能是最新版本的 jxl api 中的一个错误。 2.6.9 之后的 JXL api 似乎在 insertRow 中有错误。我从 2.6.12 切换到 2.6.9。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-03-19
    • 1970-01-01
    • 2013-04-10
    • 2014-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多