之前,我們使用了讀取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的內容(即我知道我需要讀取的范圍是哪些)。我們在使用自動化框架時,希望是按需讀取(即按照固定的數據結構格式來讀取),如果非要指定行/列的具體值,反而是舍近求遠了(數據太多了,我不知道從哪里開始讀)。
如何解決這個問題,我們將在后續討論。