1

我的情况是,当出现空白行时,我必须退出 to 的转换Exceltxt我为此编写了以下代码

for (int rowNum = rowStart; rowNum < rowEnd; rowNum++)
{                       
   Row row=sheet1.getRow(rowNum);
   int lastColumn = row.getLastCellNum();
   for (int cn = 0; cn < lastColumn; cn++) 
   {                    
       Cell cell = row.getCell(cn, Row.RETURN_BLANK_AS_NULL);       
       if(cell == null)
       {
           break;
       }
       switch(cell.getCellType()) 
       {
           //Remaining code for non-blank cells
       }
   }
}   

代码工作正常,但是一旦出现空白行,就会在第 4 行nullPointerException的方法中抛出a。getLastCellNum()我做错了什么吗?我还为我的工作簿设置了缺少的单元格策略

workbook1.setMissingCellPolicy(Row.RETURN_BLANK_AS_NULL);
4

1 回答 1

3

如果要查找任何空行的lastCellNum,并且该工作表的最后一个行号大于当前行号,似乎可能会发生这种情况。

例如,如果工作表中的总行数为 10,但第 5 行为空。Null 表示不是空白,而是未初始化的行。在这种情况下Row row=sheet1.getRow(rowNum);不会显示任何错误,但row.getLastCellNum();会显示nullPointerException

要克服此问题,您需要在获取最后一行编号之前检查该行不应为空。

请检查以下代码

   int lastColumn=0;
    for (int rowNum = 0; rowNum < rowEnd; rowNum++){
        Row row=sheet1.getRow(rowNum);
        if(row!=null)
            lastColumn = row.getLastCellNum();
        else
            continue;
        for (int cn = 0; cn < lastColumn; cn++){
            Cell cell = row.getCell(cn, Row.RETURN_BLANK_AS_NULL);
            if(cell == null){
                break;
            }
            switch(cell.getCellType()){
               //Remaining code for non-blank cells
            }
        }
    }
于 2013-08-02T13:43:33.060 回答