如何使用 Selenium 的 Apache POI 集成根据单元格属性(关键字)从 Excel sheet 读取单元格值

How do I read cell value from Excel sheet based on the cell attribute (keyword) using Apache POI integration for Selenium

Example of Excel Data

我需要使用单元格引用属性(以蓝色突出显示)读取上面的示例数据

sheet中的table保持列顺序。

例如,如果 table 类似于:

名字 尼克 杰克
姓氏 愤怒 瑞安
个人邮箱 尼克-弗瑞@example.com 杰克瑞安@example.com

然后我希望脚本 运行 用于:

名字 尼克
姓氏 愤怒
个人邮箱 尼克-弗瑞@example.com

然后 运行 用于:

名字 杰克
姓氏 瑞安
个人邮箱 杰克瑞安@example.com

并且可以使用相应的属性 (firstName, lastName, personalEmail) 在我的 ExcelReader class.

代码

这是我想知道的:

  1. 有没有办法使用 Java 的 Apache-poi 扩展来实现这一点?
  2. 我可以使用 apache-poi 扩展中的哪些函数库?
  3. 我应该在我的实用程序包中使用什么代码?

提前致谢:)

为了解决这个问题,你需要反转数据获取逻辑。 所以这里我们首先需要获取列数据,然后遍历它所有的行。

即。 Nick -> Fury -> nick-fury@example.com 然后移动到另一列并获取 Jack -> Ryan -> jack-ryan@example.com

截图:

重要提示:

This code is to fetch xls file data using POI, kindly change the code as per your requirement.

(1). HSSFWorkbook: This class has methods to read and write Microsoft Excel files in .xls format.

(2).XSSFWorkbook: This class has methods to read and write Microsoft Excel and OpenOffice xml files in .xls or .xlsx format.

代码:

@Test(dataProvider = "getExcelData")
    public void testSheet(String firstName, String lastName, String personalEmail) {

    System.out.println(firstName+"  "+lastName+" "+personalEmail);
}

@DataProvider
public Object[][] getExcelData(){
    String excelSheetPath = System.getProperty("user.dir")+"/data.xls";
    String sheetName = "Sheet1";
    return getExcelData(excelSheetPath, sheetName);
}

public Object[][] getExcelData(String excelSheetPath, String sheetName) {
    Object[][] arrayExcelData = null;
    try (
            FileInputStream fileStream = new FileInputStream(excelSheetPath)
    ) {
        HSSFWorkbook workbook = new HSSFWorkbook(fileStream);
        HSSFSheet sheet = workbook.getSheet(sheetName);
        Row row = sheet.getRow(0);
        int lastRowIndex = sheet.getLastRowNum() + 1;
        System.out.println("Last row index :" + lastRowIndex);
        int totalNoOfCols = row.getLastCellNum() - 1;
        System.out.println("Total columns :" + totalNoOfCols);

        arrayExcelData = new Object[totalNoOfCols][lastRowIndex];
        DataFormatter df = new DataFormatter();

        for (int i = 1; i <= totalNoOfCols ; i++) {
            for (int j = 0; j < lastRowIndex; j++) {
                row = sheet.getRow(j);
                Cell c = row.getCell(i);
                String cellData = df.formatCellValue(c);
                System.out.println(cellData);
                arrayExcelData[i-1][j] = cellData;
            }
            System.out.println("-----------");
        }
    } catch (Exception e) {
        e.printStackTrace();
        System.out.println(e.getMessage());
    }
    return arrayExcelData;
}