POI 读写Excel
来源:互联网 发布:linux 查看总cpu使用率 编辑:程序博客网 时间:2024/06/01 11:51
许多自动化测试工具都是支持数据驱动的,容许你去自动运行测试用例,输入和输出数据放在Excel 中,
如何从Excel 中读取数据
在Selenium 框架中可能需要从Excel 中读取测试数据,下面来介绍下用JAVA 如何读取Excel 中的数据
首先下载并导入以下jar 包
导入之后新建一个EXCEL 的包
再新建一个Read 的类
再在当前工程下新建一个TestData.xlsx 文件
之后在Sheet 1中增加以下内容
在编写代码之前我们先来理清下我肉眼是如何读到用户名信息的
1:第一步打开TESTDATA.XLSX文件
2:切换到Sheet1
3:光标移动到第二行
4:光标移动到第二行第二列
5: 读取二行二列中的值
在理清了上述流程之后,我们编写代码时也按这流程来写就行了
第一步实现打开EXCEL
在这里是用二进制文件流的方式处理文件
先创建文件流
FileInputStream ExcelFile=newFileInputStream(“Excel路径”)
ExcelWBook=newXSSFWorkbook(ExcelFile);
第二步切换到对应Sheet文件
ExcelWSheet=ExcelWBook.getSheet(SheetName);
第三步指定行号
ROW=ExcelWSheet.getRow(RowNum)
第四步指定列号
Cell= ROW. getCell(ColNum)
第五步:
读取单元格中的值
现在将以上步骤写到一个方法中就变成读取某个单元格中的值了
实现代码如下
现在结果已取到了
在上面是最理想的方式,实际上我们是要做一些异常的设想,比如我可能在读文件时文件不存在,系统要如何处理呢,比如指定的Sheet名不存在又要如何处理呢,还有指定行,指定列不存在如何处理呢,各单元格中存放的数据又有不同类型等等,这些我们都是需要做一些处理的,好了,下面就讲解下如何处理Excel中的异常
第一种异常
我现在将文件名的后缀删除掉,再次运行时肯定会报错,现在我们来试下
出现文件没找到异常,
那我们可以用Try{}Catch(FileNotFoundException){}去埔捉是否有该异常
现在我们考量如果Sheet1找不到的情形,现在我们再将代码修改下,将Sheet1改成Sheet10
执行后发现第30行是空值,为什么会空值呢,是因为他的前一行代码没有找到Sheet10的原因
所以这个时候我们可以在29行之后先判断下有没有空值,如果是空值就跳过不执行或抛错
在这找到空值就没有再执行32的内容了
同样的方式行号,与列号都有可能出现没找到的情形,我们将所有条件都加上
最终的代码是这样的
在获取单元格中的值时又会出不同数据格式
在这也需要做一次判断
上述代码结构不清,代码混乱,为了让代码简洁我们将代码实现分离,并用参数的方式传递Sheet名,行号,列号之类的
现在我们来改进下
将打开Excel的操作抽取出来
将指定行与列的一系统操作放在一个方法内,这种比较常见,经常需要按行按列读取数据
这样假如我要读取2行2列的数据,就可以用ReadData(1,1)获取到了
实际上我们有时可能会出现这种情况,每个Sheet中有很多行,很多列,事实上我也不可能全部像上面那样用常量方式取值,一般的做法是先找到我测试用例所在的行号,之后用在这一行去找其它相关的数据
那如何实现呢
第一步:先获取Sheet中最大行号
第二步:遍历所有行,匹配与指定测试用例相同的字符串,获得行号
第三步:依据行号用 ReadData(xxx,1)获得相关数据
代码实现如下:
第一,第二步的实现代码如下
到这里我们就基本上了解如何读取Excel了,那比如我们在测试过程中需要将结果保存起来如何办呢,这时我们会想到需要对Excel进行写操作,下面我来介绍如何写入Excel了
同样我们一开始先来想下手工写入数据流程
1:打开EXCEL
2:指定Sheet
3:指定行号
4:指定列号
5:写入数据
6:保存数据
了解了操作流程,我们就将思想转为成代码
其实1,2,3,4我们在读Excel时就已写过,但这里要注意下,我们在读Excel时是不是已有数据,那也就是说每个单元格中已有内容,我们用
getRow (行号)不是空值对吗,如果我们要往一个没有值的单元格写值时一开始那个行号是空值,所以我们第三步应改为创建一个行号,第四步改为创一个列号
创建行号我们可以用CreateRow(行号)
在创建行号时我们要想一个问題,我们一开始创建了第一行,并写入一个值到单元格中,比如我想写入一个结果到第一行第二个单元格时
也是先创建一行吗,如果再用创建方式生成第一行,那前一次写入的数据会不会不存在呢,实际上是会被删掉的,这个自已可以去试试
所以我们代码实现应是这样
一开始用getrow(1)如果反回的值是空值,那就用CreateRow的方式,如果不是空值我就用GetRow(1)
我们来看在苏宁易实际运行时如何获取用户名和密码的
- POI读写Excel文件
- POI读写Excel文件
- POI读写Excel文件
- POI读写Excel文件
- POI读写Excel文件
- POI读写Excel
- POI读写excel文件
- poi读写excel
- poi读写 excel
- Java读写Excel-POI
- 用POI读写Excel
- POI简单读写excel
- POI 读写Excel 范例
- poi读写Excel文件
- POI读写EXCEL
- POI读写海量Excel
- POI 读写 Excel
- poi读写excel数据
- C专家编程—分析signal函数的原型声明{void (*signal(int sig,void (*func)(int)))(int)}(2)
- hdoj 畅通工程再续prim
- hdoj-2095-Linearization of the kernel functions in SVM
- WebRtc libjingle_PeerConnection层(一) 显示本地视频
- MySQL数据库迁移(直接复制文件)
- POI 读写Excel
- cocos studio 将界面生成json 文件
- Python获取本机外网IP
- python循环遍历文件操作
- Angular ui-grid 2.0 与 3.0 版本区别
- ArcMap常用工具
- CSS3 HTML5动画
- searchBar背景框的取消
- js继承原理