• Java+Selenium——利用POI读写excel文件(因环境此篇为参考)


    参考网址:https://blog.csdn.net/u011541946/article/details/74726045

    本篇介绍一个第三方工具POI,由于Java的跨平台特性,所以Java没有直接操作excel文件的库支持。

    在自动化测试,有些我们的测试数据是放到excel文件中,所以需要懂得如何操作获取excel内的内容。

    1.下载POI

    打开网站http://poi.apache.org/download.html,选择下面3.16版本下载。

     

    选择ZIP包下载。

     

    下载完后解压,文件结构如下

     

    2. 把POI文件添加在你Selenium当前项目的library中

    先新建一个文件夹,把解压出来的所有的xx.jar都放在新的文件夹,

    然后右键你的eclipse工程> Build path > Configure build path > 点击lib  > Add external jar,新建文件夹内所有的xxx.jar都选中。

    或者,你只需要以下几个jar文件就可以。

     

    注意,这些jar文件不在同一个路径,你需要到不同路径去拷贝复制到一个新文件夹,然后把这个文件夹的所有jar文件拷贝到你eclipse项目下的Files文件夹,

    需要右键你工程,新建一个叫Files的文件夹。我的项目,采取这种方法,我不希望拷贝全部jar到项目lib中。

    3. 准备一个test-data.xlsx文件

    桌面新建一个test-data.xlsx,然后输入如下内容,并且把这个文件放到eclipse项目中。

     

    4..新建一个ReadExcel.java的文件,输入如下代码。

    package lessons;
     
    import java.io.File;
    import java.io.FileInputStream;
    import org.apache.poi.xssf.usermodel.XSSFSheet;
    import org.apache.poi.xssf.usermodel.XSSFWorkbook;
     
    public class ReadExcel {
     
        public static void main(String[] args) {
            
            try{
                
                // 指定excel的路径
                File src = new File(".\\Files\\test-data.xlsx");
                
                // 加载文件
                FileInputStream fis = new FileInputStream(src);
                
                // 加载workbook
                @SuppressWarnings("resource")
                XSSFWorkbook wb=new XSSFWorkbook(fis);
                
                //加载sheet,这里我们只有一个sheet,默认是sheet1
                XSSFSheet sh1= wb.getSheetAt(0);
                
                // 开始读取第一行第一列的数据
                System.out.println(sh1.getRow(0).getCell(0).getStringCellValue());
                // 读取第一行第二列内容
                System.out.println(sh1.getRow(0).getCell(1).getStringCellValue());
                // 读取第二行第二列内容
                System.out.println(sh1.getRow(1).getCell(0).getStringCellValue());
                // 读取第二行第二列内容
                System.out.println(sh1.getRow(1).getCell(1).getStringCellValue());
                
                // 获取实际总行数
                System.out.println(sh1.getPhysicalNumberOfRows());
                
                // 获取实际总列数
                System.out.println(sh1.getPhysicalNumberOfRows());
                
            } catch (Exception e){
                
                System.out.println(e.getMessage());
                
            }
     
        }
     
    }

    我尝试找了很久,发现有获取excel内sheet总行数的方法,我说的行是值水平上一行数据,叫行。但是没有获取总列数的方法。POI确实没有获取总列数方法。上面的测试文件一共有4行2列数据。
    6.换成循环打印excel内数据

    由于我们知道获取总行数的方法,至于列数,我们只能事先确定,例如上面事先确定是2列,但是不确定有多少行。这个只是循环遍历当前sheet的内所有有数据的单元格。

    package lessons;
     
    import java.io.File;
    import java.io.FileInputStream;
    import org.apache.poi.xssf.usermodel.XSSFSheet;
    import org.apache.poi.xssf.usermodel.XSSFWorkbook;
     
    public class ReadExcel {
     
        public static void main(String[] args) {
            
            try{
                
                // 指定excel的路径
                File src = new File(".\\Files\\test-data.xlsx");
                
                // 加载文件
                FileInputStream fis = new FileInputStream(src);
                
                // 加载workbook
                @SuppressWarnings("resource")
                XSSFWorkbook wb=new XSSFWorkbook(fis);
                
                //加载sheet,这里我们只有一个sheet,默认是sheet1
                XSSFSheet sh1= wb.getSheetAt(0);
                
                // i 控制行
                for(int i=0;i<sh1.getPhysicalNumberOfRows();i++){
                    // j是控制列,我们上面数据是2列
                    for(int j=0;j<2;j++){
                        
                        System.out.println(sh1.getRow(i).getCell(j).getStringCellValue());
                    }
                }
            
            } catch (Exception e){
                
                System.out.println(e.getMessage());
                
            }
     
        }
     
    }

    7. 写入内容到excel

    例如,我们需要在上面test-data.xlsx文件第三列标上Fail或者Pass,请看下面脚本如何实现。

    package lessons;
     
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
     
    import org.apache.poi.xssf.usermodel.XSSFSheet;
    import org.apache.poi.xssf.usermodel.XSSFWorkbook;
     
    public class ReadExcel {
     
        public static void main(String[] args) {
            
            try{
                
                // 指定excel的路径
                File src = new File(".\\Files\\test-data.xlsx");
                
                // 加载文件
                FileInputStream fis = new FileInputStream(src);
                
                // 加载workbook
                @SuppressWarnings("resource")
                XSSFWorkbook wb=new XSSFWorkbook(fis);
                
                //加载sheet,这里我们只有一个sheet,默认是sheet1
                XSSFSheet sh1= wb.getSheetAt(0);
                
                //写入excel数据
                sh1.getRow(0).createCell(2).setCellValue("Pass");
                sh1.getRow(1).createCell(2).setCellValue("Fail");
                sh1.getRow(2).createCell(2).setCellValue("N/A");
                sh1.getRow(3).createCell(2).setCellValue("Pass");
            
                // 保存文件
                FileOutputStream fout=new FileOutputStream(new File(".\\Files\\test-data.xlsx"));
                 
                //覆盖写入内容 
                wb.write(fout);
                
                // 关闭文件
                fout.close();
                
            } catch (Exception e){
                
                System.out.println(e.getMessage());
                
            }
     
        }
     
    }
  • 相关阅读:
    oracle 进阶之model子句
    SiteMesh的使用--笔记
    JZ49:把字符串转换成整数
    面试题45:把数组排成最小的数
    面试题43:1~n整数中1出现的次数
    面试题42:连续子数组的最大和
    面试题41:数据中的中位数
    面试题40:最小的k个数
    面试题39:数组中出现次数超过一半的数字
    面试题38:字符串的排列
  • 原文地址:https://www.cnblogs.com/xiaobaibailongma/p/12221696.html
Copyright © 2020-2023  润新知