EasyExcel使用詳解

文章目錄

  • EasyExcel使用詳解
    • 一、引言
    • 二、環境準備與基礎配置
      • 1、添加依賴
      • 2、定義實體類
    • 三、Excel 讀取詳解
      • 1、基礎讀取
      • 2、自定義監聽器
      • 3、多 Sheet 處理
    • 四、Excel 寫入詳解
      • 1、基礎寫入
      • 2、動態列與復雜表頭
      • 3、樣式與模板填充
    • 五、總結

EasyExcel使用詳解

在這里插入圖片描述

一、引言

EasyExcel 是阿里巴巴開源的一款基于 Java 的 Excel 處理工具,專注于高性能和低內存占用,尤其適合處理百萬級數據的大文件。相比傳統的 Apache POI,EasyExcel 通過流式讀寫和智能內存管理,顯著降低了內存溢出風險,同時提供了簡潔的 API 和靈活的注解配置。本文將從基礎配置到實際應用場景,詳解 EasyExcel 的核心功能。


二、環境準備與基礎配置

1、添加依賴

pom.xml 中引入 EasyExcel 依賴(以最新穩定版為例):

<dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>3.2.0</version>
</dependency>

2、定義實體類

通過注解 @ExcelProperty 映射 Excel 列名或索引,@ExcelIgnore 忽略字段:

@Data
public class User {@ExcelProperty("用戶ID")private Long id;@ExcelProperty(value = "姓名", index = 1)  // 指定列索引private String name;@ExcelProperty("創建時間")private Date createTime;@ExcelIgnore  // 不參與讀寫private String remark;
}

三、Excel 讀取詳解

1、基礎讀取

使用 PageReadListener 實現分批處理(默認每 100 條處理一次):

String fileName = "user_data.xlsx";
EasyExcel.read(fileName, User.class, new PageReadListener<User>(dataList -> {dataList.forEach(user -> System.out.println("讀取數據:" + user.getName()));
})).sheet().doRead();

2、自定義監聽器

實現 ReadListener 接口,手動控制數據批次:

@Slf4j
public class UserListener implements ReadListener<User> {private static final int BATCH_SIZE = 200;private List<User> cachedList = new ArrayList<>(BATCH_SIZE);@Overridepublic void invoke(User user, AnalysisContext context) {cachedList.add(user);if (cachedList.size() >= BATCH_SIZE) {saveToDatabase(cachedList);  // 模擬入庫操作cachedList.clear();}}@Overridepublic void doAfterAllAnalysed(AnalysisContext context) {if (!cachedList.isEmpty()) saveToDatabase(cachedList);log.info("所有數據解析完成!");}private void saveToDatabase(List<User> list) {// 實際業務中調用 DAO 層}
}

調用方式:

EasyExcel.read(fileName, User.class, new UserListener()).sheet().doRead();

3、多 Sheet 處理

支持讀取多個 Sheet,每個 Sheet 可綁定不同監聽器:

try (ExcelReader excelReader = EasyExcel.read(fileName).build()) {ReadSheet sheet1 = EasyExcel.readSheet(0).head(User.class).registerReadListener(new UserListener()).build();ReadSheet sheet2 = EasyExcel.readSheet(1).head(Order.class).registerReadListener(new OrderListener()).build();excelReader.read(sheet1, sheet2);
}

四、Excel 寫入詳解

1、基礎寫入

直接寫入數據列表,自動生成表頭:

List<User> userList = queryUsersFromDB();  // 從數據庫查詢數據
EasyExcel.write("export_users.xlsx", User.class).sheet("用戶列表").doWrite(userList);

2、動態列與復雜表頭

通過 @ExcelProperty 定義多級表頭和列順序:

@Data
public class SaleData {@ExcelProperty({"銷售信息", "訂單號"})private String orderId;@ExcelProperty({"銷售信息", "金額"})private BigDecimal amount;@ExcelProperty(value = "時間", index = 2)  // 指定列順序private Date createTime;
}

3、樣式與模板填充

支持基于模板的填充(如財務報表):

// 填充模板中的占位符(如 {name})
Map<String, Object> data = new HashMap<>();
data.put("name", "張三");
data.put("amount", 10000);EasyExcel.write("report.xlsx").withTemplate("template.xlsx").sheet().doFill(data);

五、總結

EasyExcel 憑借其高性能低內存占用,成為處理大文件 Excel 的首選工具。通過靈活的注解配置和事件監聽機制,開發者可以輕松實現復雜的數據映射和分批處理邏輯。無論是數據導入導出,還是模板化報表生成,EasyExcel 均能高效完成。


版權聲明:本博客內容為原創,轉載請保留原文鏈接及作者信息。
參考文章

