我一直在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)
我哪里出了问题,我该如何解决这个问题?
发布于 2016-05-18 22:18:02
您需要检查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);
发布于 2016-05-19 22:02:14
如果工作表中缺少行,则Sheet.getRow()
将返回null。而且,经常会缺少空行。cells和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;
}
}
https://stackoverflow.com/questions/37302271
复制相似问题