微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Selenium利用POI读写excel文件

第三方工具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,认是sheet1
			XSSFSheet 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,认是sheet1
			XSSFSheet 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,认是sheet1
			XSSFSheet 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,效果如下

 

 

 

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