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相关依赖,直接新增一个通用获取单元格值的私有方法,再替换原来的取值逻辑即可:
- 给
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 ""; } }
- 替换
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
相关产品推荐
相关产品推荐

