在自动化测试过程中,我将用例写到了 excel 表中,所以在执行用例时,需要读取本地的 excel 表格。
有两种方式 POI 和 Jxl,都可以读取 excel 文档,区别:
我选了 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)。