千家信息网

自动化excl学习笔记

发表于:2025-02-08 作者:千家信息网编辑
千家信息网最后更新 2025年02月08日,学习excl操作import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import ja
千家信息网最后更新 2025年02月08日自动化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安全错误 数据库的锁怎样保障安全 竹溪专业软件开发经验丰富 网络安全威胁及发展趋势 金锣连凯软件开发公司 金蝶专业版用的什么数据库 深圳pdu服务器电源厂家 无法找到网页服务器dns 数据库中级联删除视频教程 魔兽世界伦鲁迪洛尔服务器怎么样 软件开发都包括哪些 华住酒店 软件开发 累吗 刑警学院网络安全培训班 广州哪儿淘网络技术 河北智慧人口系统软件开发 首只百亿网络安全母基金启动 软件开发项目实训总结报告 温州网络技术培训班 网络安全双一流大学 服务器操作系统选型方案 学点什么网络技术好呢 高级数据库技术对象 汇付天下软件开发怎么样 数据库文件格式 租服务器玩游戏IP 多媒体和网络技术在生活中的运用 安卓视频上传数据库 数据库的创建与管理练习题 绵阳网络技术招聘信息 计算机网络安全的概念论文 jsp执行数据库更新语句 辽宁潮流软件开发服务价格优惠
0