2016-05-18 198 views
0

我一直在POI中編寫代碼以將數據輸入到Excel工作表中。首先,我需要遍歷一組行,我不確定其中有多少行,可能是10或100.但是我發現最後有一個空白單元格。之後,空白再次有一組行。我對第二組沒有打擾。我需要找出第一組是否已經結束。使用單元格引用檢查空白單元格

這很混亂。現在我的工作表中有5位用戶,如下所示。第五位用戶之後有一個空白單元格。我試圖打印所有的用戶,如果有一個空白的停止它。

AAA 
BBB 
CCC 
DDD 
EEE 

JJJ 

我正在使用下面的代碼來完成這項工作。

String userName; 
CellReference ref = null; 
Row row; 
Cell cell; 
do { 
    userName = "B" + i; 
     ref = new CellReference(userName); 
     row = sheet.getRow(ref.getRow()); 
     cell = row.getCell(ref.getCol()); 
     System.out.println(cell.getStringCellValue() + "\t" + userName); 
     i++; 
} while (row != null); 

但是我得到的輸出如下。

AAA  B4 
BBB  B5 
CCC  B6 
DDD  B7 
EEE  B8 
Exception in thread "main" java.lang.NullPointerException 
    at FinalSheetFillData.main(FinalSheetFillData.java:26) 

請讓我知道我在哪裏錯了,我該如何解決這個問題。

感謝

回答

2

你需要檢查cellRow值,如果該行從表丟失,則System.out的

String userName; 
CellReference ref = null; 
Row row; 
Cell cell; 
do { 
    userName = "B" + i; 
     ref = new CellReference(userName); 
     row = sheet.getRow(ref.getRow()); 
     cell = row.getCell(ref.getCol()); 
     if(cell.getStringCellValue()!=null){ 
      System.out.println(cell.getStringCellValue() + "\t" + userName); 
     }else{ 
      System.out.println(" " + "\t" + userName); 
     } 
     i++; 
} while (row != null); 
+0

仍然給了我同樣的錯誤,但thistime上面轉移像 'AAA B4 BBB \t B5 異常線程 「main」 CCC \t B6 DDD B7 EEE B8 顯示java.lang.NullPointerException (FinalSheetFillData.java:26)' – Rakesh

+1

也許'cell'變量爲空?如果第26行是'if(cell.getStringCellValue()!= null){'然後嘗試檢查'cell'是否爲null,而不是'cell.getStringCellValue()' - 請參閱http://stackoverflow.com/questions/ 31184499/apache-poi-getcell-error-java-lang-nullpointerexception-can-read-cell-if?rq = 1 –

+0

即使在你讀的行上,行也不會等於null,它不爲null。它爲N」。 –

1

Sheet.getRow()將返回一個空。而且,空行通常會丟失。與細胞和Row.getCell()的情況。所以一旦你到達單元格B9,代碼在if(cell.getStringCellValue()處轟炸,因爲cellnull。您可以循環使用for each構造以避免這些問題,或者您可以在此情況下使用常規for循環,因爲您正在查找缺少的行以停止處理。

String userName; 
CellReference ref = null; 
Row row; 
Cell cell; 
for (int i = sheet.getFirstRow(); i <= sheet.getLastRow(); i++) { 
    userName = "B" + i; 
    ref = new CellReference(userName); 
    row = sheet.getRow(ref.getRow()); 
    if (row != null) { 
     cell = row.getCell(ref.getCol()); 
     if(cell != null && !cell.toString().trim().equals("")){ 
      System.out.println(cell.getStringCellValue() + "\t" + userName); 
     }else{ 
      break; 
     } 
    } else { 
     break; 
    } 
}