【问题标题】:IllegalStateException: Cannot get a NUMERIC value from a STRING cellIllegalStateException:无法从 STRING 单元格中获取 NUMERIC 值
【发布时间】:2018-03-22 18:30:14
【问题描述】:

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

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

我仍然收到此错误:

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

这怎么可能?

【问题讨论】:

  • 你确定rwsht.getRow(0) 是同一行吗?检查else if (sht.getRow(0).getCell(j).getCellType() == Cell.CELL_TYPE_NUMERIC)
  • 我也有一个用于数字、字符串和公式(数字和字符串值)的“else if”块。然而,它在相同的步骤中给出了错误。它实际上是日期格式的数据,它卡在这里。到目前为止,我已经在我的 excel 文件中正确编辑和格式化日期值,添加了一个 else 块来获取日期:cell.getDateCellValue();我只在 Excel 中的日期值的 Json 文件中得到一些数字,如 45645。

标签: java illegalstateexception


【解决方案1】:

如果此行引发异常:

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());

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-14
    • 2021-03-30
    • 1970-01-01
    • 2018-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多