700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 使用POI读取Excel表格中数据

使用POI读取Excel表格中数据

时间:2019-09-11 22:50:43

相关推荐

使用POI读取Excel表格中数据

使用POI读取Excel表格中数据

已经在 使用POI读取Excel表格中数据2优化。(/qq_36570464/article/details/107053355)

/qq_36570464/article/details/107053355

背景

自己最近在研究自动换测试,在进行参数化时候,会对把用例写在Excel表格中,然后通过Java来取表格中数据,进而进行参数化。

问题

那么,我们的表格可能回事这么一个情况:

表格中的单元格里出现没有输入的情况(图片中红色部分),如何通过POI进行读取,或者如何处理?预期结果不用考虑。

代码

只贴了获取表格中数据代码,其他不是本文内容。

@DataProviderpublic Object[][] getParamExcel() throws IOException {File file = new File("/param.xlsx");XSSFWorkbook workbook = new XSSFWorkbook(new FileInputStream(file));//获得表格中的第0个SheetXSSFSheet 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();}//把获得数据添加到datadata[i] = strings;}return data;}

后言

当然,该方法不是一个很好的方法,有些还有些特殊情况处理不了。

如果你有什么改进或者更好的方法,欢迎留言。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。