You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Apache POI读取Excel报Cannot get a STRING value from a NUMERIC cell如何解决

问题根因

你调用String.valueOf()的逻辑完全不生效,因为报错是sheet.getRow(i).getCell(j).getStringCellValue()这一步触发的:当单元格格式为数值类型时,直接调用getStringCellValue()会直接抛出IllegalStateException,异常抛出后外层的String.valueOf()根本没有执行机会。

修复方案

你已经导入了CellType、NumberToTextConverter相关依赖,直接新增一个通用获取单元格值的私有方法,再替换原来的取值逻辑即可:

  1. 给ExcelUtils类新增以下私有工具方法
private static String getCellValue(Cell cell) {
    if (cell == null) {
        return "";
    }
    switch (cell.getCellType()) {
        case STRING:
            return cell.getStringCellValue();
        case NUMERIC:
            // 专门处理数值类型,避免科学计数法、小数精度问题
            return NumberToTextConverter.toText(cell.getNumericCellValue());
        case BOOLEAN:
            return String.valueOf(cell.getBooleanCellValue());
        case FORMULA:
            return cell.getCellFormula();
        default:
            return "";
    }
}
  1. 替换getTestDetails()方法中原来的取值逻辑
    把原来的
String value = String.valueOf(sheet.getRow(i).getCell(j).getStringCellValue());

替换为

String value = getCellValue(sheet.getRow(i).getCell(j));

额外优化点

你当前遍历行的判断条件i<lastRowNum会漏掉最后一行测试用例:sheet.getLastRowNum()返回的是最后一行的下标(从0开始计数),所以需要把条件修改为i<=lastRowNum才能读取全量测试用例。

内容的提问来源于stack exchange,提问作者enthusiasticCoder

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 16:06:00