easypoi 讀取 Excel 簡單應用

tester_ggf發表於2020-06-13

背景

在做介面測試的時候,經常會使用 Excel 來儲存對應的介面資訊和用例資訊,為了方便程式的讀取,引入easypoi 工具來讀取 Excel 內容。easypoi 比起 poi 使用更加的方便,程式碼量也少很多。

應用程式碼

例如我想讀取下面 Excel 中的介面資訊:

  • 引入對應 easypoi 依賴:
<!--easypoi依賴--> 
<dependency>
     <groupId>cn.afterturn</groupId>
     <artifactId>easypoi-annotation</artifactId>
     <version>4.0.0</version>
</dependency>
<dependency>
    <groupId>cn.afterturn</groupId>
    <artifactId>easypoi-base</artifactId>
    <version>4.0.0</version>
</dependency>
<!--   新增校驗,在easypoi讀取Excel時,可以去掉空行,同時對欄位進行強制校驗    -->
<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-validator</artifactId>
    <version>5.2.4.Final</version>
</dependency>
<dependency>
    <groupId>javax.el</groupId>
    <artifactId>javax.el-api</artifactId>
    <version>2.2.4</version>
</dependency>
  • 建立對應的實體類:
package com.ggf.juhe.pojo;

import cn.afterturn.easypoi.excel.annotation.Excel;

import javax.validation.constraints.NotNull;

/**
 * @Description: 介面資訊實體類
 * @Author: ggf
 * @Date: 2020/06/13
 */
public class ApiInfo {
    /**
     * 介面編號
     */
    @Excel(name="介面編號")
    private String id;
    /**
     * 介面名稱
     */
    @Excel(name="介面名稱")
    private String name;
    /**
     * 請求URL
     */
    @Excel(name="介面地址")
    @NotNull
    private String url;
    /**
     * 介面請求方式
     */
    @Excel(name="介面提交方式")
    private String method;
    /**
     * 請求資料型別
     */
    @Excel(name="介面引數型別")
    private String type;

    public ApiInfo() {
    }

    public ApiInfo(String id, String name, String method, String url, String type) {
        this.id = id;
        this.name = name;
        this.method = method;
        this.url = url;
        this.type = type;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getMethod() {
        return method;
    }

    public void setMethod(String method) {
        this.method = method;
    }

    public String getUrl() {
        return url;
    }

    public void setUrl(String url) {
        this.url = url;
    }

    public String getType() {
        return type;
    }

    public void setType(String type) {
        this.type = type;
    }

    @Override
    public String toString() {
        return "ApiInfo{" +
                "id='" + id + '\'' +
                ", name='" + name + '\'' +
                ", method='" + method + '\'' +
                ", url='" + url + '\'' +
                ", type='" + type + '\'' +
                '}';
    }
}
  • easypoi 讀取 Excel 程式碼:
package com.ggf.juhe.demo;

import cn.afterturn.easypoi.excel.ExcelImportUtil;
import cn.afterturn.easypoi.excel.entity.ImportParams;
import com.ggf.juhe.pojo.ApiInfo;

import java.io.FileInputStream;
import java.io.IOException;
import java.util.Collections;
import java.util.List;

/**
 * @Description:
 * @Author: ggf
 * @Date: 2020/06/13
 */
public class EasypoiDemo {
    public static void main(String[] args) {
        String filePath = "src/main/resources/jhapi_case.xlsx";
        List<ApiInfo> apiInfos = readExcel(filePath, 0, ApiInfo.class);
        for (ApiInfo apiInfo : apiInfos) {
            System.out.println(apiInfo);
        }
    }

    /**
     *
     * @param filePath Excel檔案路徑
     * @param sheetIndex 對應的表單,從0開始,0代表第一個表單
     * @param clazz 對應封裝的資料例項物件
     * @return 返回資料集合
     */
    public static <E> List<E> readExcel(String filePath, int sheetIndex, Class<E> clazz) {
        // 定義輸入流
        FileInputStream fis = null;
        List<E> datas = null;

        try {
            // 建立輸入流物件
            fis = new FileInputStream(filePath);
            // 建立一個easypoi使用的配置類
            ImportParams params = new ImportParams();
            // 設定表格座標
            params.setStartSheetIndex(sheetIndex);
            // 校驗Excel檔案,去掉空行
            params.setNeedVerify(true);
            // 讀取資料
            datas = ExcelImportUtil.importExcel(fis, clazz, params);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                if (fis != null) {
                    fis.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

        return datas;
    }
}

  • 列印結果

相關文章