第三方工具POI,由于Java的跨平台特性,所以Java没有直接操作excel文件的库支持。在自动化测试,有些我们的测试数据是放到excel文件中,所以需要懂得如何操作获取excel内的内容。

下载POI

打开网站http://poi.apache.org/download.html,选择下面4.1.0版本下载。

选择ZIP包下载。

下载完后解压,文件结构如下

2. 把POI文件添加在你Selenium当前项目的library中

先新建一个文件夹,把解压出来的所有的xx.jar都放在新的文件夹,然后右键你的eclipse工程> Build path > Configure build path > 点击lib  > Add external jar,新建文件夹内所有的xxx.jar都选中。

或者,你只需要以下几个jar文件就可以。

注意,这些jar文件不在同一个路径,你需要到不同路径去拷贝复制到一个新文件夹,然后把这个文件夹的所有jar文件拷贝到你eclipse项目下的Files文件夹,需要右键你工程,新建一个叫Files的文件夹。我的项目,采取这种方法,我不希望拷贝全部jar到项目lib中。

3. 准备一个test-data.xlsx文件

桌面新建一个test_data.xlsx,然后输入如下内容,并且把这个文件放到eclipse项目中。

4.如果是maven管理的项目,添加依赖如下:

<dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>4.1.0</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>4.1.0</version></dependency>

5.新建一个ReadExcel.java的文件,输入如下代码。

