我正在尝试写入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。
我发现如果我注释掉了#workwork.close()',它会在for循环中运行并且构建成功完成,但是当我查看excel文件时,实际上并没有写任何内容。
我对编写电子表格并不完全熟悉,因此我的代码可能存在一个基本缺陷,比如错误的地方。任何答案都表示赞赏,但请在您的答案中具体说明,因为我在这个代码的黑暗中感觉到并且我不知道它是做什么的。
对于这些东西的未来诊断/故障排除的建议也将不胜感激。
更新
我已经为关闭工作簿添加了一个单独的方法。谢谢你的提示。但是,第二个问题仍然存在。只写了电子表格的第一行。
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();
答案 0 :(得分:2)
您必须将workbook.close()语句放在addLabel函数之外,因为您在for循环的第一次迭代中调用它,关闭工作簿,然后在您尝试写入的下一次迭代中不再存在的工作簿。添加closeWorkbook函数或通过getter调用Workbook,并在编写完单元格后关闭它。