java解析xlsx方法
新建一个包
创建一个方法
package com.app.utils;
import java.io.IOException;
import org.apache.poi.EncryptedDocumentException;
import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
import org.apache.poi.ss.formula.functions.Vlookup;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellType;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Row.MissingCellPolicy;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.usermodel.WorkbookFactory;
public class ExcelUtil {
/**
* 读取excel文档
*
* @param excelPath
* excel的路径
* @param startRow
* 读取的开始的行号
* @param endRow
* 结束的行号
* @param startCell
* 开始的列号
* @param endCell
* 结束的列号
*/
// 2 7 1 4 : 6行4列
// 2 8 2 4: 7行3列
public static Object[][] readExcel(String excelPath, int startRow, int endRow, int startCell, int endCell) {
// 创建一个二维数组,保存我们遍历的数据
Object[][] datas = new Object[endRow - startRow + 1][endCell - startCell + 1];
try {
// 得到一个工作簿--》面向接口编程
Workbook workbook = WorkbookFactory.create(ExcelUtil.class.getResourceAsStream(excelPath));
// 得到第一个sheet
Sheet sheet = workbook.getSheetAt(0);
// 循环获得每一行
for (int i = startRow; i <= endRow; i++) {
// 获得第i行
Row row = sheet.getRow(i - 1);
// 获得该行中的每一列
for (int j = startCell; j <= endCell; j++) {
// 获得第j列:把空的列作为一个空字符串的列
Cell cell = row.getCell(j - 1, MissingCellPolicy.CREATE_NULL_AS_BLANK);
// 设置cell的类型为String类型
cell.setCellType(CellType.STRING);
// 获得该列string类型的值
String value = cell.getStringCellValue();
// startRow 1000 endRow 1100
// startCell 20 endCell = 50
// 第一行
// 第一个列设值,i=1000,j=20:datas[0][0]=datas[?][?]
// 第二个列设值,i=1000,j=21:datas[0][1]=datas[?][?]
// 第三个列设值,i=1000,j=22:datas[0][2]=datas[?][?]
// 第二行
// 第一个列设值,i=1001,j=20:datas[1][0]=datas[?][?]
// 第二个列设值,i=1001,j=21:datas[1][1]=datas[?][?]
// 第三个列设值,i=1001,j=22:datas[1][2]=datas[?][?]
datas[i - startRow][j - startCell] = value;
// 当i+1的时候,到第二行去了
}
}
} catch (EncryptedDocumentException e) {
// TODO Auto-generated catch blockXAQ
e.printStackTrace();
} catch (InvalidFormatException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return datas;
}
/**
* 前瞻 1:项目的每一个功能对应一个excel文档
* 2:每个测试用例(检查点相同的测试用例)对应一个sheet
*
* @param excelPath
*/
public static void read2007Excel(String excelPath) {
try {
XSSFWorkbook workbook = new XSSFWorkbook(ExcelUtil.class.getResourceAsStream(excelPath));
XSSFSheet sheet = workbook.getSheetAt(0);
int lastRowNum = sheet.getLastRowNum();
for (int i = 0; i <= lastRowNum; i++) {
XSSFRow row = sheet.getRow(i);
// 最大的列号
int lastCellNum = row.getLastCellNum();
for (int j = 0; j <= lastCellNum; j++) {
XSSFCell cell = row.getCell(j, MissingCellPolicy.CREATE_NULL_AS_BLANK);
// 设置cell的类型为String类型
cell.setCellType(CellType.STRING);
// 获得该列string类型的值
String value = cell.getStringCellValue();
System.out.print(value + ",");
}
System.out.println("-------------");
}
// System.out.println("有"+lastRowNum+"行");
// System.out.println("有"+sheet.getRow(0).getLastCellNum()+"列");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void main(String[] args) {
/* Object[][] datas = readExcel("/register.xlsx", 2, 7, 1, 4);
for (Object[] objects : datas) {
System.out.println("--------");
for (Object object : objects) {
System.out.print(object);
System.out.print(",");
}
System.out.println();
}*/
read2007Excel("/login.xlsx");
}
}
以上是方法类
调用
/**
* 数据提供者对应方法,读取xlsx内的数据
* 从第几行开始 到第几行结束 从第几列开始 到第几列结束
* @return
*/
@DataProvider
public Object[][] getLoginDatas(){
Object[][] datas = ExcelUtil.readExcel("heduijiang_testcase.xlsx", 2, 9, 1, 3);
return datas;
}
/**
* 验证xlsx方法有没有问题
* @param args
*/
public static void main(String[] args){
Object[][] datas = ExcelUtil.readExcel("/heduijiang_testcase.xlsx", 2, 9, 1, 3);
for (Object[] objects : datas){
for (Object object : objects){
System.out.print(object);
}
}
}
@Test(dataProvider="getLoginDatas")//@Test表示测试方法,测试登录
public void f(String mobilephone, String pwd, String tips)