使用POI读取Excel表格中数据
使用POI读取Excel表格中数据
已经在 使用POI读取Excel表格中数据2优化。(https://blog.csdn.net/qq\_36570464/article/details/107053355)
https://blog.csdn.net/qq\_36570464/article/details/107053355
背景
自己最近在研究自动换测试,在进行参数化时候,会对把用例写在Excel表格中,然后通过Java来取表格中数据,进而进行参数化。
问题
那么,我们的表格可能回事这么一个情况:
表格中的单元格里出现没有输入的情况(图片中红色部分),如何通过POI进行读取,或者如何处理?预期结果不用考虑。
代码
只贴了获取表格中数据代码,其他不是本文内容。
@DataProvider
public Object[][] getParamExcel() throws IOException {
File file = new File("/param.xlsx");
XSSFWorkbook workbook = new XSSFWorkbook(new FileInputStream(file));
//获得表格中的第0个Sheet
XSSFSheet sheet = workbook.getSheetAt(0);
//得到有多少行
int numberRows = sheet.getPhysicalNumberOfRows();
//获得第一行有多少列
int numberCells=sheet.getRow(0).getPhysicalNumberOfCells();
//获得第一行第一列所在的位置
int numberFirst = sheet.getRow(0).getFirstCellNum();
//创建一个Object二维数组,用来作为参数返回。
//因为第一行是说明,则跳过第一行,所以行数减一
Object[][] data = new Object[numberRows - 1][];
//创建一个保存列的对象
XSSFRow row = null;
// 因为第一行是说明,则跳过第一行,所以行数减一
//sheet.getFirstRowNum() 获得第一行开始的位子,可能不从第一行开始(i=0)
//numberRows - 1 表示除去第一行说明,实际数据有多少行
for (int i = sheet.getFirstRowNum(); i < numberRows - 1; i++) {
//得到第i+1行,即第二行的实际数据
row = sheet.getRow(i + 1);
// 创建一个字符数组,用来保存一行中,每一列的数据
String[] strings = new String[numberCells];
//row.getFirstCellNum() 获得一行中实际数据所在列,不一为第一列,如图第4行
for (int j = numberFirst; j < numberCells; j++) {
// 数据是通过key-value方式保存,遍历是会出现空指针异常(图中红色部分)。
//出现的多余没有输入的单元格会出现异常,并对没有数据输入的单元格(红色部分)是进行空字符处理
try {
//设置为字符类型,这里主要是因为在获取Excel数据时,
//数字出现小数点,主要用于不加小数点,可以简单这么理解。大家可以看一下源码就知道什么原因了
row.getCell(j).setCellType(CellType.STRING);
} catch (NullPointerException e) {
//出现空指针异常,说明数据没有输入,即空数据,做空字符串处理
strings[j] = "";
//跳过当前循环
continue;
}
// 保存数据
strings[j] = row.getCell(j).getStringCellValue();
}
//把获得数据添加到data
data[i] = strings;
}
return data;
}
后言
当然,该方法不是一个很好的方法,有些还有些特殊情况处理不了。
如果你有什么改进或者更好的方法,欢迎留言。
还没有评论,来说两句吧...