我正在尝试写入 Excel 文件,但遇到两个问题。相关代码如下:
public ExcelFormWriter() throws IOException, WriteException{
setOutputFile("DataAnalysis.xls");
File file = new File(inputFile);
WorkbookSettings wbSettings = new WorkbookSettings();
wbSettings.setLocale(new Locale("en", "EN"));
workbook = Workbook.createWorkbook(file, wbSettings);
workbook.createSheet("RawData", 0);
}
public void addLabel(int column, int row, String s) throws WriteException, RowsExceededException, IOException {
excelSheet = workbook.getSheet(0);
createLabel(excelSheet);
Label label = new Label(column, row, s, times);
excelSheet.addCell(label);
workbook.write();
workbook.close();
}
在另一个类中,我这样调用它:
ExcelFormWriter test = new ExcelFormWriter();
int row = 1;
for (int i = 100; i > 0; i--){
test.addLabel(0,row,getDateNDaysAgo(i));
row++;
}
如果我像这样运行它,它会写入 Excel 文件中的第一行,然后返回 NullPointerException。
我发现,如果我注释掉“workbook.close()”,它会运行for循环并且构建成功完成,但是当我查看excel文件时,实际上没有写入任何内容。
我并不完全熟悉写入电子表格,因此我的代码中可能存在基本缺陷,例如某些内容位于错误的位置。任何答案都值得赞赏,但请在答案中具体说明,因为我对这段代码感到茫然不知所措,我不知道它的作用。
对于这些东西的 future 诊断/故障排除的建议也将不胜感激。
更新
我已经添加了一个单独的方法来关闭工作簿。谢谢你的提示。然而,第二个问题仍然存在。仅写入电子表格的第一行。
public void close() throws IOException, WriteException{
workbook.close();
}
这是我调用该方法的地方。也许这有问题?
int row = 1;
for (int i = 100; i > 0; i--){
test.addLabel(0,row,getDateNDaysAgo(i));
row++;
}
test.close();
最佳答案
您必须将 workbook.close() 语句放在 addLabel 函数之外,因为您在 for 循环的第一次迭代中调用它,关闭工作簿,然后在您尝试写入的下一次迭代中不再存在的工作簿。添加 closeWorkbook 函数或通过 getter 调用工作簿,并在写入单元格后将其关闭。
关于java - Jxl NullPointerException 与 workbook.close() 方法有关,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24737456/