import java.io.File;
import java.io.FileInputStream;import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;public class ReadExcel {
public static void main(String[] args) {try{// 指定excel的路径File src = new File(".\\Files\\test_data.xlsx");// 加载文件FileInputStream fis = new FileInputStream(src);// 加载workbook@SuppressWarnings("resource")XSSFWorkbook wb=new XSSFWorkbook(fis);//加载sheet,这里我们只有一个sheet,默认是sheet1XSSFSheet sh1= wb.getSheetAt(0);// 开始读取第一行第一列的数据System.out.println(sh1.getRow(0).getCell(0).getStringCellValue());// 读取第一行第二列内容System.out.println(sh1.getRow(0).getCell(1).getStringCellValue());// 读取第二行第二列内容System.out.println(sh1.getRow(1).getCell(0).getStringCellValue());// 读取第二行第二列内容System.out.println(sh1.getRow(1).getCell(1).getStringCellValue());// 获取实际总行数System.out.println(sh1.getPhysicalNumberOfRows());// 获取实际总列数System.out.println(sh1.getPhysicalNumberOfRows());} catch (Exception e){System.out.println(e.getMessage());}}
}

6.运行结果

lixi
123456abc
zhanganli
123456abc
2
2

我尝试找了很久,发现有获取excel内sheet总行数的方法,我说的行是值水平上一行数据,叫行。但是没有获取总列数的方法。POI确实没有获取总列数方法。上面的测试文件一共有4行2列数据。

7.换成循环打印excel内数据

由于我们知道获取总行数的方法,至于列数,我们只能事先确定,例如上面事先确定是2列,但是不确定有多少行。这个只是循环遍历当前sheet的内所有有数据的单元格。

import java.io.File;
import java.io.FileInputStream;import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;public class ReadExcel {public static void main(String[] args) {try {// 指定excel的路径File src = new File(".\\Files\\test_data.xlsx");// 加载文件FileInputStream fis = new FileInputStream(src);// 加载workbook@SuppressWarnings("resource")XSSFWorkbook wb = new XSSFWorkbook(fis);// 加载sheet,这里我们只有一个sheet,默认是sheet1XSSFSheet sh1 = wb.getSheetAt(0);// i 控制行for (int i = 0; i < sh1.getPhysicalNumberOfRows(); i++) {// j是控制列,我们上面数据是2列for (int j = 0; j < 2; j++) {System.out.println(sh1.getRow(i).getCell(j).getStringCellValue());}}} catch (Exception e) {System.out.println(e.getMessage());}}
}

8. 写入内容到excel

例如,我们需要在上面test-data.xlsx文件第三列标上Fail或者Pass,请看下面脚本如何实现。

package MavenDemo.Test;import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;public class ReadExcel {public static void main(String[] args) {try {// 指定excel的路径File src = new File(".\\Files\\test_data.xlsx");// 加载文件FileInputStream fis = new FileInputStream(src);// 加载workbook@SuppressWarnings("resource")XSSFWorkbook wb = new XSSFWorkbook(fis);// 加载sheet,这里我们只有一个sheet,默认是sheet1XSSFSheet sh1 = wb.getSheetAt(0);//           // 开始读取第一行第一列的数据
//          System.out.println(sh1.getRow(0).getCell(0).getStringCellValue());
//          // 读取第一行第二列内容
//          System.out.println(sh1.getRow(0).getCell(1).getStringCellValue());
//          // 读取第二行第二列内容
//          System.out.println(sh1.getRow(1).getCell(0).getStringCellValue());
//          // 读取第二行第二列内容
//          System.out.println(sh1.getRow(1).getCell(1).getStringCellValue());
//
//          // 获取实际总行数
//          System.out.println(sh1.getPhysicalNumberOfRows());//            // i 控制行
//          for (int i = 0; i < sh1.getPhysicalNumberOfRows(); i++) {
//              // j是控制列,我们上面数据是2列
//              for (int j = 0; j < 2; j++) {
//
//                  System.out.println(sh1.getRow(i).getCell(j).getStringCellValue());
//              }
//          }// 写入excel数据sh1.getRow(0).createCell(2).setCellValue("Pass");sh1.getRow(1).createCell(2).setCellValue("Fail");// 保存文件FileOutputStream fout = new FileOutputStream(new File(".\\Files\\test_data.xlsx"));// 覆盖写入内容wb.write(fout);// 关闭文件fout.close();} catch (Exception e) {System.out.println(e.getMessage());}}
}

运行完后,手动打开test-data.xlsx,效果如下

Selenium利用POI读写excel文件相关推荐

  1. java读写excel文件poi_Java利用POI读写Excel文件工具类

    本文实例为大家分享了Java读写Excel文件工具类的具体代码,供大家参考,具体内容如下 package com.test.app.utils; import java.io.File; import ...

  2. 利用POI读取excel文件(java)

    利用POI读取excel文件(java) 摘要:利用java读取excel文件,读取文件并获取文件中每一个sheet中的值. 一.需要提前导入的包: import java.io.File;impor ...

  3. java利用poi读取excel_java利用POI读取excel文件的方法

    摘要:利用java读取excel文件,读取文件并获取文件中每一个sheet中的值. 一.需要提前导入的包: import java.io.File; import java.io.FileInputS ...

  4. 使用poi读写excel文件

    使用poi读写excel文件 Posted on 2011 年 03 月 16 日 by 苍之涛 今天一个同学需要处理一个excel文件,于是我便在网上搜了一下方法,顺便自己研究一下.刚刚参考网上资料 ...

  5. Java:apache.poi读写Excel文件

    依赖 <dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</ar ...

  6. java poi 生成excel_利用POI生成EXCEL文件的方法实例

    一.背景 Apache POI 是创建和维护操作各种符合Office Open XML(OOXML)标准和微软的OLE 2复合文档格式(OLE2)的Java API.用它可以使用Java读取和创建,修 ...

  7. java excel 逐行读取_java利用poi读取Excel文件

    java读取Excel文件,笔者认为:从结构上来看,Excel文件是由一个一个的单元格组成的,有点像细胞cell,逐行的排列.那么我们读的时候也应该逐行逐行的读,从左到右的寻找每一个cell. 直播电 ...

  8. java excel 导入 加校验_Java 利用POI进行excel文件导入时校验数据,并且追加错误批注...

    首先拿到前端file控件上传的excel文件,到后台接收!拿到excel这就不多说了网上很多demo的,下面直接说校验单元格追加批注信息的 private void setpz(Workbook wo ...

  9. java 读取excel 合并单元格_利用java读写Excel文件、合并单元格

    一般的页眉页脚都分为三个部分,左,中,右三部分,利用如下代码可实现插入页眉页脚 java 代码publicstaticvoidsetHeader(WritableSheet dataSheet,Str ...

最新文章

  1. 一个数里有那些约数用c++怎么做_嵌入式就业的那些事~
  2. 基于面向服务体系架构(SOA)和面向资源体系架构(ROA)的业务组件模型
  3. ssh反向主动连接 及脚本加密
  4. Git之深入解析Git的安装流程与初次运行Git前的环境配置
  5. 导入不了css,CSS不导入。
  6. MyBatis动态SQL底层原理分析 与 JavaScript中的Date对象,以及UTC、GMT、时区的关系...
  7. 【BZOJ 3831】【Poi2014】Little Bird(单调队列优化dp)
  8. nginx自定义日志
  9. AI时代学习新的技术,方向为计算机视觉--欢迎来我的简书blog拔草
  10. adams怎么做往复运动_关于HiFi | 在家里听音乐看电影,喇叭应该怎么选?
  11. Android 学习笔记--android基本
  12. 【数据结构和算法】哈希表详解
  13. docker 错误:Error response from daemon: cannot stop container: connect: connection refused: unknown...
  14. 一个月10起融资,宠物经济正在掏空年轻人的钱包
  15. python selenium 点击加载更多_Python Selenium 疑难杂症解方(三): 点击
  16. 拒绝平庸,这10个鲜为人知的实用网站,让你受益无穷!
  17. Word2vec使用手册
  18. 大部分erp系统都是java和.net甚至还有asp,为什么鲜有php的erp?
  19. 用友NC系统考勤机自动同步方案(适合大型商超)
  20. Oracle 游标遍历 显式游标 静态游标 OPEN v_cur(); WHILE v_cur%FOUND LOOP; LOOP FETCH v_cur INTO v_row

热门文章

  1. MySQL乱码问题如何排查
  2. 高薪必备|Redis 基础、高级特性与性能调优
  3. 解锁不可见索引新特性,处理ORA-01555故障
  4. SimpleDateFormat类的安全问题,这6个方案总有一个适合你
  5. 支撑1300+矿井监控,华为云数据库助力打造智能矿山
  6. 教你如何用Keras搭建分类神经网络
  7. 想了解物联网应用的自动部署,看这篇就够了
  8. 【华为云技术分享】Linux内核编程环境 (2)
  9. 【我的物联网成长记11】8招带你玩转规则引擎
  10. Python不再为字符集编码发愁,使用chardet轻松解决你的困扰。