zoukankan      html  css  js  c++  java
  • java解析xlsx方法

    新建一个包

    创建一个方法

     package com.app.utils;

    import java.io.IOException;

    import org.apache.poi.EncryptedDocumentException;
    import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
    import org.apache.poi.ss.formula.functions.Vlookup;
    import org.apache.poi.ss.usermodel.Cell;
    import org.apache.poi.ss.usermodel.CellType;
    import org.apache.poi.ss.usermodel.Row;
    import org.apache.poi.ss.usermodel.Row.MissingCellPolicy;
    import org.apache.poi.xssf.usermodel.XSSFCell;
    import org.apache.poi.xssf.usermodel.XSSFRow;
    import org.apache.poi.xssf.usermodel.XSSFSheet;
    import org.apache.poi.xssf.usermodel.XSSFWorkbook;
    import org.apache.poi.ss.usermodel.Sheet;
    import org.apache.poi.ss.usermodel.Workbook;
    import org.apache.poi.ss.usermodel.WorkbookFactory;

    public class ExcelUtil {

        /**
         * 读取excel文档
         *
         * @param excelPath
         *            excel的路径
         * @param startRow
         *            读取的开始的行号
         * @param endRow
         *            结束的行号
         * @param startCell
         *            开始的列号
         * @param endCell
         *            结束的列号
         */
        // 2 7 1 4 : 6行4列
        // 2 8 2 4: 7行3列
        public static Object[][] readExcel(String excelPath, int startRow, int endRow, int startCell, int endCell) {
            // 创建一个二维数组,保存我们遍历的数据
            Object[][] datas = new Object[endRow - startRow + 1][endCell - startCell + 1];
            try {
                // 得到一个工作簿--》面向接口编程
                Workbook workbook = WorkbookFactory.create(ExcelUtil.class.getResourceAsStream(excelPath));
                // 得到第一个sheet
                Sheet sheet = workbook.getSheetAt(0);
                // 循环获得每一行
                for (int i = startRow; i <= endRow; i++) {
                    // 获得第i行
                    Row row = sheet.getRow(i - 1);
                    // 获得该行中的每一列
                    for (int j = startCell; j <= endCell; j++) {
                        // 获得第j列:把空的列作为一个空字符串的列
                        Cell cell = row.getCell(j - 1, MissingCellPolicy.CREATE_NULL_AS_BLANK);
                        // 设置cell的类型为String类型
                        cell.setCellType(CellType.STRING);
                        // 获得该列string类型的值
                        String value = cell.getStringCellValue();
                        // startRow 1000 endRow 1100
                        // startCell 20 endCell = 50
                        // 第一行
                        // 第一个列设值,i=1000,j=20:datas[0][0]=datas[?][?]
                        // 第二个列设值,i=1000,j=21:datas[0][1]=datas[?][?]
                        // 第三个列设值,i=1000,j=22:datas[0][2]=datas[?][?]

                        // 第二行
                        // 第一个列设值,i=1001,j=20:datas[1][0]=datas[?][?]
                        // 第二个列设值,i=1001,j=21:datas[1][1]=datas[?][?]
                        // 第三个列设值,i=1001,j=22:datas[1][2]=datas[?][?]
                        datas[i - startRow][j - startCell] = value;
                        // 当i+1的时候,到第二行去了

                    }
                }
            } catch (EncryptedDocumentException e) {
                // TODO Auto-generated catch blockXAQ
                e.printStackTrace();
            } catch (InvalidFormatException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            return datas;
        }

        /**
         * 前瞻  1:项目的每一个功能对应一个excel文档
         *         2:每个测试用例(检查点相同的测试用例)对应一个sheet
         *
         * @param excelPath
         */
        public static void read2007Excel(String excelPath) {
            try {
                XSSFWorkbook workbook = new XSSFWorkbook(ExcelUtil.class.getResourceAsStream(excelPath));
                XSSFSheet sheet = workbook.getSheetAt(0);
                int lastRowNum = sheet.getLastRowNum();
                for (int i = 0; i <= lastRowNum; i++) {
                    XSSFRow row = sheet.getRow(i);
                    // 最大的列号
                    int lastCellNum = row.getLastCellNum();
                    for (int j = 0; j <= lastCellNum; j++) {
                        XSSFCell cell = row.getCell(j, MissingCellPolicy.CREATE_NULL_AS_BLANK);
                        // 设置cell的类型为String类型
                        cell.setCellType(CellType.STRING);
                        // 获得该列string类型的值
                        String value = cell.getStringCellValue();
                        System.out.print(value + ",");
                    }
                    System.out.println("-------------");
                }

                // System.out.println("有"+lastRowNum+"行");
                // System.out.println("有"+sheet.getRow(0).getLastCellNum()+"列");

            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }

        public static void main(String[] args) {

    /*        Object[][] datas = readExcel("/register.xlsx", 2, 7, 1, 4);
            for (Object[] objects : datas) {
                System.out.println("--------");
                for (Object object : objects) {
                    System.out.print(object);
                    System.out.print(",");
                }
                System.out.println();
            }*/

            read2007Excel("/login.xlsx");
        }

    }
    以上是方法类

    调用

         /**
         * 数据提供者对应方法,读取xlsx内的数据
         * 从第几行开始 到第几行结束 从第几列开始 到第几列结束
         * @return
         */
        @DataProvider
        public Object[][] getLoginDatas(){
            Object[][] datas = ExcelUtil.readExcel("heduijiang_testcase.xlsx", 2, 9, 1, 3);
            return datas;
        }

        /**
         * 验证xlsx方法有没有问题
         * @param args
         */
        public static void main(String[] args){
            Object[][] datas = ExcelUtil.readExcel("/heduijiang_testcase.xlsx", 2, 9, 1, 3);
            for (Object[] objects : datas){
                for (Object object : objects){
                    System.out.print(object);
                }
            }
        }

           @Test(dataProvider="getLoginDatas")//@Test表示测试方法,测试登录
          public void f(String mobilephone, String pwd, String tips)

  • 相关阅读:
    svn环境搭建
    Svn正确的使用方法
    基于phpExcel写的excel类
    关于ecshop中jquery与js冲突解决的方案
    学习Javascript闭包(Closure)
    JS全局变量VAR和THIS
    python六十六课——单元测试(二)
    python六十五课——单元测试(一)
    python六十四课——高阶函数练习题(三)
    python六十四课——高阶函数练习题(二)
  • 原文地址:https://www.cnblogs.com/tiansc1/p/15707238.html
Copyright © 2011-2022 走看看