【发布时间】:2019-01-11 00:55:12
【问题描述】:
我正在使用 excel 为我的测试自动化脚本输入数据,当我知道要读取的确切行和列时,我可以从 excel 中读取数据。我面临的挑战是当我在工作表中合并单元格时。例如。 Test data excel sample
这里 ScriptName 和 Iteration 是我的主键,用于标识我的脚本的一组唯一数据。 所以我的问题是:
- 我想获取关于 ScriptName 的所有 ReferenceSetName,以及 Iteration 即登录脚本,Iteration 1:我必须获取 ABC1 Ref set、ABC2 Ref set、ABC3 Ref set李>
- 我想获取关于 ScriptName、Iteration 和 ReferenceSet 的所有 PackageName,即登录脚本、Iteration 1、ReferenceSet ABC1 Ref 集:我必须获取 ABC1、ABC2、ABC3
目前下面是方法 - getEntireCellValue() 我用来从 excel 中获取数据,我需要帮助来解决上述 2 个问题。任何形式的支持都非常感谢。
public void getExcelRowNum() {
boolean found = false;
String scriptCell = null, iterationCell = null;
try {
@SuppressWarnings("rawtypes")
Iterator iterator = sheet.rowIterator();
while (iterator.hasNext()) {
Row row = (Row) iterator.next();
scriptCell = row.getCell(1).toString().trim();
iterationCell = row.getCell(2).toString().trim();
if (row.getCell(2).getCellTypeEnum() == CellType.NUMERIC)
iterationCell = iterationCell.substring(0, iterationCell.indexOf(".")).trim();
if ((scriptCell.equals(scriptName) && iterationCell.equals(String.valueOf(iteration).trim()))
|| (scriptCell.equals(scriptName) && Integer.parseInt(iterationCell) == iteration)) {
rowNum = row.getRowNum();
found = true;
break;
}
}
if (rowNum == -1 || found == false)
throw new Exception("Please check the test name: " + scriptName + " or the iteration: " + iteration
+ " in the test data sheet");
row = sheet.getRow(0);
}
catch (Exception e) {
e.printStackTrace();
}
}
public void getExcelColNum(String colName) {
boolean found = false;
try {
for (int i = 0; i < row.getLastCellNum(); i++) {
if (row.getCell(i).getStringCellValue().trim().equals(colName.trim())) {
col_Num = i;
found = true;
break;
}
}
if (col_Num == -1 || found == false)
throw new Exception("Please check the column name: " + colName + " in the test data sheet");
}
catch (Exception e) {
e.printStackTrace();
}
}
public void getCell() {
try {
row = sheet.getRow(rowNum);
cell = row.getCell(col_Num);
}
catch (Exception e) {
e.printStackTrace();
}
}
//Prior to calling this method. I am connecting to the excel sheet which
is in .xlsx or xls format
public String getEntireCellValue(String sheetName, String colName) {
try {
sheet = workbook.getSheet(sheetName);
getExcelRowNum();
getExcelColNum(colName);
getCell();
if (cell.getCellTypeEnum() == CellType.STRING)
return cell.getStringCellValue().trim();
else if (cell.getCellTypeEnum() == CellType.BLANK)
return null;
}
catch (Exception e) {
e.printStackTrace();
return null;
}
}
public int getNumOfMergedRows() {
int rowsMerged = 0;
try {
for(int i = 0; i < sheet.getNumMergedRegions(); i++) {
CellRangeAddress range = sheet.getMergedRegion(i);
if (range.getFirstRow() <= rowNum && range.getLastRow() >=
rowNum) {
++rowsMerged;
}
}
System.out.println("Number of rows merged are: " + rowsMerged);
}
catch (Exception e) {
e.printStackTrace();
}
return rowsMerged;
}
附:我在这里做的是,我正在尝试获取脚本的合并行数,例如为登录脚本合并 6 行,然后在这 6 行中查找单元格数以获得参考集名称(3 个单元格)。 注意:当我调用上述方法 - getNumOfMergedRows() 来确定为登录脚本合并的行数时,我得到 4 作为输出而不是 6。
【问题讨论】:
-
if 条件下 rowNum 变量的值是多少?
-
添加了我用来确定 rowNum 的代码。注意:所有变量都是实例变量
标签: java excel selenium automated-tests apache-poi