java.lang.IllegalStateException: Cannot get a text value from a numeric cell

java.lang.IllegalStateException: Cannot get a text value from a numeric cell异常在使用POI读取Excel文件内容时,发生了异常,大概意思是不能从一个数值的列获取一个字符串类型的值,报错如下:使用了getStringCellValue()方法来获取值,POI会判断单元格的类型,如果非字符串类型就会抛出上面的异常。如下图,读取绿色框中的值不抛异常,读取红色框中值出抛出异常,POI认为这是一个数字。解决方式一:解决方法是在读取某单元格时,使用setCellType()方法先将该单元格的类型设置为STRING,代码如下://此处省略N行代码she.

大家好,欢迎来到IT知识分享网。

异常

在使用POI读取Excel文件内容时,发生了异常,大概意思是不能从一个数值的列获取一个字符串类型的值,报错如下:

java.lang.IllegalStateException: Cannot get a text value from a numeric cell 

使用了getStringCellValue()方法来获取值,POI会判断单元格的类型,如果非字符串类型就会抛出上面的异常。

如下图,读取绿色框中的值不抛异常,读取红色框中值出抛出异常,POI认为这是一个数字。

java.lang.IllegalStateException: Cannot get a text value from a numeric cell

解决方式一:

解决方法是在读取某单元格时,使用setCellType()方法先将该单元格的类型设置为STRING,代码如下:

//此处省略N行代码
sheet.getRow(6).getCell(6).setCellType(CellType.STRING);
String cellValue = sheet.getRow(6).getCell(6).getStringCellValue();
//此处省略N行代码

解决方式二:

Excel中数值类型值在程序中按字符串类型获取

/**
 * 拿到不同类型单元格中的值
 * 1. 字符串: 字符串
 * 2. 布尔: toString
 * 3. 数值(double): 格式化后的字符串
 * @param cell 获取的单元格
 * @return 单元格中的值
 */
private static String getCellValue(Cell cell) {
    String resultValue = "";
    // 判空
    if (Objects.isNull(cell)) {
        return resultValue;
    }

    // 拿到单元格类型
    int cellType = cell.getCellType();
    switch (cellType) {
        // 字符串类型
        case Cell.CELL_TYPE_STRING:
            resultValue = StringUtils.isEmpty(cell.getStringCellValue()) ? "" : cell.getStringCellValue().trim();
            break;
        // 布尔类型
        case Cell.CELL_TYPE_BOOLEAN:
            resultValue = String.valueOf(cell.getBooleanCellValue());
            break;
        // 数值类型
        case Cell.CELL_TYPE_NUMERIC:
            resultValue = new DecimalFormat("#.######").format(cell.getNumericCellValue());
            break;
        // 取空串
        default:
            break;
    }
    return resultValue;
}

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/23676.html

(0)
上一篇 2023-09-07 17:45
下一篇 2023-09-07 21:45

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

关注微信