2013-07-31 58 views
1

我試圖將信息附加到現有的Excel文件,但我一直在接收java.lang.NullPointerException。請參閱下面的代碼和例外消息。將信息附加到現有Excel文件時發生java.lang.NullPointerException

代碼

private WritableSheet appendingSheet; 
private static File report; 

public void AppendToDoc (String path) throws IOException, WriteException, BiffException { 

    this.inputFile = path; 
    report = new File(inputFile); 

    Workbook appendingWorkbook = Workbook.getWorkbook(new File(inputFile)); 
    WritableWorkbook copy = Workbook.createWorkbook(new File("output.xls"),appendingWorkbook); 
    appendingSheet = copy.getSheet("Sheet 1");  
} 

public void WriteToDoc (int option, String testName, String execDate, String time, boolean status) throws RowsExceededException, WriteException, IOException, BiffException{   


    int startingRow = NumOfRows(this.inputFile) + 1; //I have a function which finds the number of existing rows in the existing document. It works. 
    Label label = new Label(1, startingRow, "hello", times);  
    appendingSheet.addCell(label); 

} 

調用代碼

AppendToDoc("C:/Users/smith/ExcelTestFile.xls"); 
WriteToDoc(2, "This is a test", "executed", timeStamp, true); 

異常消息

異常在線程 「主」 java.lang.NullPointerExc eption at jxl.write.biff.Styles.getFormat(Styles.java:214) at jxl.write.biff.CellValue.addCellFormat(CellValue.java:468) at jxl.write.biff.CellValue.setCellDetails(CellValue的.java:282) 在jxl.write.biff.LabelRecord.setCellDetails(LabelRecord.java:216) 在jxl.write.biff.WritableSheetImpl.addCell(WritableSheetImpl.java:1199) 在ExcelOperations.WriteToDoc(ExcelOperations.java :149) 在ChequeImage.main(ChequeImage.java:174)

注意:唯一的例外似乎在線路是發生 「appendingSheet.addCell(標籤);」。

感謝您的幫助。

編輯1:下圖顯示了執行「appendingSheet.addCell(label)」前的appendingSheet的內容。我不完全確定它代表什麼,但它似乎並不是零。 enter image description here

+0

'appendingSheet'實例在'AppendToDoc'方法中初始化並且僅限於該方法。將'WriteToDoc'的'NPE'作爲'appendingSheet'使'null.' – Smit

+0

同時顯示調用這些方法的代碼會很有幫助。 –

+0

@Smit appendingSheet是一個全局變量。即使它在AppendToDoc中初始化,即使在AppendToDoc完成之後,該值仍然存在? – Hypaa

回答

0

我不能說我對比夫很熟悉,但是POI似乎以類似的方式工作。它看起來好像你已經創建了一個工作簿:

WritableWorkbook copy = Workbook.createWorkbook(new File(「output.xls」),appendingWorkbook);

但你不創建使用引用片:

appendingSheet = copy.getSheet( 「表1」);

我猜你會得到一個NPE,因爲「copy.getSheet(」Sheet 1「);」返回null。與在Excel中簡單打開工作簿不同的是,API可能不會爲您創建該默認工作表。我打賭你必須先創建表單對象,然後才能添加單元格。

+0

請參閱我的編輯1.謝謝。 – Hypaa

+0

您確定在應用程序中不是如何表示空格或格式不正確的數據?也許在「appendingSheet = copy.getSheet(」Sheet 1「);」「之後嘗試System.out.println()查看返回的工作表是否爲空或其他不正確的數據。 – kondrak

0

所以...我已經設法解決了這個問題。

我真的不能解釋爲什麼,但之後,我重新定義了「複製」和「appendingWorkbook」(不appendingSheet)爲全局變量,而不是本地AppendToDoc();以及添加行copy.write(),程序工作...

謝謝大家的幫助。對此,我真的非常感激。

相關問題