簡體   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