IllegalStateException:无法从STRING单元格获取NUMERIC值

时间:2018-03-22 06:11:42

标签: java illegalstateexception

我正在创建一个用于将.xlsx文件转换为.Json的java程序。我已使用以下条件验证单元格数据格式是否为数字。

else if (rw.getCell(j).getCellType() == Cell.CELL_TYPE_NUMERIC) {
    key = "" +sht.getRow(0).getCell(j).getNumericCellValue();
}

我仍然收到此错误:

  

IllegalStateException:无法从STRING单元格获取NUMERIC值。

这怎么可能?

1 个答案:

答案 0 :(得分:0)

如果此行引发异常:

key = "" +sht.getRow(0).getCell(j).getNumericCellValue();

这意味着sht.getRow(0).getCell(j)的类型不是数字。

if clauseif block中使用相同的变量,否则它将成为永无止境的错误来源。

Row row = sht.getRow(0);
Cell cell = row.getCell(j);
...
String key = null;
else if (cell.getCellType() == Cell.CELL_TYPE_NUMERIC) {
    key = "" +cell.getNumericCellValue();
}

所以现在有2例

  • 如果单元格是NUMERIC类型,那么它将起作用并且您将拥有一个键。
  • 如果单元格不是NUMERIC类型,那么它仍然可以工作(不会崩溃)但是你会有一个空键。

另外,如果您在if:

之前添加以下打印语句,我会很想知道您得到了什么输出?
System.out.println("Cell.CELL_TYPE_NUMERIC: "+Cell.CELL_TYPE_NUMERIC);
System.out.println("rw.getCell(j).getCellType(): "+rw.getCell(j).getCellType());
System.out.println("sht.getRow(0).getCell(j).getCellType(): "+sht.getRow(0).getCell(j).getCellType());

我希望它们不会完全一样。