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

如何使用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)。
  • 原代码问题修复:修正了While拼写错误,替换了未定义的columnsToRead变量,补充了单元格数据读取的核心逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 03:42:42