package FileDemo1;

 import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
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; public class ExcleUtil {
private static XSSFSheet ExcelWSheet;
private static XSSFWorkbook ExcelWBook;
private static XSSFCell Cell;
private static XSSFRow Row; // 设定要设置的Excel的文件路径和Excel 中Sheet名;
// 在读/写Excel 的时候先要调用此方法
public static void setExcleFile(String FilePath, String sheetName) throws Exception {
FileInputStream ExcleFile;
try {
// 实例化Excle文件的FileInputStream 对象;
ExcleFile = new FileInputStream(FilePath);
// 实例化Excle文件的XSSFWorkbook 对象;
ExcelWBook = new XSSFWorkbook(ExcleFile);
/*
* 实例化XSSFSheet 对象,指定ExcelFile中的sheet名称,用于后续对sheet中行和列的操作;
*
*/
ExcelWSheet = ExcelWBook.getSheet(sheetName); } catch (Exception e) {
e.getStackTrace();
}
}
/*
* 读取excle文件指定单元格的函数 ;
*
*/ public static String getCell(int row, int col) throws Exception { try {
// 通过函数参数指定单元格的行号和列,获取指定单元格的对象;
Cell = ExcelWSheet.getRow(row).getCell(col);
/*
* 1.如果单元格的类型为字符串类型,使用getStringCellValue();来获取单元格的内容;
* 2.如果单元格的类型为数字类型,使用getNumberricCellValue();来获取单元格的内容;
* 注意:getNumberricCellValue();返回的值为double类型,转为为字符串类型,必须在
* getNumberricCellValue();前面加上(" ")双引号,用于强制转换为String类型,不加双引号
* 则会抛错;double类型无法转换为String类型的异常;
*
*/
String CellData = Cell.getCellType() == XSSFCell.CELL_TYPE_STRING ? Cell.getStringCellValue() + ""
: String.valueOf(Math.round(Cell.getNumericCellValue()));
return CellData;
} catch (Exception e) {
e.getStackTrace();
return "";
} }
/*
* 在Excle中执行单元格写入数据;
*
*
*/ public static void setCellData(int rownum, int colnum, String Result) throws Exception { try {
// 获取excle文件的中行对象;
Row = ExcelWSheet.getRow(rownum);
// 如果单元格为空则返回null;
Cell = Row.getCell(colnum, org.apache.poi.ss.usermodel.Row.RETURN_BLANK_AS_NULL);
if (Cell == null) {
// 当单元格为空是则创建单元格
// 如果单元格为空无法调用单元格对象的setCellValue方法设定单元格的值 ;
Cell = Row.createCell(colnum);
// 创建单元格和后可以通过调用单元格对象的setCellValue方法设置单元格的值了;
Cell.setCellValue(Result);
} else {
// 单元格中有内容,则可以直接调用单元格对象的 setCellValue 方法来设置单元格的值;
Cell.setCellValue(Result);
}
FileOutputStream fileout = new FileOutputStream(Constant.testDataExcelFilePath);
// 将内容写到Excel文件中 ;
ExcelWBook.write(fileout);
// j调用flush方法强制刷新写入文件;
fileout.flush();
fileout.close(); } catch (Exception e) {
System.out.println(e.getMessage() + e.getStackTrace());
throw (e);
} } public static void TangsetCellData(int RowNum, int ColNum, String Result) {
try {
// 获取行对象
Row = ExcelWSheet.getRow(RowNum);
// 如果单元格为空,则返回null
Cell = Row.getCell(ColNum, Row.RETURN_BLANK_AS_NULL);
if (Cell == null) {
// 当单元格对象是Null时,则创建单元格
// 如果单元格为空,无法直接调用单元格的setCellValue方法设定单元格的值
Cell = Row.createCell(RowNum);
// 调用setCellValue方法设定单元格的值
Cell.setCellValue(Result);
} else {
// 单元格中有内容,则可以直接调用seCellValue方法设定单元格的值
Cell.setCellValue(Result);
}
// 实例化写入Excel文件的文件输出流对象
FileOutputStream fileOut = new FileOutputStream(Constant.testDataExcelFilePath);
// 将内容写入Excel中
ExcelWBook.write(fileOut);
fileOut.flush();
fileOut.close();
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
} // 从excel 文件中获取测试数据的静态方法;
public static Object[][] getTestData(String excelFilePath, String sheetName) throws Exception {
// 根据参数传入的数据文件路径和文件名称,组合出Excel 数据文件的绝对路径
// 声明一个文件;
File file = new File(excelFilePath);
// 创建FileInputStream 来读取Excel文件内容;
FileInputStream inputStream = new FileInputStream(file);
// 声明Workbook 对象;
Workbook workbook = null;
// 获取文件名参数的扩展名,判断是“.xlsx” 还是 “.xls” ;
String fileExtensionName = excelFilePath.substring(excelFilePath.indexOf('.'));
if (fileExtensionName.equals(".xlsx")) {
workbook = new XSSFWorkbook(inputStream); } else if (fileExtensionName.equals(".xls")) {
workbook = new HSSFWorkbook(inputStream); }
Sheet sheet = workbook.getSheet(sheetName);
// 获取Excel 数据文件Sheet1 中数据的行数,getLastRowNum 方法获取数据的最后一行的行号,
// getFistRowNum 获取第一行 最后一行减去第一行就是总行数了
// 注意excle 的行和列都是从0开始的;
int rowCount = sheet.getLastRowNum() - sheet.getFirstRowNum();
// 创建名为records 的List对象来存储从Excel文件中读取的数据;
List<Object[]> records = new ArrayList<Object[]>();
// 使用for循环遍历Excel 数据文件的所有数据(除了第一行,第一行为标题行),所以i从1开始而不是从0开始; for (int i = 1; i < rowCount + 1; i++) {
// 使用getRow来获取行对象;
Row row = sheet.getRow(i);
/*
* 声明一个数据,用来存储Excel数据文件每行中的测试用例和数据,数据的大小用getLastCellNum-2
* 来进行动态声明,实现测试数据个数和数组大小一致,
* 因为Excel数据文件中的测试数据行的最后一个单元格是测试执行结果,倒数第二个单元格为此测试数据行是否运行的状态位,
* 所以最后俩列的单元格数据并
* 不需要传入测试方法中,所以是用getLastCellNum-2的方式去掉每行中的最后俩个单元格数据,计算出需要存储的测试数据个数,
* 并作为测试数据数组的初始化大小
*
*/
String fields[] = new String[row.getLastCellNum() - 2]; /*
* 判断数据行是否要参与测试的执行,Excel 文件的倒数第二列为数据行的状态位, 标记为“y”
* 表示此数据行要被测试脚本执行,标记为非“y”的数据行均被认为不会参数测试脚本执行,会被跳过;
*/ if (row.getCell(row.getLastCellNum() - 2).getStringCellValue().equals("y")) {
for (int j = 0; j < row.getLastCellNum() - 2; j++) {
/*
* 判断Excel 单元格的内容是数字还是字符, 字符格式调用:
* row.getCell(j).getStringCellValue();
* 数字格式调用:row.getCell(j).getNumericCellValue();
*/
fields[j] = (String) (row.getCell(j).getCellType() == XSSFCell.CELL_TYPE_STRING
? row.getCell(j).getStringCellValue() : "" + row.getCell(j).getNumericCellValue()); }
// fields 存储到数组当中;
records.add(fields); }
} /*
* 定义函数的返回值,即Object[] [] 将存储测试数据的list 转换为一个Object 的二维数组;
*/
Object[][] results = new Object[records.size()][];
for (int i = 0; i < records.size(); i++) {
results[i] = records.get(i);
} return results; } public static int getLastColumnNum() { return ExcelWSheet.getRow(0).getLastCellNum() - 1;
} }

