Java使用EasyExcel實(shí)現(xiàn)高效的Excel讀寫(xiě)操作
引言
在日常開(kāi)發(fā)中,Excel 文件的讀寫(xiě)操作是一個(gè)常見(jiàn)的需求。EasyExcel 是阿里巴巴開(kāi)源的一個(gè)高性能、易用的 Excel 讀寫(xiě)庫(kù),可以大幅提高處理 Excel 文件的效率。它通過(guò)事件驅(qū)動(dòng)模型優(yōu)化了大數(shù)據(jù)量 Excel 的讀寫(xiě)性能,非常適合處理大文件或高并發(fā)場(chǎng)景。
本篇博客將從 EasyExcel 的基本概念、優(yōu)勢(shì)、安裝、讀寫(xiě)操作以及高級(jí)用法展開(kāi),并提供清晰的代碼示例。
一、EasyExcel 的核心特點(diǎn)
- 高性能:基于流式解析,低內(nèi)存消耗,適合大數(shù)據(jù)量操作。
- 簡(jiǎn)單易用:提供了強(qiáng)大的注解支持,配置簡(jiǎn)單。
- 兼容性強(qiáng):支持 Excel 2007(
.xlsx
)及更高版本。 - 事件驅(qū)動(dòng)模型:按需讀取,避免一次性加載所有數(shù)據(jù)到內(nèi)存。
- 支持復(fù)雜表頭:可以輕松處理多級(jí)表頭、合并單元格等復(fù)雜場(chǎng)景。
二、安裝 EasyExcel
首先,在你的 Maven 項(xiàng)目中引入 EasyExcel 的依賴(lài):
<dependency> <groupId>com.alibaba</groupId> <artifactId>easyexcel</artifactId> <version>4.0.3</version> <!-- 請(qǐng)使用最新版本 --> </dependency>
三、基本用法
1. 寫(xiě)入 Excel
以下是一個(gè)簡(jiǎn)單的 Excel 寫(xiě)入示例:
import com.alibaba.excel.EasyExcel; import java.util.ArrayList; import java.util.List; public class EasyExcelWriteExample { public static void main(String[] args) { String fileName = "example.xlsx"; // 準(zhǔn)備數(shù)據(jù) List<UserData> data = generateData(); // 寫(xiě)入文件 EasyExcel.write(fileName, UserData.class) .sheet("用戶(hù)信息") .doWrite(data); } private static List<UserData> generateData() { List<UserData> list = new ArrayList<>(); for (int i = 1; i <= 10; i++) { list.add(new UserData(i, "用戶(hù)" + i, "user" + i + "@example.com")); } return list; } // 數(shù)據(jù)類(lèi),使用注解指定表頭 public static class UserData { @com.alibaba.excel.annotation.ExcelProperty("用戶(hù)ID") private Integer id; @com.alibaba.excel.annotation.ExcelProperty("用戶(hù)名") private String name; @com.alibaba.excel.annotation.ExcelProperty("郵箱") private String email; // 構(gòu)造函數(shù)、Getter 和 Setter public UserData(Integer id, String name, String email) { this.id = id; this.name = name; this.email = email; } } }
說(shuō)明:
@ExcelProperty
注解用于指定 Excel 列的標(biāo)題。EasyExcel.write()
是寫(xiě)操作的入口,指定文件路徑和數(shù)據(jù)模型。
運(yùn)行以上代碼后,會(huì)生成一個(gè)名為 example.xlsx
的文件,包含一張標(biāo)題為“用戶(hù)信息”的表單。
2. 讀取 Excel
以下示例展示如何讀取 Excel 文件內(nèi)容:
import com.alibaba.excel.EasyExcel; import com.alibaba.excel.context.AnalysisContext; import com.alibaba.excel.read.listener.ReadListener; import java.util.List; public class EasyExcelReadExample { public static void main(String[] args) { String fileName = "example.xlsx"; // 讀取文件 EasyExcel.read(fileName, UserData.class, new UserDataListener()) .sheet() .doRead(); } // 自定義監(jiān)聽(tīng)器,處理每一行數(shù)據(jù) public static class UserDataListener implements ReadListener<UserData> { @Override public void invoke(UserData data, AnalysisContext context) { System.out.println("讀取到數(shù)據(jù):" + data); } @Override public void doAfterAllAnalysed(AnalysisContext context) { System.out.println("所有數(shù)據(jù)讀取完畢"); } } }
四、高級(jí)功能
1. 多級(jí)表頭
EasyExcel 支持復(fù)雜的多級(jí)表頭:
public class MultiLevelData { @com.alibaba.excel.annotation.ExcelProperty({"用戶(hù)信息", "用戶(hù)ID"}) private Integer id; @com.alibaba.excel.annotation.ExcelProperty({"用戶(hù)信息", "用戶(hù)名"}) private String name; @com.alibaba.excel.annotation.ExcelProperty({"聯(lián)系方式", "郵箱"}) private String email; }
在寫(xiě)入時(shí),會(huì)生成兩級(jí)表頭,分為“用戶(hù)信息”和“聯(lián)系方式”。
2. 大數(shù)據(jù)量讀取
針對(duì)大文件,EasyExcel 提供了分批讀取的能力。
EasyExcel.read(fileName, UserData.class, new ReadListener<UserData>() { @Override public void invoke(UserData data, AnalysisContext context) { // 處理每一條數(shù)據(jù) } @Override public void doAfterAllAnalysed(AnalysisContext context) { // 處理完成后執(zhí)行 } }).sheet().doRead();
通過(guò)監(jiān)聽(tīng)器,每次讀取一小部分?jǐn)?shù)據(jù)處理,避免內(nèi)存溢出。
五、使用場(chǎng)景
- 導(dǎo)出數(shù)據(jù)報(bào)表:支持復(fù)雜的表格格式和多級(jí)表頭,可以生成格式化的報(bào)表文件。
- 批量導(dǎo)入:支持從 Excel 導(dǎo)入數(shù)據(jù)到數(shù)據(jù)庫(kù),處理高并發(fā)上傳。
- 日志分析:處理大文件日志的導(dǎo)入和分析。
六、常見(jiàn)問(wèn)題
- 內(nèi)存溢出:對(duì)于大數(shù)據(jù)量,建議使用分批讀取,避免一次性加載過(guò)多數(shù)據(jù)。
- 日期格式問(wèn)題:使用
@ExcelProperty
的converter
屬性自定義日期格式。 - 合并單元格:需要自定義攔截器,控制單元格的樣式和合并行為。
七、總結(jié)
EasyExcel 是一個(gè)功能強(qiáng)大且高效的 Excel 操作工具。它通過(guò)簡(jiǎn)化代碼結(jié)構(gòu)、優(yōu)化性能和豐富的功能支持,成為 Java 開(kāi)發(fā)者處理 Excel 文件的首選庫(kù)。通過(guò)本篇博客的講解,相信你已經(jīng)掌握了 EasyExcel 的基本用法和高級(jí)功能,能夠在實(shí)際項(xiàng)目中高效處理 Excel 文件。
以上就是Java使用EasyExcel實(shí)現(xiàn)高效的Excel讀寫(xiě)操作的詳細(xì)內(nèi)容,更多關(guān)于Java EasyExcel實(shí)現(xiàn)Excel讀寫(xiě)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
MyBatis-Plus逆向工程——Generator的使用
這篇文章主要介紹了MyBatis-Plus逆向工程——Generator的使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01java實(shí)現(xiàn)合并單元格的同時(shí)并導(dǎo)出excel示例
這篇文章主要給大家介紹了關(guān)于java實(shí)現(xiàn)合并單元格的同時(shí)并導(dǎo)出excel的相關(guān)資料,文中先進(jìn)行了簡(jiǎn)單的介紹,之后給出了詳細(xì)的示例代碼,相信對(duì)大家具有一定的參考價(jià)值,需要的朋友們下面來(lái)一起看看吧。2017-03-03Springboot jar包 idea 遠(yuǎn)程調(diào)試的操作過(guò)程
文章介紹了如何在IntelliJ IDEA中遠(yuǎn)程調(diào)試Spring Boot項(xiàng)目的Jar包,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧2024-11-11