我目前正从excel表中提取数据并使用testNG的dataProvider注释传递给我的测试。我从excel返回数据的代码如下。
public static Object [][] excelData(String filepath) throws Exception {
File excelFilePath = new File (filepath);
FileInputStream fis = new FileInputStream(excelFilePath);
HSSFWorkbook wb = new HSSFWorkbook(fis);
HSSFSheet ws = wb.getSheet("Data");
int rowNum = ws.getLastRowNum()+1;
int colNum = ws.getRow(0).getLastCellNum();
Object[][] data = new Object[rowNum][colNum];
for (int i=0; i<rowNum; i++){
HSSFRow row = ws.getRow(i);
for (int j=0; j<colNum; j++){
HSSFCell cell = row.getCell(j);
Object value =(Object) cellToString(cell);
data[i][j] = (Object)value;
// System.out.println("The value is " + value);
}
}
System.out.println(Arrays.deepToString(data));
return data;
}
public static Object cellToString(HSSFCell cell){
int type;
Object result;
type = cell.getCellType();
switch(type) {
case 0://numeric value in excel
result = cell.getNumericCellValue();
break;
case 1: //string value in excel
result = cell.getStringCellValue();
break;
case 2: //boolean value in excel
result = cell.getBooleanCellValue ();
break;
default:
throw new RuntimeException("There are not support for type with id ["+type+"] of cell");
}
return result;
}
目前的excel看起来如下
我需要根据最后一栏传递用户名和密码,如下所示
答案 0 :(得分:0)
您的代码目前正在读取所有单元格。
在excel文件中,可能有不同大小的列。如果只获得第一行的大小,则会丢失行的某些单元格值(大于第一行coulmn大小)。
而不是int colNum = ws.getRow(0).getLastCellNum();
,您应该编写自己的方法来查找最大的列大小,如下所示。请调用此方法int colNum = getMaxColumnNum(ws);
public static int getMaxColumnNum(HSSFSheet ws) {
int rowNum = ws.getLastRowNum() + 1;
int max = 0;
int temp = 0;
for (int i = 0; i < rowNum; i++) {
temp = ws.getRow(i).getLastCellNum();
if (max < temp)
max = temp;
}
return max;
}
此外,您的方法名称为cellToString()
,但它返回了Object,您应该使用getCellValue()
更改其名称。