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;
}



相关文章
|
5月前
|
Java
你还不知道怎么用Java代码实现发送post请求、get请求吗?
你还不知道怎么用Java代码实现发送post请求、get请求吗?
|
6月前
|
缓存 网络协议 前端开发
【Java】GET 和 POST 请求的区别
【Java】GET 和 POST 请求的区别
|
6月前
|
Java Spring
【Java异常】java.lang.ClassCastException: java.io.NotSerializableException cannot be cast to java.lang.S
【Java异常】java.lang.ClassCastException: java.io.NotSerializableException cannot be cast to java.lang.S
32 0
|
5月前
|
JSON Java 数据格式
Java如何发起http的get请求的实现
Java如何发起http的get请求的实现
java.lang.Error: Unresolved compilation problem: The type List is not generic; it cannot be parame
java.lang.Error: Unresolved compilation problem: The type List is not generic; it cannot be parame
|
2月前
|
监控 IDE Java
Java项目调试实战:如何高效调试Spring Boot项目中的GET请求,并通过equalsIgnoreCase()解决大小写不一致问题
Java项目调试实战:如何高效调试Spring Boot项目中的GET请求,并通过equalsIgnoreCase()解决大小写不一致问题
40 0
|
3月前
|
XML Java Maven
nested exception is java.io.FileNotFoundException: class path resource [springmvc.xml] cannot be ope
nested exception is java.io.FileNotFoundException: class path resource [springmvc.xml] cannot be ope
55 0
nested exception is java.io.FileNotFoundException: class path resource [springmvc.xml] cannot be ope
|
1月前
|
网络安全
ssh报错java.lang.ClassCastException: com.sun.proxy.$Proxy6 cannot be cast to org.service.impl.EmpServi
ssh报错java.lang.ClassCastException: com.sun.proxy.$Proxy6 cannot be cast to org.service.impl.EmpServi
10 1
|
6月前
|
Java Docker 微服务
【Java异常】Caused by: java.lang.IllegalArgumentException: method GET must not have a request body
【Java异常】Caused by: java.lang.IllegalArgumentException: method GET must not have a request body
58 1
|
6月前
|
Java 关系型数据库 MySQL
【Java异常】java.sql.SQLExcetion:Cannot convert value “0000-00-00 00:00:00” from column 9 to TIMESTAMP
【Java异常】java.sql.SQLExcetion:Cannot convert value “0000-00-00 00:00:00” from column 9 to TIMESTAMP
45 0