【前言】
在自动化测试过程中,经常会遇到处理大量数据,或者批量创建过程,有些数据仅仅依靠文本文件是无法做到,这时候就需要通过读写excel来实现,从而也是为了更好的与功能测试人员做好沟通与协调,提高测试效率。
【POI jar包中包含的基本方法】
XSSFWorkbook wb = new XSSFWorkbook(); //创建Excel表格对象
XSSFSheet sheet = wb.createSheet("测试表格");//创建一个工作表格(sheet)
XSSFRow row1 = sheet.createRow(0);//一行(Row)
XSSFCell cell2 = row2.createCell((short)0)//一个单元格
XSSFCellStyle style4 = wb.createCellStyle()//单元格格式
XSSFDataFormat format= wb.createDataFormat();//单元格内容格式
【读Excel中指定行指定列的单元格值】
/**
* 【功能】:读指定Excel文件中指定表单中指定行列的单元格数据
* 【参数一】: fileName Excel文件名
* 【参数二】: sheetName sheet表单名
* 【参数三】: rowNum 行号
* 【参数四】: sheetName 列号
* 【返回值】: 单元格的值
* 【引用示例】: readExcel(fileName,sheetName,rowNum,columnNum);
* 【说明】:无
* 【作者】:何如说事
*/
public String readExcel(String fileName,String sheetName,Integer rowNum,Integer columnNum){
String unitValue = null; //初始化单元格值为空
try {
InputStream input = new FileInputStream(new File(fileName)); //建立输入流
Workbook wb = null;
//根据文件格式(2003或者2010)来初始化
wb = new XSSFWorkbook(input);
Sheet sheet = wb.getSheet(sheetName); //获得表单
logger.info("开始读取Excel文件:"+fileName+"的sheet表:"+sheetName);
//Sheet sheet = wb.getSheetAt(0); //获得第一个表单
int rowCount = sheet.getPhysicalNumberOfRows(); //获取总行数
//遍历每一行
for (int r = 0; r < rowCount; r++){
Row row = sheet.getRow(r);
int cellCount = row.getPhysicalNumberOfCells(); //获取总列数
//遍历每一列
for (int c = 0; c < cellCount; c++){
Cell cell = row.getCell(c);
if(r==rowNum && c==columnNum){
cell.setCellType(1);
unitValue = cell.getStringCellValue();
logger.info("读取Excel文件:"+fileName+"的sheet表:"+sheetName+"中第"+rowNum+"行"+"第"+columnNum+"列,获取到的值为:"+unitValue);
}
else{
continue;//继续遍历查找
}
}
}
if(unitValue.equals("空")){
logger.info("读取Excel文件:"+fileName+"的sheet表"+sheetName+"中第"+rowNum+"行"+"第"+columnNum+"列,获取到的值为空,将返回\"\"");
unitValue="";
}
} catch (IOException ex) {
ex.printStackTrace();
logger.error("读取Excel文件:"+fileName+"的sheet表:"+sheetName+"失败!");
}
return unitValue;
}
【向Excel中指定行指定列的单元格写入值】
/**
* 【功能】:将字符串写入指定文件的指定行列中
* 【参数一】: fileName 待写入的Excel路径文件名
* 【参数二】: sheetName sheet表单名
* 【参数三】: unitValue 待写入的字符串
* 【参数四】: rowNum 待写入的列号
* 【参数五】: column 待写入的行号
* 【返回值】: 无
* 【引用示例】: writeExcel(fileName,sheetName,unitValue,rowNum,column);
* 【说明】:向指定的Excel文件的指定行列写入数据
* 【作者】:何如说事
*/
public void writeExcel(String fileName,String sheetName,String unitValue,int rowNum,int column){
try {
InputStream input = new FileInputStream(new File(fileName)); //建立输入流
Workbook wb = null;
//根据文件格式(2003或者2010)来初始化
wb = new XSSFWorkbook(input);
Sheet sheet = wb.getSheet(sheetName); //获得表单
//Sheet sheet = wb.getSheetAt(0); //获得第一个表单
Row row = sheet.getRow(rowNum);
Cell cell = row.getCell(column);
cell.setCellType(1);
cell.setCellValue(unitValue);
logger.info("向Excel文件:"+fileName+"的sheet表:"+sheetName+"中第"+rowNum+"行第"+column+"列写入数据:"+unitValue+"成功!");
//写入后保存到Excel
OutputStream os = null;
try {
os = new FileOutputStream(new File(fileName));
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
wb.write(os);
logger.info("向Excel文件:"+fileName+"的sheet表:"+sheetName+"写入数据完成!");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
logger.error("向Excel文件:"+fileName+"的sheet表:"+sheetName+"写入数据失败!");
}
try {
os.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} catch (IOException ex) {
ex.printStackTrace();
}
}
【向Excel中写入一列】
/**
* 【功能】:将字符串写入指定文件的指定列中
* 【参数一】: fileName 待写入的Excel路径文件名
* 【参数二】: sheetName sheet表单名
* 【参数三】: unitValue 待写入的字符串链表
* 【参数四】: column 待写入的列号
* 【参数五】: rowNum 从哪一行开始
* 【返回值】: 无
* 【引用示例】: writeExcel(fileName,sheetName,unitValue,column,rowNum);
* 【说明】:向指定的Excel文件的指定列写入数据,从第指定行开始写入
* 【作者】:何如说事
*/
public void writeExcelCol(String fileName,String sheetName,List
unitValue,int column,int rowNum){
try {
InputStream input = new FileInputStream(new File(fileName)); //建立输入流
Workbook wb = null;
//根据文件格式(2003或者2010)来初始化
wb = new XSSFWorkbook(input);
Sheet sheet = wb.getSheet(sheetName); //获得表单
//Sheet sheet = wb.getSheetAt(0); //获得第一个表单
//根据读取的rowNum来决定写入哪一行
for(int r = 0;r
【向Excel写入一行】
/**
* 【功能】:将字符串写入指定文件的指定行中
* 【参数一】: fileName 待写入的Excel路径文件名
* 【参数二】: sheetName sheet表单名
* 【参数三】: unitValue 待写入的字符串链表
* 【参数四】: rowNum 待写入的行号
* 【参数五】: colNum 从哪一列开始写入
* 【返回值】: 无
* 【引用示例】: writeExcel(fileName,sheetName,unitValue,rowNum,colNum);
* 【说明】:向指定的Excel文件的指定行写入数据
* 【作者】:何如说事
*/
public void writeExcelRow(String fileName,String sheetName,List
unitValue,int rowNum,int colNum){
try {
InputStream input = new FileInputStream(new File(fileName)); //建立输入流
Workbook wb = null;
//根据文件格式(2003或者2010)来初始化
wb = new XSSFWorkbook(input);
Sheet sheet = wb.getSheet(sheetName); //获得表单
//Sheet sheet = wb.getSheetAt(0); //获得第一个表单
//根据读取的rowNum来决定写入哪一行
Row row = sheet.createRow(rowNum);
for (int c = 0; c < unitValue.size(); c++){
Cell cell = row.createCell(c+colNum);
cell.setCellType(1);
cell.setCellValue(unitValue.get(c));
logger.info("向Excel文件:"+fileName+"的sheet表:"+sheetName+"中第"+rowNum+"行第"+(c+colNum)+"列写入数据:"+unitValue.get(c)+"成功!");
}
//写入后保存到Excel
OutputStream os = null;
try {
os = new FileOutputStream(new File(fileName));
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
wb.write(os);
logger.info("向Excel文件:"+fileName+"的sheet表:"+sheetName+"写入数据完成!");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
logger.error("向Excel文件:"+fileName+"的sheet表:"+sheetName+"写入数据失败!");
}
try {
os.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} catch (IOException ex) {
ex.printStackTrace();
}
}