当单元格值为空时,Poi 的 getCellType() 抛出 NullPointerException

getCellType() of Poi throws NullPointerException, when cell value is blank

我使用以下代码使用 POI 打印 Excel 电子表格中的所有值。当所有单元格中都有值时,它工作正常。但是,如果有空白单元格,它会抛出 NullPointerException。我观察到 getCellType() 方法抛出这个异常。你能帮忙打印所有的值吗,即使有空白单元格?

public class ExcelRead4 {

    public static void main(String[] args) {
        try {
            FileInputStream fis = new FileInputStream("D:/Batch2_Excel/ExcelRead.xlsx");
            Workbook wb = WorkbookFactory.create(fis);
            Sheet sht = wb.getSheet("Sheet1");
            int rowcount = sht.getLastRowNum();
            for (int i = 0; i <= rowcount; i++) {
                int celCount = sht.getRow(i).getLastCellNum();
                for (int j = 0; j < celCount; j++) {
                    Cell cel = sht.getRow(i).getCell(j);
                    int cel_Type = cel.getCellType();                           
                    switch(cel_Type) {
                    case 0: System.out.print(cel.getNumericCellValue()+ " ");
                            break;
                    case 1:System.out.print(cel.getStringCellValue()+" ");
                            break;
                    case 4: System.out.print(cel.getBooleanCellValue()+" ");
                            break;
                    case 3:
                            System.out.print(" "+" ");
                            break; 
                    default:
                            System.out.print("inside the default..");
                    }
                }
                System.out.println(" ");
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (InvalidFormatException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

在调用任何方法之前,您只需检查单元格是否为空:

if (cel == null) {
    continue;
}

用你需要的替换继续部分,这样它就忽略了单元格。

int cel_Type = cel.getCellType();

用下面的代码替换上述代码部分。它会起作用。在我的机器上测试相同。

int cel_Type;

try {
cel_Type = cel.getCellType();
} catch (NullPointerException e) {
cel_Type = 3;
}