当单元格值为空时,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;
}
我使用以下代码使用 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;
}