我需要使用JExcel将内容附加到现有的excel文件。
我正在尝试以下方法:
从现有工作簿中读取
workbook = Workbook.getWorkbook(new File(errorFilePath));
从exisitng工作簿创建可写工作簿到临时文件
if (!tempFile.exists()) {
tempFile.getParentFile().mkdirs();
tempFile.createNewFile();
}
newCopy = Workbook.createWorkbook(tempFile, workbook);
excelSheet = newCopy.getSheet(0);
写入可写工作簿(时间是可写单元格格式变量)
Label label;
label = new Label(column, row, stringData, times);
excelSheet .addCell(label);
关闭exisitng和可写工作簿 - >删除exisitng工作簿 在最后一个块 - >将临时文件名重命名为现有(现已删除)工作簿名称
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
答案 0 :(得分:0)
嗯,首先怀疑是,在这一行:
label = new Label(column, row, stringData, times);
你传递了null
个参数。
答案 1 :(得分:0)
我遇到了同样的问题。 我试图使用 insertRow 在循环中动态地向表单添加行。花了几个小时后,这可能是最新版本的jxl api中的一个错误。 2.6.9之后的JXL api似乎在insertRow中有bug。我从2.6.12切换到2.6.9。