使用单元格引用检查空白单元格

时间:2016-05-18 14:14:57

标签: java apache-poi

我一直在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)

请让我知道我哪里出错了,我该怎么办呢。

由于

2 个答案:

答案 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)

如果工作表中缺少行,<​​p> Sheet.getRow()将返回null。并且,经常缺少空白行。单元格和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;
     }
}