操纵Excel文件的 ExcelUtil 类 !的更多相关文章

  1. 通用Excel文件导出工具类

    1:Excel格式 2:ExcelUtil.java import java.io.ByteArrayOutputStream; import java.io.IOException; import ...

  2. ArcGIS操作Excel文件没有注册类解决办法

    在ArcGIS Desktop中进行表连接时选择了一张excel表,但添加该表时报错: 原因是机器上缺少Office的数据驱动. ArcGIS 支持 : Excel 2003 以及更早版本的 .xls ...

  3. JXL包大解析;Java程序生成excel文件和解析excel文件内容

    最近需求变化,需要把excel导入 我以前没有做过,所以我查了一些资料 和参考别人的代码 以下是多种方式: import java.io.File; import java.io.FileInputS ...

  4. C#项目中操作Excel文件——使用NPOI库

    转载自:http://blog.csdn.net/dcrmg/article/details/52356236# 感谢-牧野- 实际C#项目中经常会涉及到需要对本地Excel文件进行操作,特别是一些包 ...

  5. [转载]Java操作Excel文件的两种方案

    微软在桌面系统上的成功,令我们不得不大量使用它的办公产品,如:Word,Excel.时至今日,它的源代码仍然不公开已封锁了我们的进一步应用和开发.在我们实际开发企业办公系统的过程中,常常有客户这样子要 ...

  6. java无依赖读取Excel文件

    说到Java读取Excel文件,用得多的当然是POI或jxls,但今天在看一本书的时候.当中提到使用JdbcOdbcDriver这个驱动类在不依赖第三方库的情况下也能够完毕对Excel文件的读取操作, ...

  7. 【python小记】python操作excel文件

    题记: 最近因为工作需要,学习了python,瞬间对这个轻松快捷的语给吸引了,以前只知道js脚本是写网页的,没有想到python这个脚本语言的应用范围可以这么广泛,现在做一些简单或稍微复杂的操作,基本 ...

  8. Spring Boot下的一种导入Excel文件的代码框架

    1.前言 ​ Spring Boot下如果只是导入一个简单的Excel文件,是容易的.网上类似的文章不少,有的针对具体的实体类,代码可重用性不高:有的利用反射机制或自定义注解,开发了Excel导入工具 ...

  9. CSV格式的文件与EXCEL文件的区别

    CSV格式的文件与EXCEL文件的区别 Excel CSV 这是一个二进制文件,它保存有关工作簿中所有工作表的信息 CSV代表Comma Separated Values .这是一个纯文本格式,用逗号 ...

