【測試開發】知識點-使用EasyExcel,實現excel文件的讀寫操作


最近在學習擼一個微服務項目,過程中遇到讀寫excel的操作,可以通過使用 EasyExcel 來實現。

一、EasyExcel 簡介

EasyExcel是一個基於Java的簡單、省內存的讀寫Excel的開源項目(阿里巴巴)。在盡可能節約內存的情況下支持讀寫百M的Excel。

文檔地址:https://alibaba-easyexcel.github.io/index.html
github地址:https://github.com/alibaba/easyexcel

二、快速使用

1.引入依賴

使用之前引入依賴:

<dependencies>
    <!-- https://mvnrepository.com/artifact/com.alibaba/easyexcel -->
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>easyexcel</artifactId>
        <version>2.1.1</version>
    </dependency>
</dependencies>

2. 創建實體類

這個實體類內容要與excel文件里的內容綁定,可以在類的屬性上添加注解@ExcelProperty,設置excel表頭內容。

package com.pingguo.easyexcel;

import com.alibaba.excel.annotation.ExcelProperty;
import lombok.Data;

@Data
public class UserData {

    @ExcelProperty("用戶id")
    private int uid;

    @ExcelProperty("用戶名稱")
    private String username;
}

3. 寫操作

就是調用EasyExcelwrite方法:

public class TestWrite {
    public static void main(String[] args) {
        // 要寫到excel數據的list集合
        List<UserData> list = new ArrayList<>();
        for (int i=0; i<10; i++) {
            UserData data = new UserData();
            data.setUid(i);
            data.setUsername("tester"+i);
            list.add(data);
        }
        // 設置excel文件路徑和文件名稱
        String fileName = "C:\\testwriteexcel\\01.xlsx";
        // 調用方法實現寫操作
        EasyExcel.write(fileName, UserData.class).sheet("用戶信息")
                .doWrite(list);
    }
}

運行測試下:

打開路徑下的文件,查看寫入的內容。

4. 讀操作

還是以上面的文件內容和實體類為例,對於讀操作,需要改動一下注解,里面加上字段在excel列的索引。

@Data
public class UserData {

    @ExcelProperty(value = "用戶id", index = 0)
    private int uid;

    @ExcelProperty(value = "用戶名稱", index = 1)
    private String username;
}

監聽器

讀操作需要寫一個監聽器,作用就是一行一行的來讀取 excel 的內容。

public class ExcelListener extends AnalysisEventListener<UserData> {
    // 一行一行的讀取內容,從第二行開始
    @Override
    public void invoke(UserData userData, AnalysisContext analysisContext) {
        System.out.println(userData);
    }

    // 讀取之后會執行的方法
    @Override
    public void doAfterAllAnalysed(AnalysisContext analysisContext) {
        System.out.println("讀取后執行的操作");
    }

    // 讀取第一行表頭信息
    @Override
    public void invokeHeadMap(Map<Integer, String> headMap, AnalysisContext context) {
        System.out.println("表頭信息:"+headMap);
    }
}

這里實現了3個方法是比較常用的:

  • invoke: 一行一行的讀取內容,從第二行開始
  • invokeHeadMap: 讀取第一行表頭信息
  • doAfterAllAnalysed: 讀取之后會執行的方法

新建個類測試一下讀取:

package com.pingguo.easyexcel;

import com.alibaba.excel.EasyExcel;

public class TestRead {
    public static void main(String[] args) {
        // 讀取文件的路徑
        String fileName = "C:\\testwriteexcel\\01.xlsx";
        // 調用方法進行讀取
        EasyExcel.read(fileName, UserData.class, new ExcelListener()).sheet().doRead();
    }
}

EasyExcel.read方法里有 3 個參數,分別是:文件、讀取內容的類型、監聽器。

執行一下 main 方法,應該可以看到監聽器里三個方法的不同輸出:

學會了讀寫操作,接下來就可以整合項目,實現導入和導出功能了,下節更新。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM