zoukankan      html  css  js  c++  java
  • Java解析Excel

    前两天总结了些关于Excel和CSV结合TestNG进行数据驱动测试的例子,对于Excel存放TestCase和关键字如何进行解析,也做了对应的总结,希望在学习的路上勇往直前,有不对的地方,希望大家指出,共同学习共同进步。

    采用的是POI对Excel进行的解析,需要的Jar包文件:

    poi-3.11-20141221.jar

    poi-ooxml-3.11-20141221.jar

    poi-ooxml-schemas-3.11-20141221.jar

    xmlbeans-2.6.0.jar

    代码如下:

    package com.util.datadriver;
    
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.util.ArrayList;
    import java.util.List;
    
    import org.apache.poi.hssf.usermodel.HSSFWorkbook;
    import org.apache.poi.ss.usermodel.Cell;
    import org.apache.poi.ss.usermodel.Row;
    import org.apache.poi.ss.usermodel.Sheet;
    import org.apache.poi.ss.usermodel.Workbook;
    import org.apache.poi.xssf.usermodel.XSSFWorkbook;
    
    /**
     * 通过POI对Excel中的数据进行基本的操作
     * 
     * 需要导入额jar包: poi-3.11-20141221.jar、 poi-ooxml-3.11-20141221.jar、
     *         poi-ooxml-schemas-3.11-20141221.jar、 xmlbeans-2.6.0.jar
     * 
     */
    public class ExcelController {
    
        Workbook workbook = null;
        Sheet sheet = null;
    
        public void setExcelFile(String filePath, String fileName, String sheetName) {
    
            try {
    
                FileInputStream fis = new FileInputStream(new File(filePath));
                String type = fileName.substring(fileName.indexOf("."));
                if (type.equals(".xlsx")) {
    
                    workbook = new XSSFWorkbook(fis);
    
                } else if (type.equals(".xls")) {
    
                    workbook = new HSSFWorkbook(fis);
                }
    
                sheet = workbook.getSheet(sheetName);
                fis.close();
    
            } catch (Exception e) {
                e.printStackTrace();
            }
            
    
        }
    
        //获取单元格的值
        public String getCellData(int row, int column){
            
            try {
                
                //获得Cell单元格对象
                Cell cell = sheet.getRow(row).getCell(column);
                //设置cell返回值的类型
                cell.setCellType(Cell.CELL_TYPE_STRING);
                //获取到cell单元格中的值
                String cellData = cell.getStringCellValue();
                return cellData;
                
            } catch (Exception e) {
                
                throw(e);
            }
        }
        
        //设置单元格的值
        @SuppressWarnings("static-access")
        public void setCellData(String value, int rowCount, int columnCount, String filePath){
            
            try {
                
                Row row = sheet.getRow(rowCount);
                Cell cell = row.getCell(columnCount,row.RETURN_BLANK_AS_NULL);
                
                if(cell == null){
                    
                    row.createCell(columnCount).setCellValue(value);
                    
                }else {
                    
                    cell.setCellValue(value);
                }
                
                FileOutputStream fos = new FileOutputStream(new File(filePath));
                workbook.write(fos);
                fos.flush();
                fos.close();
                
            } catch (Exception e) {
                
                e.printStackTrace();
            }
            
    
        }
        
        //获取Excel的行数
        public int getColCount(Sheet sheet1){
            
            int firstColCount = sheet1.getFirstRowNum();
            int lastColCount = sheet1.getLastRowNum();
            int sumColCount = lastColCount - firstColCount + 1;
            return sumColCount;
            
        }
        
        //获取Excel中每行的数据,并用数组返回每行所有数据,方便与TestNG做数据驱动
        
        public Object[][] getExcelData(String filePath, String fileName,
                String sheetName) throws Exception {
    
            int sumRowCount = getColCount(sheet);;
    
            List<Object[]> list = new ArrayList<Object[]>();
    
            // 获取每行的行对象,第一行为信息栏,不计入,所以从1开始
            for (int i = 1; i < sumRowCount; i++) {
                Row row = sheet.getRow(i);
                // 获得一行中最后单元格的count
                int lastCellCount = row.getLastCellNum();
    
                // 定义一个数组来存放cell中值,根据cell的长度来定义数组的长度
                String[] fileds = new String[lastCellCount];
    
                for (int j = 0; j < lastCellCount; j++) {
                    String cellValue = row.getCell(j).getStringCellValue();
                    fileds[j] = cellValue;
                }
                list.add(fileds);
            }
            
            // 定义一个object[][] 的二维数组,存放list中的值
            Object[][] results = new Object[list.size()][];
            // 设置二维数组每行的值,
            for (int a = 0; a < list.size(); a++) {
    
                results[a] = list.get(a);
    
            }
    
            return results;
    
        }
        
    }
  • 相关阅读:
    总结(yst)
    iOS 中 OC项目使用swift第三方工具(OC、swift 混合)
    iOS Appstore 版本更新
    软件设计模式
    iOS huhuProject积累
    iOS暴力禁用navigationviewcontroller右滑手势和手势的优先级
    ios 真机调试支持包的路径
    ios 沙盒路径
    Undefined symbols for architecture x86_64 "_OBJC_CLASS_$_类名",referenced fromobjc-class in .o
    pako.js GZIP定义解压和压缩的方法
  • 原文地址:https://www.cnblogs.com/taoSir/p/5106352.html
Copyright © 2011-2022 走看看