与workbook.close()方法有关的Jxl NullPointerException

时间:2014-07-14 13:18:17

标签: java excel nullpointerexception jxl

我正在尝试写入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();

1 个答案:

答案 0 :(得分:2)

您必须将workbook.close()语句放在addLabel函数之外,因为您在for循环的第一次迭代中调用它,关闭工作簿,然后在您尝试写入的下一次迭代中不再存在的工作簿。添加closeWorkbook函数或通过getter调用Workbook,并在编写完单元格后关闭它。