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

标签 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。

我发现,如果我注释掉“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/

相关文章:

Java : naming convention for accessors

VBA 字典表现得很疯狂

java - 霍夫曼节点和 NullPointerException

java - android getRunningAppProcesses 总是返回 null

java - 整数解析不适用于将二进制转换为十进制

java - 为什么 H2 数据库不在浏览器中显示我的表

java - 如何在 JUnit 测试中引导 weld-se

c# (WinForms-App) 将数据集导出到 Excel

java - 解决错误的请求无法从 void 转换为 HSSFCell

java - Android 应用程序在 Intent 时崩溃