千家信息网

自动化excl学习笔记

发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,学习excl操作import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import ja
千家信息网最后更新 2026年10月31日自动化excl学习笔记

学习excl操作

import java.io.File;

import java.io.FileInputStream;

import java.io.FileOutputStream;

import java.io.IOException;

import java.text.DecimalFormat;

import java.util.ArrayList;

import java.util.List;


import org.apache.poi.hssf.usermodel.HSSFWorkbook;

import org.apache.poi.ss.usermodel.Row;

import org.apache.poi.ss.usermodel.Sheet;

import org.apache.poi.ss.usermodel.Workbook;

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;



/**

* 本类主要实现后缀为xlsx的 excel文件操作

*/

public class ExcelUtil {


private XSSFSheet ExcelWSheet; //excl单元格sheet页面

private XSSFWorkbook ExcelWBook; //整个excl对象

private XSSFCell Cell; // 列对象

private XSSFRow Row;// 行对象

private String filePath; // 文件路径


/** 构造方法 */

// 设定要操作的 Excel 的文件路径和 Excel 文件中的 sheet 名称

// 在读写excel的时候,均需要先调用此方法,设定要操作的 excel 文件路径和要操作的 sheet 名称

public ExcelUtil(String Path, String SheetName) throws Exception {

FileInputStream ExcelFile;


try {

// 实例化 excel 文件的 FileInputStream 对象

ExcelFile = new FileInputStream(Path);

// 实例化 excel 文件的 XSSFWorkbook 对象

ExcelWBook = new XSSFWorkbook(ExcelFile); //整个文件

// 实例化 XSSFSheet 对象,指定 excel 文件中的 sheet 名称,后续用于 sheet 中行、列和单元格的操作

ExcelWSheet = ExcelWBook.getSheet(SheetName);


} catch (Exception e) {

throw (e);

}

this.filePath = Path;


}


// 读取 excel 文件指定单元格的函数,此函数只支持后缀为xlsx的 excel 文件

public String getCellData(int RowNum, int ColNum) throws Exception {


try {

// 通过函数参数指定单元格的行号和列号,获取指定的单元格对象

Cell = ExcelWSheet.getRow(RowNum).getCell(ColNum);

// 如果单元格的内容为字符串类型,则使用 getStringCellValue 方法获取单元格的内容

// 如果单元格的内容为数字类型,则使用 getNumericCellValue() 方法获取单元格的内容

String CellData = "";


/** 获取单元格类型 */

if (Cell.getCellType() == XSSFCell.CELL_TYPE_STRING) { // 如果是字符串

CellData = Cell.getStringCellValue();

} else if (Cell.getCellType() == XSSFCell.CELL_TYPE_NUMERIC) { // 如果是数字

DecimalFormat df = new DecimalFormat("0");

CellData = df.format(Cell.getNumericCellValue());

}


return CellData;


} catch (Exception e) {

e.printStackTrace();

return ""; //如果异常返回空

}


}


/**在Excel文件的执行单元格中写输入数据,此函数只支持后缀为xlsx的文件写入

* @param result 结果

* @param rowNum 行数

* @param cellNum 列数

* */

public void setCellData(int RowNum, int ColNum, String result) throws Exception {


try {

// 获取 excel文件中的行对象

Row = ExcelWSheet.getRow(RowNum);

// 如果单元格为空,则返回 Null

Cell = Row.getCell(ColNum, Row.RETURN_BLANK_AS_NULL);


if (Cell == null ) {

// 当单元格对象是 null 的时候,则创建单元格

// 如果单元格为空,无法直接调用单元格对象的 setCellValue 方法设定单元格的值

Cell = Row.createCell(ColNum);

// 创建单元格后可以调用单元格对象的 setCellValue 方法设定单元格的值

Cell.setCellValue(result);


} else {

// 单元格中有内容,则可以直接调用单元格对象的 setCellValue 方法设定单元格的值

Cell.setCellValue(result);

System.out.println("执行完成");


}

// 实例化写入 excel 文件的文件输出流对象

FileOutputStream fileOut = new FileOutputStream(filePath);

// 将内容写入 excel 文件中

ExcelWBook.write(fileOut);

// 调用flush 方法强制刷新写入文件

fileOut.flush();

// 关闭文件输出流对象

fileOut.close();


} catch (Exception e) {

e.printStackTrace();

throw (e);


}

}


/**从 excel 文件获取测试数据的静态方法*/

public static Object[][] getTestData(String excelFilePath, String sheetName) throws IOException {


// 根据参数传入的数据文件路径和文件名称,组合出 excel 数据文件的绝对路径

// 声明一个 file 文件对象

File file = new File(excelFilePath);


// 创建 FileInputStream 对象用于读取 excel 文件

FileInputStream inputStream = new FileInputStream(file);


// 声明 Workbook 对象

Workbook Workbook = null;


// 获取文件名参数的后缀名,判断是xlsx文件还是xls文件

String fileExtensionName = excelFilePath.substring(excelFilePath.indexOf("."));


// 判断文件类型如果是xlsx,则使用 XSSFWorkbook 对象进行实例化 2007

// 判断文件类型如果是xls,则使用 SSFWorkbook 对象进行实例化 2003

if (fileExtensionName.equals(".xlsx")) {


Workbook = new XSSFWorkbook(inputStream);


} else if (fileExtensionName.equals(".xls")) {


Workbook = new HSSFWorkbook(inputStream);


}


// 通过 sheetName 参数,生成 sheet 对象

Sheet Sheet = Workbook.getSheet(sheetName);


// 获取 excel 数据文件中 sheet1中数据的行数,getLastRowNum 方法获取数据的最后行号

// getFirstRowNum 方法获取数据的第一行行号,相减之后算出数据的行数

// 注意:excel 文件的行号和列号都是从 0 开始

int rowCount = Sheet.getLastRowNum() - Sheet.getFirstRowNum();

System.out.println(rowCount);

// 创建名为 records 的 list 对象来存储从 excel数据文件读取的数据

//

List records = new ArrayList();

// 使用 2 个 for 循环遍历 excel 数据文件的所有数据(除了第一行,第一行是数据列名称)

// 所以 i 从1开始,而不是从 0; 0表示表头

for (int i = 1; i <= rowCount; i++) {

// 使用 getRow 方法获取行对象

Row row = Sheet.getRow(i);


/*

* 声明一个数组,来存储 excel 数据文件每行中的测试用例和数据,数组的大小用 getLastCellNum-1

* 来进行动态声明,实现测试数据个数和数组大小相一致因为 excel 数据文件中

* 的测试数据行的最后一个单元格为测试执行结果,倒数第二个单元格为此测试数据行

* 是否运行的状态位,所最后两列的单元格数据并不需要传入到测试方法中,所以使用 getLastCellNum-2

* 的方式去掉每行中的最后两个单元格数据,计算出需要存储的测试数据个数,并 作为测试数据数组的初始化大小

*/

String fields[] = new String[row.getLastCellNum() - 2];//最后两行不是要的所以去掉2 fielcls存放结果

/*

* if 用于判断数据行是否要参与测试的执行,excel 文件的倒数第二列为数据行的状态位,标记为 *

* "y"表示此数据行要被测试脚本执行,标记为非"y"的数据行均被认为不会参与测试脚本的执行,会 被跳过

*/

System.out.println(row.getCell(row.getLastCellNum() - 2).getStringCellValue());

if (row.getCell(row.getLastCellNum() - 2).getStringCellValue().equals("y")) { //y判断是否之执行。 equalsIgnoreCase


for (int j = 0; j < row.getLastCellNum() - 2; j++) {

// 判断excel 的单元格字段是数字还是字符,字符串格式调用 getStringCellValue 方法获取

// 数字格式调用 getNumericCellValue 方法获取

if (row.getCell(j).getCellType() == XSSFCell.CELL_TYPE_STRING) { //字符串

fields[j] = row.getCell(j).getStringCellValue();

} else if (row.getCell(j).getCellType() == XSSFCell.CELL_TYPE_NUMERIC) {

DecimalFormat df = new DecimalFormat("0");

fields[j] = df.format(row.getCell(j).getNumericCellValue());

} else {

System.out.println("格式错误");

}

}

// fields 的数据对象存储到 records的 list 中

records.add(fields);

}


}


// 定义函数返回值,即 Object[][]

// 将存储测试数据的 list 转换为一个 Object 的二维数组

Object[][] results = new Object[records.size()][];

// 设置二维数组每行的值,每行是个object对象

for (int i = 0; i < records.size(); i++) {

results[i] = records.get(i);

}

// 关闭 excel 文件

return results;

}


public int getLastColumnNum() {

// 返回数据文件的最后一列的列号,如果有12列,则结果返回 11

return ExcelWSheet.getRow(0).getLastCellNum() - 1;

}


public static void main(String[] args) throws Exception

{

// ExcelUtil eu=new ExcelUtil("configs/test.xlsx", "Sheet1");

// eu.setCellData(2, 7, "执行失败"); // 写入ok

// System.out.println(eu.getCellData(1, 2)); //读取ok

//

System.out.println("读取:");

Object[][] obd = getTestData("D:\\TOOL\\sysbj\\BjToon\\configs\\test.xlsx", "Sheet3");

for(int i =0 ; i < obd.length; i++)

{

Object[] obl = obd[i];

System.out.println("=============");

for(int j = 0; j < obl.length; j++)

{

System.out.println(obl[j]);

}

}

System.out.println("excle读取成功:");

}

}


文件 数据 单元 对象 方法 测试 内容 实例 数组 函数 字符 类型 路径 存储 参数 名称 后缀 字符串 数字 结果 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 广州为想互联网科技有限公司 互联网科技网 中国互联网科技工作委员会毛军 河南真二互联网科技有限公司 互联网巨头反垄断金融科技 广州互联网科技公司 互联网与未来科技 互联网高科技企业 互联网科技大会 互联网科技汛 互联网科技股午盘股票涨跌 新华互联网科技2019 宝灵互联网科技有限公司 深圳市优智互联网科技有限公司 互联网公司黑科技创始人 为客找房互联网科技公司怎么样 科技互联网海报 深圳无忧互联网科技 互联网硬科技公司 互联网领先科技成果宣传视频 互联网金融与金融科技 互联网科技生活的内容 互联网公司会议桌创意科技软装饰 贵州叶脉互联网科技有限公司所属行业 东莞新华互联网科技学校 科技赋能视角下互联网保险发展 2021世界互联网领先科技成果发布 西安有哪些互联网高科技企业 互联网科技大佬云集 宁波允成互联网科技有限公司
0