您的位置:首页 > 编程语言 > Java开发

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

2017-11-08 14:21 555 查看
背景:在实现自动化测试时,执行完每一条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哥好腻害");
 }

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