Selenium中使用for循环读取Excel数据时出现错误求助
问题分析与修复方案
我来帮你排查下这段读取Excel的代码里可能导致错误的几个关键点,以及对应的修复方案:
常见错误点梳理
- 资源关闭时机错误:你原本的代码里把
fis.close()放在循环内部?这会导致第一次循环就关闭了文件输入流,后续循环再操作Workbook时必然报错。而且手动关闭资源容易遗漏,最好用Java的try-with-resources语法自动管理。 - 单元格类型不匹配异常:直接调用
getStringCellValue()或getNumericCellValue()很容易踩坑——如果单元格实际是数字类型却调用字符串方法,或者反过来,都会抛出IllegalStateException。 - 空单元格/空行的空指针问题:如果Excel里某一行的某个单元格是空的,
getCell()会返回null,直接调用后续方法会触发空指针异常。
修正后的完整代码
@Test public void passTest() throws IOException { // 用try-with-resources自动管理文件输入流,无需手动close try (FileInputStream fis = new FileInputStream("F:\\drive f\\DemoReport.xlsx"); XSSFWorkbook wb = new XSSFWorkbook(fis)) { XSSFSheet sheet1 = wb.getSheetAt(0); // getLastRowNum返回最后一行的索引(从0开始),循环条件没问题 int rowcount = sheet1.getLastRowNum(); for (int i = 1; i <= rowcount; i++) { XSSFRow row = sheet1.getRow(i); // 先判断行是否为空(比如中间有空行) if (row == null) { continue; } // 处理单元格:先获取单元格,再判断类型,避免类型不匹配 String str = getCellValueAsString(row.getCell(2)); String str1 = getCellValueAsString(row.getCell(1)); // 处理数字单元格,先判断类型再转换 Double j = getCellValueAsDouble(row.getCell(3)); // 这里可以添加你的Selenium操作逻辑,比如使用str、str1、j这些数据 System.out.println("读取到数据:" + str1 + ", " + str + ", " + j); } } } // 工具方法:将单元格内容转为字符串,兼容各种类型 private String getCellValueAsString(XSSFCell cell) { if (cell == null) { return ""; } switch (cell.getCellType()) { case STRING: return cell.getStringCellValue(); case NUMERIC: // 如果是数字类型,转为字符串(比如整数或小数) return String.valueOf(cell.getNumericCellValue()); case BOOLEAN: return String.valueOf(cell.getBooleanCellValue()); case FORMULA: return cell.getCellFormula(); default: return ""; } } // 工具方法:将单元格内容转为Double,只处理数字类型 private Double getCellValueAsDouble(XSSFCell cell) { if (cell == null || cell.getCellType() != CellType.NUMERIC) { return null; // 或者根据你的需求返回默认值,比如0.0 } return cell.getNumericCellValue(); }
关键改进说明
- 自动资源管理:用
try-with-resources包裹FileInputStream和XSSFWorkbook,JVM会自动在代码块结束后关闭资源,避免泄漏。 - 单元格类型兼容:通过工具方法统一处理不同类型的单元格,避免直接调用类型方法导致的异常。
- 空值防护:先判断行和单元格是否为null,跳过空行或空单元格,避免空指针。
内容的提问来源于stack exchange,提问作者test squad
相关产品推荐
相关产品推荐