  • EasyExcel官方文檔
  • CSDN:EasyExcel詳解(結合官方文檔)

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/67220.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/67220.shtml
英文地址,請注明出處:http://en.pswp.cn/web/67220.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

objection的簡單使用

objection環境配置 下載以下版本 objection1.11.0 frida-tools9.2.4 python3.8.8 報錯的話看這里: 在這個網站下載frida-tools14.2.18的離線包Links for frida 然后放入C:\Users\Asus\frida-14.2.18-py3.8-win-amd64.egg文件夾下 執行poetry add frida-tools14.2.18 ob…

危機13小時:追蹤一場GitHub投毒事件

事件概要 自北京時間 2024.12.4 晚間6點起&#xff0c; GitHub 上不斷出現“幽靈倉庫”&#xff0c;倉庫中沒有任何代碼&#xff0c;只有誘導性的病毒文件。當天&#xff0c;他們成為了 GitHub 上 star 增速最快的倉庫。超過 180 個虛假僵尸賬戶正在傳播病毒&#xff0c;等待不…

【Redis】緩存+分布式鎖

目錄 緩存 Redis最主要的使用場景就是作為緩存 緩存的更新策略&#xff1a; 1.定期生成 2.實時生成 面試重點&#xff1a; 緩存預熱&#xff08;Cache preheating&#xff09;&#xff1a; 緩存穿透&#xff08;Cache penetration&#xff09; 緩存雪崩 (Cache avalan…

記錄 | MaxKB創建本地AI智能問答系統

目錄 前言一、重建MaxKBStep1 復制路徑Step2 刪除MaxKBStep3 創建數據存儲文件夾Step4 重建 二、創建知識庫Step1 新建知識庫Step2 下載測試所用的txtStep3 上傳本地文檔Step4 選擇模型補充智譜的API Key如何獲取 Step5 查看是否成功 三、創建應用Step1 新建應用Step2 配置AI助…

C#新語法

目錄 頂級語句&#xff08;C#9.0&#xff09; using 全局using指令&#xff08;C#10.0&#xff09; using資源管理問題 using聲明&#xff08;C#8.0&#xff09; using聲明陷阱 錯誤寫法 正確寫法 文件范圍的命名空間聲明&#xff08;C#10.0&#xff09; 可空引用類型…

基于dlib/face recognition人臉識別推拉流實現

目錄 一.環境搭建 二.推拉流代碼 三.人臉檢測推拉流 一.環境搭建 1.下載RTSP服務器MediaMTX與FFmpeg FFmpeg是一款功能強大的開源多媒體處理工具,而MediaMTX則是一個輕量級的流媒體服務器。兩者結合,可以實現將本地視頻或者實時攝像頭畫面推送到RTSP流,從而實現視頻…

Couchbase UI: Analytics

Couchbase 的 Analytics 頁面是用于執行分析查詢的部分&#xff0c;允許用戶對存儲在 Couchbase 中的數據進行復雜的分析和聚合。Analytics 提供了 SQL-like 查詢語言&#xff08;N1QL for Analytics&#xff09;&#xff0c;使得用戶能夠輕松地執行數據分析任務。以下是關于 C…

梯度下降優化算法-Adam

Adam&#xff08;Adaptive Moment Estimation&#xff09;是一種結合了動量法&#xff08;Momentum&#xff09;和 RMSProp 的自適應學習率優化算法。它通過計算梯度的一階矩&#xff08;均值&#xff09;和二階矩&#xff08;未中心化的方差&#xff09;來調整每個參數的學習率…

論文筆記(六十三)Understanding Diffusion Models: A Unified Perspective(六)(完結)

Understanding Diffusion Models: A Unified Perspective&#xff08;六&#xff09;&#xff08;完結&#xff09; 文章概括指導&#xff08;Guidance&#xff09;分類器指導無分類器引導&#xff08;Classifier-Free Guidance&#xff09; 總結 文章概括 引用&#xff1a; …

【PySide6快速入門】信號與槽的使用

文章目錄 前言什么是信號與槽信號與槽的功能最簡單的信號與槽控件連接信號與信號的連接總結 前言 在 PySide6 中&#xff0c;信號與槽機制是核心概念之一&#xff0c;它是 Qt 庫中事件通信的基礎。通過信號與槽&#xff0c;開發者能夠實現不同組件之間的解耦&#xff0c;從而使…

GOGOGO 枚舉

含義&#xff1a;一種類似于類的一種結構 作用&#xff1a;是Java提供的一個數據類型&#xff0c;可以設置值是固定的 【當某一個數據類型受自身限制的時候&#xff0c;使用枚舉】 語法格式&#xff1a; public enum 枚舉名{…… }有哪些成員&#xff1f; A、對象 public …

AWTK 骨骼動畫控件發布

Spine 是一款廣泛使用的 2D 骨骼動畫工具&#xff0c;專為游戲開發和動態圖形設計設計。它通過基于骨骼的動畫系統&#xff0c;幫助開發者創建流暢、高效的角色動畫。本項目是基于 Spine 實現的 AWTK 骨骼動畫控件。 代碼&#xff1a;https://gitee.com/zlgopen/awtk-widget-s…

[免費]基于Python的Django博客系統【論文+源碼+SQL腳本】

大家好&#xff0c;我是java1234_小鋒老師&#xff0c;看到一個不錯的基于Python的Django博客系統&#xff0c;分享下哈。 項目視頻演示 【免費】基于Python的Django博客系統 Python畢業設計_嗶哩嗶哩_bilibili 項目介紹 隨著互聯網技術的飛速發展&#xff0c;信息的傳播與…

如何將電腦桌面默認的C盤設置到D盤?詳細操作步驟!

將電腦桌面默認的C盤設置到D盤的詳細操作步驟&#xff01; 本博文介紹如何將電腦桌面&#xff08;默認為C盤&#xff09;設置在D盤下。 首先&#xff0c;在D盤建立文件夾Desktop&#xff0c;完整的路徑為D:\Desktop。winR&#xff0c;輸入Regedit命令。&#xff08;或者單擊【…

C++ 寫一個簡單的加減法計算器

************* C topic&#xff1a;結構 ************* Structure is a very intersting issue. I really dont like concepts as it is boring. I would like to cases instead. If I want to learn something, donot hesitate to make shits. Like building a house. Wh…

excel如何查找一個表的數據在另外一個表是否存在

比如“Sheet1”有“張三”、“李四”“王五”三個人的數據&#xff0c;“Sheet2”只有“張三”、“李四”的數據。我們通過修改“Sheet1”的“民族”或者其他空的列&#xff0c;修改為“Sheet2”的某一列。這樣修改后篩選這個修改的列為空的或者為出錯的&#xff0c;就能找到兩…

MySQL 基礎學習(2): INSERT 操作

在這篇文章中&#xff0c;我們將專注于 MySQL 中的 INSERT 操作&#xff0c;深入了解如何高效地向表中插入數據&#xff0c;并探索插入操作中的一些常見錯誤與解決方案。 一、基礎 INSERT 語法 在 MySQL 中&#xff0c;INSERT 操作用于向表中插入新記錄&#xff0c;基本語法如…

CVE-2023-38831 漏洞復現:win10 壓縮包掛馬攻擊剖析

目錄 前言 漏洞介紹 漏洞原理 產生條件 影響范圍 防御措施 復現步驟 環境準備 具體操作 前言 在網絡安全這片沒有硝煙的戰場上&#xff0c;新型漏洞如同隱匿的暗箭&#xff0c;時刻威脅著我們的數字生活。其中&#xff0c;CVE - 2023 - 38831 這個關聯 Win10 壓縮包掛…

論文閱讀(二):理解概率圖模型的兩個要點:關于推理和學習的知識

1.論文鏈接&#xff1a;Essentials to Understand Probabilistic Graphical Models: A Tutorial about Inference and Learning 摘要&#xff1a; 本章的目的是為沒有概率圖形模型背景或沒有深入背景的科學家提供一個高級教程。對于更熟悉這些模型的讀者&#xff0c;本章將作為…

記錄 | 基于Docker Desktop的MaxKB安裝

目錄 前言一、MaxKBStep 1Step2 二、運行MaxKB更新時間 前言 參考文章&#xff1a;如何利用智譜全模態免費模型&#xff0c;生成大家都喜歡的圖、文、視并茂的文章&#xff01; MaxKB的Github下載地址 參考視頻&#xff1a;【2025最新MaxKB教程】10分鐘學會一鍵部署本地私人專屬…