POI操作Excel
来源:互联网 发布:淘宝一元抢怎么弄 编辑:程序博客网 时间:2024/06/04 18:49
在自动化测试过程中,避免硬编码,经常会用到数据驱动测试模式、关键字驱动测试模式等,这就少不了操作excel。以下是我在测试过程中因为场景需要用poi来实现测试数据的一些操作,后续有其他场景,再持续增加
代码如下
package com.utils;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.Cell;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.XSSFWorkbook;public class ExcelOperation {/** * 获取Excel 某sheet * @param filePath fileName sheetName * @return Sheet */public static Sheet sheetExcel(String filePath, String fileName,String sheetName) {try {// 创建文件对象File file = new File(filePath + "\\" + fileName);// 创建文件流FileInputStream inputStream = new FileInputStream(file);Workbook wb = null;// 判断excel 2007/2010if (fileName.endsWith(".xlsx")) {wb = new XSSFWorkbook(inputStream);}// 判断excel 2003else if (fileName.endsWith(".xls")) {wb = new HSSFWorkbook(inputStream);}// Workbook获取sheetSheet sheet = wb.getSheet(sheetName);return sheet;} catch (Exception e) {e.printStackTrace();return null;}}/** * 获取Excel已知title列号 * @param filePath fileName sheetName titleName * @return int j 列号 */public static Integer getExcelTitleColumn(String filePath, String fileName,String sheetName, String titleName) {try {// 获取要操作的sheetSheet sheet = sheetExcel(filePath, fileName, sheetName);// 获取列数Row row0 = sheet.getRow(0);for (int j = 0; j < row0.getLastCellNum(); j++) {if (getValue(row0.getCell(j)).equals(titleName)) {System.out.println("返回的title的列号:" + j);return j;}}} catch (Exception e) {e.printStackTrace();return -1;}return -1;}/** * 获取Excel已知列的行号 * @param filePath fileName sheetName titleName * @return int i 行号 */public static Integer getExcelRow(String filePath, String fileName,String sheetName, String cellName) {try {// 获取要操作的sheetSheet sheet = sheetExcel(filePath, fileName, sheetName);Row row0 = sheet.getRow(0);// 通过列遍历行int rowNum = sheet.getLastRowNum() - sheet.getFirstRowNum();for (int j = 0; j < row0.getLastCellNum(); j++) {for (int i = 0; i < rowNum + 1; i++) {if (getValue(sheet.getRow(i).getCell(j)).equals(cellName)) {System.out.println("返回的单元格的行号:" + i);return i;}}}} catch (Exception e) {e.printStackTrace();return -1;}return -1;}/** * 获取Excel cell行列号 * @param filePath fileName sheetName cellValue * @return return List<Integer> 行号、列号 */public static List<Integer> getCellNO(String filePath, String fileName,String sheetName, String cellValue) {try {// 获取要操作的sheetSheet sheet = sheetExcel(filePath, fileName, sheetName);// 获取列数Row row0 = sheet.getRow(0);int rowNum = sheet.getLastRowNum() - sheet.getFirstRowNum();List<Integer> cellNum = new ArrayList<Integer>();for (int i = 0; i < rowNum + 1; i++) {for (int j = 0; j < row0.getLastCellNum(); j++) {if (getValue(row0.getCell(j)).equals(cellValue)) {cellNum.add(i);cellNum.add(j);System.out.println("返回的单元格的行、列号:" + cellNum);return cellNum;}}}} catch (Exception e) {e.printStackTrace();return null;}return null;}/** * 获取Excel已知行列号的cell值 行、列都从0开始 * @param filePath fileName sheetName cellValue * @return return String cell value */public static String getCellValue(String filePath, String fileName,String sheetName, int row, int column) {// 获取要操作的sheetSheet sheet = sheetExcel(filePath, fileName, sheetName);Row rowObj = sheet.getRow(row);try {// String cellValue = rowObj.getCell(column).getStringCellValue();// Double cellValue=rowObj.getCell(column).getNumericCellValue();return getValue(rowObj.getCell(column));} catch (Exception e) {e.printStackTrace();return null;}}/** * 处理单元格类型,使其转化成字符串 * * @return return String cellValue */public static String getValue(Cell hssfCell) {if (hssfCell.getCellType() == 4) {// 布尔类型的值return String.valueOf(hssfCell.getBooleanCellValue());} else if (hssfCell.getCellType() == 0) {// 数值类型的值Double cellValue = hssfCell.getNumericCellValue();// 格式化为四位小数String res = new DecimalFormat("#.####").format(cellValue);return res; // 返回String类型} else {// 字符串类型的值return hssfCell.getStringCellValue();}}/** * 清除某一列单元格内容 * * @return return String cellValue */public static void clearExcelColumn(String filePath, String fileName,String sheetName, int column) {try {// 创建文件对象File file = new File(filePath + "\\" + fileName);// 创建文件流FileInputStream is = new FileInputStream(file);Workbook wb = null;// 判断excel 2007/2010if (fileName.endsWith(".xlsx")) {wb = new XSSFWorkbook(is);}// 判断excel 2003else if (fileName.endsWith(".xls")) {wb = new HSSFWorkbook(is);}// Workbook获取sheetSheet sheet = wb.getSheet(sheetName);int rowNum = sheet.getLastRowNum() - sheet.getFirstRowNum();for (int i = 1; i < rowNum + 1; i++) {sheet.getRow(i).getCell(column).setCellValue("");}FileOutputStream os = new FileOutputStream(filePath + "\\"+ fileName);wb.write(os);is.close();os.close();} catch (Exception e) {e.printStackTrace();}}/** * 写入某一单元格 * * @return return String cellValue */public static void writeExcelCell(String filePath, String fileName,String sheetName, int row, int column, String cellValue) {try {// 创建文件对象File file = new File(filePath + "\\" + fileName);// 创建文件流FileInputStream is = new FileInputStream(file);Workbook wb = null;// 判断excel 2007/2010if (fileName.endsWith(".xlsx")) {wb = new XSSFWorkbook(is);}// 判断excel 2003else if (fileName.endsWith(".xls")) {wb = new HSSFWorkbook(is);}// Workbook获取sheetSheet sheet = wb.getSheet(sheetName);sheet.getRow(row).getCell(column).setCellValue(cellValue);FileOutputStream os = new FileOutputStream(filePath + "\\"+ fileName);wb.write(os);is.close();os.close();} catch (Exception e) {e.printStackTrace();}}}
1 0
- POI操作EXCEL
- POI操作EXCEL
- POI操作Excel文档
- 使用POI操作Excel
- poi操作excel文件
- poi操作excel文件
- poi 操作Excel
- POI操作Excel
- POI 操作excel
- POI 操作EXCEL
- poi操作excel文件
- 用POI操作Excel
- poi操作excel
- poi 操作 excel
- POI操作excel大全
- POI操作Excel总结
- POI操作EXCEL
- POI操作EXCEL(一)
- 【Sublime Text 3】用户自定义设置文件 (Preferences.sublime-settings — User)
- 文件与目录管理-私房菜学习笔记
- Linux配置nginx、PHP7详解
- butterknife的基本使用
- 知识产权——两个笑话
- POI操作Excel
- java web 知识体系
- spring整合hibernate
- angularJs 中的ng-bind-html指令和$sce服务
- html结合js实现简单的树状目录
- 谷歌AdMob广告接入(插屏广告)
- StartSSL免费SSL证书申请和账户注册完整过程
- python 爬虫
- UML