jxl读取Excel表格数据

调用jxl包实现Excel表格数据的读取,代码如下:

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;

import jxl.Sheet;
import jxl.Workbook;
import jxl.read.biff.BiffException;

/**
 * @Description: Excel数据处理(使用中)
 * @author 
 * @date 创建时间:2016年10月11日下午12:49:46
 * @version 1.0
 */
public class ExcelData {
    private Workbook workbook;
    private Sheet sheet;
    private int rows;
    private int columns;
    private String fileName;
    private String caseName;
    private ArrayList<String> arrkey = new ArrayList<String>();
    private String sourceFile;
    
    private Log log = new Log(this.getClass());
    /**
     * @param fileName excel文件名
     * @param caseName sheet名
     */
    public ExcelData(String fileName, String caseName) {
        super();
        this.fileName = fileName;
        this.caseName = caseName;
    }

    /**
     * 获得excel表中的数据
     */
    public Object[][] getExcelData() throws BiffException, IOException {
        workbook = Workbook.getWorkbook(new File(getPath()));
        sheet = workbook.getSheet(caseName);
        rows = sheet.getRows();
        columns = sheet.getColumns();
        // 为了返回值是Object[][],定义一个多行单列的二维数组
        HashMap<String, String>[][] arrmap = new HashMap[rows - 1][1];
        // 对数组中所有元素hashmap进行初始化
        if (rows > 1) {
            for (int i = 0; i < rows - 1; i++) {
                arrmap[i][0] = new HashMap<String , String>();
            }
        } else {
            log.error("excel中没有数据");
        }

        // 获得首行的列名,作为hashmap的key值
        for (int c = 0; c < columns; c++) {
            String cellvalue = sheet.getCell(c, 0).getContents();
            arrkey.add(cellvalue);
        }
        // 遍历所有的单元格的值添加到hashmap中
        for (int r = 1; r < rows; r++) {
            for (int c = 0; c < columns; c++) {
                String cellvalue = sheet.getCell(c, r).getContents();
                arrmap[r - 1][0].put(arrkey.get(c), cellvalue);
            }
        }
        return arrmap;
    }
    
    /**
     * 获得excel文件的路径
     * @return
     * @throws java.io.IOException
     */

    public String getPath() throws IOException {       
        sourceFile = "test-data/" + fileName + ".xls"; 
        log.info("sourceFile = "+sourceFile);
        return sourceFile;
    }

}

调用方式如下:

    /**
     * 从对应Excel表格读取数据
     * 
     * @param 
     * @return
     * @throws Exception 
     */
    @DataProvider(name = "componentMessageQueryCase")
    private Object[][] QueryComponentMessageNumbers() throws Exception {
        // 获取Excel数据,得到一个map,依次传给test
        ExcelData e = new ExcelData("ComponentMessageTestCase", "componentMessageQueryCase");
        log.info("componentMessageQueryCase e.getExcelData() = " + e.getExcelData());
        return e.getExcelData();
    }    
    /**
     * 测试配件管理页面的查询功能
     * 
     * @param data 从对应Excel获取的测试数据
     * @return
     * @throws Exception 
     */
    @Test(dataProvider = "componentMessageQueryCase")
    private void componentMessageQueryCase(HashMap<String, String> data) throws Exception{
        log.info("测试配件查询功能");
        
        String OEMCode = data.get("OEMCode");
        String brandName = data.get("brandName");
        String seriesId = data.get("seriesId");
        String modelId = data.get("modelId");
        String componentNo = data.get("componentNo");
        String componentName = data.get("componentName");
        ComponentManageQuery.componentMessageQuery( OEMCode, brandName, seriesId, modelId, componentNo, componentName);
   }

 

posted @ 2016-11-23 10:53  钉子尹  阅读(676)  评论(0编辑  收藏  举报