2013-07-31 3 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 jxl.write.biff.Styles.getFormat (Styles.java:214) 에서 jxl.write.biff.CellValue.addCellFormat (CellValue.java:468) 에서 jxl.write.biff.CellValue.setCellDetails (CellValue 된 .java 282) jxl.write.biff.LabelRecord.setCellDetails (LabelRecord.java:216) ExcelOperations.WriteToDoc에서 jxl.write.biff.WritableSheetImpl.addCell (WritableSheetImpl.java:1199) 에서 에서 (ExcelOperations.java : ChequeImage.main (ChequeImage.java:174 149) )

참고 "appendingSheet.addCell (레이블);"예외는 줄에서 일어나고있는 것으로 보인다.

도움 주셔서 감사합니다.

수정 1 : 아래 이미지는 "appendingSheet.addCell (label)"이 실행되기 직전에 appendingSheet의 내용을 보여줍니다. 나는 그것이 무엇을 대표하는지 정확히 모르겠지만 그것은 certianly null이 아닌 것 같습니다. enter image description here

+0

음'appendingSheet' 인스턴스는'AppendToDoc' 메소드에서 초기화되고 그 메소드로만 제한됩니다. 'AppendingSheet'가'WriteToDoc'을위한'NPE'를'null '로 만듭니다. – Smit

+0

이 메소드들을 호출하는 코드를 보여 주면 도움이 될 것입니다. –

+0

@Smit appendingSheet는 전역 변수입니다. AppendToDoc에서 초기화 되었더라도 AppendToDoc이 no로 끝난 후에도 여전히 값이 남아 있습니까? – Hypaa

답변

0

내가 Biff에 익숙하다고 말할 수는 없지만 POI는 비슷한 방식으로 작동하는 것 같습니다. 통합 문서를 만든 것처럼 보입니다.

WritableWorkbook copy = Workbook.createWorkbook (새 파일 ("output.xls"), appendingWorkbook);

그러나 당신은 당신이 참조하는 시트를 생성하지 않는 :

appendingSheet = copy.getSheet ("시트 1");

"copy.getSheet ("Sheet 1 ");"때문에 NPE가 표시됩니다. null가 돌려 주어집니다. Excel에서 통합 문서를 열 때와 달리 API가 해당 기본 시트를 작성하지 않을 가능성이 있습니다. 셀을 추가하기 전에 시트 객체를 만들어야 할 것입니다.

+0

내 편집 1을 참조하십시오. 감사합니다. – Hypaa

+0

null 또는 부적절한 형식의 데이터가 응용 프로그램에서 표현되는 방식이 아닌 것이 확실합니까? 어쩌면 "appendingSheet = copy.getSheet ("Sheet 1 ");"뒤에 System.out.println() 반환되는 시트가 null인지, 그렇지 않은 경우는 부정한 데이터인가 어떤가를 판정합니다. – kondrak

0

그래서 ... 문제를 해결할 수있었습니다.

난 정말 이유를 설명하지만, 내가 "사본"대신 지역의 글로벌 변수로 AppendToDoc에 "appendingWorkbook"(하지 appendingSheet를)()를 재정의 한 후 수 없습니다; 뿐만 아니라 라인을 추가 copy.write(), 프로그램이 작동했습니다 ...

모두에게 도움을. 정말 감사.

관련 문제