Selenium 我的自动化测试历程之读取 excel 表格

喵喵 · 2016年12月13日 · 最后由 喵喵 回复于 2016年12月21日 · 1885 次阅读

在自动化测试过程中,我将用例写到了 excel 表中,所以在执行用例时,需要读取本地的 excel 表格。

有两种方式 POI 和 Jxl,都可以读取 excel 文档,区别:

  1. POI:
    优点:效率高,支持公式,宏,能够修饰单元格属性,支持字体、数字、日期操作
    缺点:不成熟,代码不能跨平台
  2. Jxl
    优点:中文支持非常好;Jxl 是纯 javaAPI 可以跨平台;生成 Excel 2000 标准格式;支持字体、数字、日期操作;能够修饰单元格属性;支持图像和图表,但是这套 API 对图形和图表的支持很有限,而且仅仅识别 PNG 格式
    缺点:效率低,图片支持不完善,对格式的支持不如 POI 强大,不支持 excel2010

我选了 Jxl,并不是已经体会到了二者的优缺点,而是研究了将近 1 天 POI,不会用,哈哈哈,而且看网上有的说 POI 可能会遇到莫名其妙的 bug,我信了。。。。所以选了 Jxl。
可以点击这里下载。

直接上代码了各位,代码中有注释,文字就不多写了

需要注意 1:的是本地的 excel 文件是 xls 的 ,这个类的读取方法(f_readexcel)只支持每个单元格的格式是文本类型;

需要注意 2: 传入的 filePath 字符串需要包含具体要打开的文件如:d:/1.txt


import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;

import jxl.Cell;
import jxl.CellType;
import jxl.JXLException;
import jxl.Sheet;
import jxl.Workbook;

public class ReadExcel {

    //读取指定路径下的文件,具体要到某个文件(filePath),指定sheet(sheet)中的excel表格中每一行,将放到数组中,返回
    public  String[][] f_readexcel(String filePath,String sheetname) throws IOException, JXLException{
        //输入流,声明读取变量is 用户读取excel表格      
            InputStream is=null;
        //构建Workbook对象
            Workbook workbook=null;
        //传入filepath中描述的路径,实例化is。
            is=new FileInputStream(filePath);
        //将is中读取到的excel表格赋值给workbook
            workbook=Workbook.getWorkbook(is);
        //声明变量sheet,将workbook中的sheet名为sheetname的表格读取到sheet中
            Sheet sheet=workbook.getSheet(sheetname);
        //声明一个数组,用于存放sheet中的值,长度根据sheet中的实际长度定义
            String cases[][] = new String[sheet.getRows()][sheet.getColumns()];
            int i;
            int j;
        //通过两层循环,将sheet中的数据读取到数组中
            //遍数组的历行
            for(i=0;i<sheet.getRows();i++){
                //遍数组的历列
                for(j=0;j<sheet.getColumns();j++){
                    //声明一个单元格变量,通过getCell(j,i)得到单元格中的值,读取每列每行,getCell(j,i)前面的j是列,i是行
                    Cell cellA1=sheet.getCell(j,i);
                    //如果当前单元格的格式是label(文本类型)类型的,就读取到数组中,需要保证excel表中数字类型的单元格手动调整成文本类型
                    if (cellA1.getType().equals(CellType.LABEL)){
                        //获取string类型单元格的数据
                        cases[i][j]=cellA1.getContents();
                    }
                }
            }
            //将excel表关闭
            workbook.close();
            //将输入流关闭
            is.close();
            //返回已经读取到sheet数据的数组
            return cases;
              }
        }

问题汇总

问题: 运行报错:Unable to recognize OLE stream

解决: 2007 文件 (.xlsx) 不支持,只支持 excel 2003 (.xls)。

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
共收到 2 条回复 时间 点赞
喵喵 我工作中的 API 测试 (TestNG,Oauth) 中提及了此贴 01月18日 16:02

#1 楼 @tllong 哦哦,我注释写的不好,filePath 的值,是需要传入具体某个文件的,比如:d:/1.txt

Exception in thread "main" java.io.FileNotFoundException: E:\seleniumwork\workspace\src (拒绝访问。)
at java.io.FileInputStream.open(Native Method)
at java.io.FileInputStream.(Unknown Source)
at java.io.FileInputStream.(Unknown Source)
at FileReadExcel.f_readexcel(FileReadExcel.java:19)
at FileReadExcel.main(FileReadExcel.java:51)
调用时会拒绝访问

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册