java操作Excel常用方法总结(POI)

【前言】


在自动化测试过程中,经常会遇到处理大量数据,或者批量创建过程,有些数据仅仅依靠文本文件是无法做到,这时候就需要通过读写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();
		}
	}
   
   


  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值