我一直在POI中编写代码以将数据输入Excel工作表。首先,我需要遍历一组行,我不确定它们中有多少,可能是10或100.但我发现最后有一个空白单元格。之后,空白又有一组行。我对第二集并不感到困扰。我需要找出第一组是否已经结束。
这非常令人困惑。现在,我的表格中有5位用户,如下所示。在第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)
请让我知道我哪里出错了,我该怎么办呢。
由于
答案 0 :(得分: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);
答案 1 :(得分:1)
Sheet.getRow()
将返回null。并且,经常缺少空白行。单元格和Row.getCell()
的情况。因此,一旦您转到单元格B9
,代码就会在if(cell.getStringCellValue()
进行轰炸,因为cell
是null
。您可以使用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;
}
}