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文件内容时,发生了异常,大概意思是不能从一个数值的列获取一个字符串类型的值,报错如下:

2.png

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

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

3.png


解决方式一:

解决方法是在读取某单元格时,使用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;
}



相关文章
|
JSON Java 关系型数据库
Java更新数据库报错:Data truncation: Cannot create a JSON value from a string with CHARACTER SET 'binary'.
在Java中,使用mybatis-plus更新实体类对象到mysql,其中一个字段对应数据库中json数据类型,更新时报错:Data truncation: Cannot create a JSON value from a string with CHARACTER SET 'binary'.
1273 4
Java更新数据库报错:Data truncation: Cannot create a JSON value from a string with CHARACTER SET 'binary'.
|
存储 Java API
Java交换map的key和value值
通过本文介绍的几种方法,可以在Java中实现Map键值对的交换。每种方法都有其优缺点,具体选择哪种方法应根据实际需求和场景决定。对于简单的键值对交换,可以使用简单遍历法或Java 8的Stream API;对于需要处理值不唯一的情况,可以使用集合存储或Guava的Multimap。希望本文对您理解和实现Java中的Map键值对交换有所帮助。
297 1
|
Java
让星星⭐月亮告诉你,Java NIO之Buffer详解 属性capacity/position/limit/mark 方法put(X)/get()/flip()/compact()/clear()
这段代码演示了Java NIO中`ByteBuffer`的基本操作,包括分配、写入、翻转、读取、压缩和清空缓冲区。通过示例展示了`position`、`limit`和`mark`属性的变化过程,帮助理解缓冲区的工作原理。
172 2
|
小程序 Java
小程序通过get请求提交数据到java后台
小程序通过get请求提交数据到java后台
135 0
|
Oracle Java 关系型数据库
Linux下JDK环境的配置及 bash: /usr/local/java/bin/java: cannot execute binary file: exec format error问题的解决
如果遇到"exec format error"问题,文章建议先检查Linux操作系统是32位还是64位,并确保安装了与系统匹配的JDK版本。如果系统是64位的,但出现了错误,可能是因为下载了错误的JDK版本。文章提供了一个链接,指向Oracle官网上的JDK 17 Linux版本下载页面,并附有截图说明。
Linux下JDK环境的配置及 bash: /usr/local/java/bin/java: cannot execute binary file: exec format error问题的解决
|
开发工具 数据安全/隐私保护
【Azure Developer】使用MSAL4J 与 ADAL4J 的SDK时候,遇见了类型冲突问题 "java.util.Collections$SingletonList cannot be cast to java.lang.String"
【Azure Developer】使用MSAL4J 与 ADAL4J 的SDK时候,遇见了类型冲突问题 "java.util.Collections$SingletonList cannot be cast to java.lang.String"
294 0
|
安全 Java 数据库连接
|
Java 开发工具
开发工具系类 之 Cannot determine path to ‘tools.jar‘ library for 17 (D:/Program Files/Java/jdk-17.0.9)
这篇文章讲述了作者在升级JDK至17版本后遇到IDEA无法识别`tools.jar`的问题,并提供了两种解决方法:升级IDEA版本或降低JDK版本,并提供了相关版本的IDEA兼容性信息。
开发工具系类 之 Cannot determine path to ‘tools.jar‘ library for 17 (D:/Program Files/Java/jdk-17.0.9)
|
JSON 前端开发 fastjson
成功解决:java.util.LinkedHashMap cannot be cast to com.zyz.bookshopmanage.pojo.GoodsInfo
这篇文章讲述了在Java后端开发中遇到的类型转换错误,即无法将`java.util.LinkedHashMap`转换为`com.zyz.bookshopmanage.pojo.GoodsInfo`对象的问题。文章提供了解决这个问题的两种方法:一是将对象转换为JSON字符串再反序列化为对象,二是通过在项目的pom文件中引入fastjson库来简化转换过程。最后,文章展示了成功转换对象的代码示例。
成功解决:java.util.LinkedHashMap cannot be cast to com.zyz.bookshopmanage.pojo.GoodsInfo
|
Java 数据库连接 mybatis
成功解决:java.lang.Integer cannot be cast to java.lang.Long
这篇文章讨论了Java中常见的类型转换错误,包括Integer转Long、Integer转String以及在MyBatis中Map接收查询结果时的类型不匹配问题,并提供了相应的解决方法。