0

我需要使用 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. 写入可写工作簿(次是可写单元格格式变量)

    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的

4

2 回答 2

0

嗯,首先怀疑是,在这一行:

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

你传递null参数。

于 2013-09-04T14:39:52.180 回答
0

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

于 2018-02-14T11:29:54.710 回答