如何使用Selenium Java读取Excel第一列所有行?无表头Excel中A列所有行的读取方案
解决Selenium Java读取Excel指定列数据的问题
我来帮你完善代码,搞定这两个Excel列数据读取的需求:
1. 读取Excel第一列的所有行数据(含表头场景)
如果你的Excel带表头,一般会跳过第一行表头,读取后续所有行的第一列数据;要是不需要跳过表头,直接从第一行开始读就行。
2. 读取无表头Excel中A列的所有行数据
因为没有表头,直接指定A列(对应POI里的列索引0),从第一行开始读取所有行的该列数据就好。
完整修正后的代码
import org.apache.poi.ss.usermodel.*; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import java.io.File; import java.io.FileInputStream; import java.util.ArrayList; import java.util.Iterator; import java.util.List; // 假设这是你的Step Definition类 public class ExcelVerificationSteps { private Workbook wb; @Then("Verify logs for enf \"([^\"]*)\" from the \"([^\"]*)\" sheet$") public void verifyLogs(String EnfID, String FileName) throws Exception { Sheet sheet = getFilename(FileName); // 需求2:无表头,读取A列(对应索引0)所有行数据 List<String> columnDataList = readExcelColumn(sheet, 0, false); // 这里可以添加你的验证逻辑,比如检查EnfID是否在读取到的数据中 if (columnDataList.contains(EnfID)) { System.out.println("EnfID " + EnfID + " 在Excel列中找到啦"); } else { System.out.println("EnfID " + EnfID + " 没在Excel列中找到"); } } /** * 读取Excel指定列的数据 * @param sheet 目标Sheet * @param columnIndex 列索引(A列=0,B列=1...) * @param skipHeader 是否跳过表头行 * @return 列数据列表 * @throws Exception */ private List<String> readExcelColumn(Sheet sheet, int columnIndex, boolean skipHeader) throws Exception { List<String> columnData = new ArrayList<>(); Iterator<Row> rowIt = sheet.rowIterator(); // 如果需要跳过表头,先移动到下一行 if (skipHeader && rowIt.hasNext()) { rowIt.next(); } while(rowIt.hasNext()){ // 修正了原代码里的While拼写错误 Row row = rowIt.next(); // 获取指定列的单元格 Cell cell = row.getCell(columnIndex); if (cell != null) { // 根据单元格类型处理数据,避免类型转换报错 switch (cell.getCellType()) { case STRING: columnData.add(cell.getStringCellValue()); break; case NUMERIC: // 数字类型转成字符串(比如ID可能是数字格式) columnData.add(String.valueOf(cell.getNumericCellValue())); break; case BOOLEAN: columnData.add(String.valueOf(cell.getBooleanCellValue())); break; default: columnData.add(""); // 空或其他类型默认存空字符串 break; } } else { columnData.add(""); // 空单元格也存空字符串 } } return columnData; } public Sheet getFilename(String FileName) throws Exception { String filePath = "C://Filepath//"; // 修正路径拼接,避免重复斜杠的问题 File file = new File(filePath + FileName); FileInputStream inputStream = new FileInputStream(file); wb = new XSSFWorkbook(inputStream); Sheet sheet = wb.getSheet("Logs"); // 关闭输入流,防止资源泄漏 inputStream.close(); return sheet; } }
关键细节说明
- 列索引对应关系:Excel的A列对应POI中的
0,B列对应1,以此类推,所以读取A列直接用索引0就行。 - 单元格类型处理:Excel单元格有字符串、数字、布尔等不同类型,加个类型判断能避免读取时出现类型转换异常。
- 资源管理:加了
inputStream.close()关闭文件输入流,防止资源浪费。 - 灵活的读取方法:
readExcelColumn方法支持是否跳过表头,同时满足你两个需求:- 需求1(读取第一列所有行,含表头):调用
readExcelColumn(sheet, 0, true)(跳过表头)或readExcelColumn(sheet, 0, false)(包含表头)。 - 需求2(无表头读A列):直接调用
readExcelColumn(sheet, 0, false)。
- 需求1(读取第一列所有行,含表头):调用
- 原代码问题修复:修正了
While拼写错误,替换了未定义的columnsToRead变量,补充了单元格数据读取的核心逻辑。
内容的提问来源于stack exchange,提问作者tummalsr
相关产品推荐
相关产品推荐

