generalli

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

  之前,我们使用了读取XML文件的方式来实现页面元素的读取,并做成了基础页面类。下面,我们来进行一些扩展,通过Excel来读取页面元素。

  Excel的使用,大多数人应该都不陌生。那么Java读取Excel的方式主要有两种,这两种分别使用的是不同的jar包来实现。本篇我们来介绍其中的一种,即使用JXL的jar包,实现Excel文件的读取。

  在项目中导入jar包:jxl-2.6.12.jar  下载地址:https://mvnrepository.com/artifact/net.sourceforge.jexcelapi/jxl/2.6.12

package webui.xUtils;

import java.io.File;
import org.testng.Reporter;

import jxl.Cell;
import jxl.Sheet;
import jxl.Workbook;

public class ExcelReadJXL {
    /**
     *jxl读取Excel
     *指定文档路径及名称 
     * 指定开始及结束行,开始及结束列
     * @param sheet_name 为sheet工作表名称,也可以用整型数字,从0开始。
     * @param start_row 开始行,0开始
     * @param end_row 结束行,0开始
     * @param start_col 开始列,0开始
     * @param end_col 结束列,0开始
     * @param sourcefile .xls文件路径
     * @return Object[][]
     */
    private static logUtil log;
    
    public static Object[][] caseDataExcel(String sheet_name,int start_row,int end_row,int start_col,int end_col,String sourcefile){
        String cell_value = null;
        Cell cell = null;
        int row_length = end_row - start_row +1;
        int col_length = end_col - start_col +1;
        String [][] testcase_data = new String [row_length][col_length];
        Workbook testcase_data_book = null;
        try {
            testcase_data_book = Workbook.getWorkbook(new File(sourcefile));
            Sheet testcase_data_sheet = testcase_data_book.getSheet(sheet_name);
            //判断输入的数值是否超出范围值
            if (end_row-start_row+1>row_length) {
                log.error("选择的行数超出实际数据范围!请修改起始结束行数..");
                Reporter.log("选择的行数超出实际数据范围!请修改起始结束行数..");
            }
            if (end_col-start_col+1>col_length) {
                log.error("选择的数据列数超出实际数据范围内!请修改起始结束列数..");
                Reporter.log("选择的数据列数超出实际数据范围内!请修改起始结束列数..");
            }
            //整体思想为:按每行为一组数据进行读取
            //外循环--行数
            for(int row = start_row,i = 0;row <= end_row || i < testcase_data.length ; row++,i++) {
                //单独一行时,读取每一列的数据
                //内循环--列数
                for(int col = start_col,j = 0;col <= end_col || j < col_length ; col++,j++) {
                    cell = testcase_data_sheet.getCell(col,row);
                    cell_value = cell.getContents();
                    testcase_data[i][j] = cell_value;
                }
            }
        }catch (Exception e) {
            e.printStackTrace();
        }
//        log.info("读取Excel数据完成!");
        Reporter.log("读取Excel数据完成!");
        return testcase_data;
    }
    //读取全部sheet页数据
    public static Object[][] case_data_excel_jxl(String sheet_name,String sourcefile){
        String cell_value = null;
        Cell cell = null;
        String[][] testcase_data = null;
        Workbook testcase_data_book = null;
        try {
            testcase_data_book = Workbook.getWorkbook(new File(sourcefile));
            Sheet testcase_data_sheet = testcase_data_book.getSheet(sheet_name);
            int rows = testcase_data_sheet.getRows();
            int cols = testcase_data_sheet.getColumns();
            testcase_data = new String[rows][cols];
            //整体思想仍然是按行获取
            //外循环--行数
            for(int i = 0 ; i < rows ; i++) {
                //内循环--列数,取每一行中每一列的数据
                for(int j = 0 ; j < cols ; j++) {
                    //数据形式为(列号,行号)
                    cell = testcase_data_sheet.getCell(j, i);
                    cell_value = cell.getContents();
                    //存入字符串数组的形式为(行号,列号)
                    testcase_data[i][j] = cell_value;
                }
            }
        }catch (Exception e) {
            e.printStackTrace();
        }
        return testcase_data;
    }
}

  从上面的代码可以看到,使用JXL的jar包来完成Excel的读取是相对简单的。主要的思想就是在指定行/列的范围,然后使用双循环进行遍历,从而达到读取数据的目的。

  但是,使用JXL读取是通常意义上的读取Excel的内容(即我知道我需要读取的范围是哪些)。我们在使用自动化框架时,希望是按需读取(即按照固定的数据结构格式来读取),如果非要指定行/列的具体值,反而是舍近求远了(数据太多了,我不知道从哪里开始读)。

  如何解决这个问题,我们将在后续讨论。

posted on 2019-08-28 15:57  万春流  阅读(1151)  评论(0编辑  收藏  举报