繁体   English   中英

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

[英]Jxl NullPointerException to do with workbook.close() method

我正在尝试写入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文件时,实际上什么也没写。

我对写入电子表格并不完全熟悉,因此我的代码中可能存在一个基本缺陷,例如放置在错误的位置。 感谢您提供任何答案,但请在您的答案中具体说明,因为我对这段代码感到困惑,而且我不知道该做什么。

对于将来对这些东西的诊断/故障排除的建议也将不胜感激。

UPDATE

我已经提出了一种单独的方法来关闭工作簿。 谢谢你的提示。 但是,第二个问题仍然存在。 仅写入电子表格的第一行。

  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函数或由吸气剂调用工作簿,并在编写单元格后将其关闭。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM