如何使用 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.
代码
这是我想知道的:
- 有没有办法使用 Java 的 Apache-poi 扩展来实现这一点?
- 我可以使用 apache-poi 扩展中的哪些函数库?
- 我应该在我的实用程序包中使用什么代码?
提前致谢:)
为了解决这个问题,你需要反转数据获取逻辑。
所以这里我们首先需要获取列数据,然后遍历它所有的行。
即。 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;
}
Example of Excel Data
我需要使用单元格引用属性(以蓝色突出显示)读取上面的示例数据
sheet中的table保持列顺序。
例如,如果 table 类似于:
名字 | 尼克 | 杰克 |
姓氏 | 愤怒 | 瑞安 |
个人邮箱 | 尼克-弗瑞@example.com | 杰克瑞安@example.com |
然后我希望脚本 运行 用于:
名字 | 尼克 |
姓氏 | 愤怒 |
个人邮箱 | 尼克-弗瑞@example.com |
然后 运行 用于:
名字 | 杰克 |
姓氏 | 瑞安 |
个人邮箱 | 杰克瑞安@example.com |
并且可以使用相应的属性 (firstName, lastName, personalEmail) 在我的 ExcelReader class.
代码这是我想知道的:
- 有没有办法使用 Java 的 Apache-poi 扩展来实现这一点?
- 我可以使用 apache-poi 扩展中的哪些函数库?
- 我应该在我的实用程序包中使用什么代码?
提前致谢:)
为了解决这个问题,你需要反转数据获取逻辑。 所以这里我们首先需要获取列数据,然后遍历它所有的行。
即。 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;
}