2016-05-18 159 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; 
    } 
}