随机推荐

  1. 发现环——第八届蓝桥杯C语言B组(国赛)第四题

    原创 标题:发现环 小明的实验室有N台电脑,编号1~N.原本这N台电脑之间有N-1条数据链接相连,恰好构成一个树形网络.在树形网络上,任意两台 电脑之间有唯一的路径相连. 不过在最近一次维护网络时,管 ...

  2. Python3 break与continue

    Infi-chu: http://www.cnblogs.com/Infi-chu/ break和continue都是中断循环的意思,但是他们的中断后的效果不同. 请看如下两个例子就懂了 ''' 这个 ...

  3. scala (2) while 和变量

    (1)在scala中声明变量有两个关键字,val和var val: 是不可变的,即声明了变量不能再进行更改,类似于java中的final var: 是可变的,即可以重新对其赋值 声明变量的通用格式:  ...

  4. 【 C 】高级字符串查找之查找标记(token)函数 strtok介绍

    我的csdn博客 一个字符串常常包含几个单独的部分,它们彼此被分隔开来.每次为了处理这些部分,你首先必须把它们从字符串中抽取出来. 这个任务有#include<string.h>中的str ...

  5. Could not connect to '192.168.80.145' (port 22): Connection failed的解决办法(远程连不上xshell)

    问题状况表现1 这个问题一般是你 的什么配置影响了虚拟机的网卡网关设置!!!. 问题状况表现2 这个问题一般是你 的什么配置影响了虚拟机的网卡网关设置. 解决办法 网上的那些解决方案,我都试过,比如. ...

  6. 20155206 2016-2017-2 《Java程序设计》第十周学习总结

    20155206 2016-2017-2 <Java程序设计>第十周学习总结. 教材学习内容总结 教材学习内容总结 Java的网络编程 •网络编程是指编写运行在多个设备(计算机)的程序,这 ...

  7. 加分项——C语言实现Linux的pwd命令

    加分项--C语言实现Linux的pwd命令 实现要求 1 学习pwd命令 2 研究pwd实现需要的系统调用(man -k; grep),写出伪代码 3 实现mypwd 4 测试mypwd pwd pw ...

  8. 20155327 实验一《Java开发环境的熟悉》实验报告

    实验内容 1.使用JDK编译.运行简单的Java程序: 2.使用Eclipse 编辑.编译.运行.调试Java程序. 实验知识点 JVM.JRE.JDK的安装位置与区别: 命令行运行javac:jav ...

  9. 20145226 《Java程序设计》第3周学习总结

    教材学习内容总结 学习目标 区分基本类型与类类型 理解对象的生成与引用的关系 掌握String类和数组 理解封装的概念 掌握构造方法的定义 理解重载的概念 掌握static的应用 教材第四章内容总结 ...

  10. crontab练习题

    Crontab练习题 每周一到周六的凌晨3点20分,运行tar命令对/etc/目录进行存档另存,存储位置为/backups/etc-YYYY-MM-DD.tar.gz 20 3 * * 1-6 /us ...