【java 菜鸟自动化实践之一】实现POI excel更新某个单元格数据(支持excel2003和2007)

背景:在实现自动化测试时,执行完每一条excel测试用例后,需要更新该条用例的测试结果单元格中执行结果,于是在网上苦找方法,都是零碎案例,无法达到预期目的,又由于java功底一般,故自己琢磨写了一个简单的方法解决问题,相信网上大神众多,肯定有更好方式和方法,欢迎大神来拍砖指导。。

 



package common;

import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFCell;

import java.io.*;

/**
 * User: XZee
 * Date: 2011-10-10
 * Time: 16:10:29
 */

public class write_excel {
     /** 总行数 */
    private int totalRows = 0;
    /** 总列数 */
    private int totalCells = 0;
    /** 错误信息 */
    private static String errorInfo;
    private static XSSFWorkbook workbook;
    private static HSSFWorkbook workbook2;
    /** 构造方法
     * @return */

    public int getTotalRows() {
        return totalRows;
    }
    public int getTotalCells() {
        return totalCells;
    }
    public String getErrorInfo() {
        return errorInfo;
    }
   
    public static boolean validateExcel(String filePath) {
        /** 检查文件名是否为空或者是否是Excel格式的文件 */
        if (filePath == null|| !(isExcel2003(filePath) || isExcel2007(filePath))) {
            errorInfo = "文件名不是excel格式";
            return false;
        }
        /** 检查文件是否存在 */
        File file = new File(filePath);
        if (file == null || !file.exists()) {
            errorInfo = "文件不存在";
            return false;
        }
        return true;
    }
    
    
   public static boolean isExcel2003(String filePath) {
  return filePath.matches("^.+\\.(?i)(xls)$");
 }

    public static boolean isExcel2007(String filePath) {
  return filePath.matches("^.+\\.(?i)(xlsx)$");
    }

    /**
     * 只是一个demo,这里假设修改的值是String类型
     * @param filePath
     * @param sheetIndex
     * @param col
     * @param row
     * @param value
     * @throws Exception
     */
    public static void updateExcel(String filePath,int sheetIndex,int row,int col,String value)throws Exception{
        /** 验证文件是否合法 */
        if (!validateExcel(filePath)) {
            System.out.println(errorInfo);
        }
       
        FileInputStream fis=new FileInputStream(filePath);
       
        /** 判断文件的类型,是2003还是2007 */
       
        if (isExcel2007(filePath)) {

            workbook = new XSSFWorkbook(fis);
            XSSFSheet sheet=workbook.getSheetAt(sheetIndex);
            XSSFRow r=sheet.getRow(row);
            XSSFCell cell=r.getCell(col);
           
            String str=cell.getStringCellValue();
            //这里假设对应单元格原来的类型也是String类型
            cell.setCellValue(value);
            System.out.println("单元格原来值为"+str+"\n");
            System.out.println("单元格值被更新为"+value+"\n");

            fis.close();//关闭文件输入流

            FileOutputStream fos=new FileOutputStream(filePath);
            workbook.write(fos);
            fos.close();//关闭文件输出流
        }else if(isExcel2003(filePath)){            
         workbook2 = new HSSFWorkbook(fis);
         HSSFSheet sheet = workbook2.getSheetAt(sheetIndex);
         HSSFRow r = sheet.getRow(row);
         HSSFCell cell = r.getCell(col);   
         String str=cell.getStringCellValue();
         //这里假设对应单元格原来的类型也是String类型
         cell.setCellValue(value);
         System.out.println("单元格原来值为"+str);
         System.out.println("单元格值被更新为"+value);

         fis.close();//关闭文件输入流

         FileOutputStream fos=new FileOutputStream(filePath);
         workbook2.write(fos);
         fos.close();//关闭文件输出流
        }else{
         System.out.println("当前文件,可能不是excel203或excel2007文件,请检查文件");
        }

    }

 

 public static void main(String[] args) throws Exception{
       // TODO Auto-generated method stub
      File file=new File("E:\\workspace\\FE_performance_test\\Datasource\\TestCase.xlsx");
      String file="E:\\workspace\\FE_performance_test\\Datasource\\TestCase.xlsx";

         //下面尝试更改第一行第一列的单元格的值
      write_excel.updateExcel(file,0,6,1,"2哥好腻害");
 }



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值