最近在學習擼一個微服務項目,過程中遇到讀寫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. 寫操作
就是調用EasyExcel的write方法:
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 方法,應該可以看到監聽器里三個方法的不同輸出:

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