Java使用FastExcel高效讀取和寫入Excel
01 引言
FastExcel大家可能不熟悉,但是EasyExcel應該都使用過吧?
FastExcel是EasyExcel版本的延續(xù),自從阿里巴巴官方停止維護EasyExcel,EasyExcel的作者繼續(xù)維護起來,并持續(xù)改進優(yōu)化,并更名為FastExcel。
02 簡介
FastExcel 是一個 Java 庫,旨在高效地讀取和寫入 Excel 文件。它最初是 EasyExcel 的分叉版本,旨在提供增強的性能、持續(xù)維護和新功能,同時保持與原始 EasyExcel API 的兼容性。這使其成為在 Java 應用程序中處理 Excel 數據的強大的用戶友好的工具。
FastExcel 通過優(yōu)化內存使用來優(yōu)先考慮高性能,特別是在處理大型數據集時。它通過 SAX 解析機制實現這一點,以流式方式處理基于 XML 的 Excel 文件(XLSX),而無需一次性將整個文件加載到內存中。
官網地址:https://readmex.com/fast-excel/fastexcel/page-151366ada-2ea3-4451-aa3d-98ac90ce4f6e
Github地址:https://github.com/fast-excel/fastexcel
主要特性:
- 高性能讀寫:FastExcel 專注于性能優(yōu)化,能夠高效處理大規(guī)模的 Excel 數據。相比一些傳統(tǒng)的 Excel 處理庫,它能顯著降低內存占用。
- 簡單易用:該庫提供了簡潔直觀的 API,使得開發(fā)者可以輕松集成到項目中,無論是簡單的 Excel 操作還是復雜的數據處理都能快速上手。
- 流式操作:FastExcel 支持流式讀取,將一次性加載大量數據的問題降到最低。這種設計方式在處理數十萬甚至上百萬行的數據時尤為重要。
03 功能概要
業(yè)務項目中,我們經常需要讀寫Excel,如Excel的導入,導出。
3.1 Maven
<dependency>
<groupId>cn.idev.excel</groupId>
<artifactId>fastexcel</artifactId>
<version>1.2.0</version> <!-- Or the latest version -->
</dependency>
3.2 模型類
用來接收Excel數據的實體
@Data
public class Book {
private String bookName;
private String author;
private BigDecimal price;
private Date saleDate;
}
3.3 讀取Excel文件
API:

案例:
@Test
void test01() throws FileNotFoundException {
File file = ResourceUtils.getFile("classpath:file/demo.xls");
List<Book> bookList = new ArrayList<>();
FastExcel.read(file, Book.class, new ReadListener<Book>() {
@Override
public void invoke(Book book, AnalysisContext analysisContext) {
System.out.println("解析數據:" + JSON.toJSONString(book));
bookList.add(book);
}
@Override
public void doAfterAllAnalysed(AnalysisContext analysisContext) {
System.out.println("解析完所有數據....");
}
}).sheet().doRead();
System.out.println("bookList:" + JSON.toJSONString(bookList));
}
執(zhí)行結果:

代碼解析:
read(File file, Class head, ReadListener readListener)
FastExcel擁有靜態(tài)方法read()file:需要讀取的文件head:需要將文件解析的對象,按照字段的順序和excel的澍勛解析,也可以通過@ExcelProperty指定索引位置readListener:讀取每一條數據的監(jiān)聽器,處理數據也是這里處理的
FastExcel.read(...).sheet().doRead()
sheet():默認第一個sheet,也可以傳遞參數指定doRead():開始同步讀取數據,也可以異步讀取數據doReadSync()
3.4 寫入Excel文件
寫入文件之前,我們需要定義模板類的名稱,需要使用到@ExcelProperty
@Data
public class Book {
@ExcelProperty(value = "書名")
private String bookName;
@ExcelProperty(value = "作者")
private String author;
@ExcelProperty(value = "價格")
@NumberFormat("#,###.00")
private BigDecimal price;
@ExcelProperty(value = "上架時間")
@DateTimeFormat("yyyy-MM-dd")
private Date saleDate;
}
API:

案例:
@Test
void test02() {
List<Book> bookList = new ArrayList<>();
for (int i = 0; i < 5; i++) {
Book item = new Book();
item.setBookName("Java" + i);
item.setAuthor("張三" + i);
item.setPrice(new BigDecimal("2002.35"));
item.setSaleDate(new Date());
bookList.add(item);
}
FastExcel.write("writeDemo.xls", Book.class).sheet().sheetName("test").doWrite(bookList);
}
執(zhí)行結果:

代碼解析:
write(String pathName, Class head)
FastExcel擁有靜態(tài)方法write()pathName:文件要生成的位置head:模板類,這個生成Excel的關鍵
FastExcel.write(...).sheet().sheetName("test").doWrite(bookList)
sheet():寫入sheet的位置,默認第一個sheetName("test"):自定義sheet的名稱doWrite():要寫入的數據源
04 小結
FastExcel替我們省去了使用POI的繁瑣,使用起來只關系需要處理的數據即可,非常方便。EasyExcel和FastExcel在使用上基本沒有什么區(qū)別,因為同宗同源。
EasyExcel已經停止維護了,你會去遷移到FastExcel上么?作者給出了幾個遷移優(yōu)勢:

以上就是Java使用FastExcel高效讀取和寫入Excel的詳細內容,更多關于Java FastExcel讀取和寫入Excel的資料請關注腳本之家其它相關文章!
相關文章
springboot?aop配合反射統(tǒng)一簽名驗證實踐
這篇文章主要介紹了springboot?aop配合反射統(tǒng)一簽名驗證實踐,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-12-12
SpringBoot集成MyBatisPlus+MySQL的實現
MybatisPlus是國產的第三方插件, 它封裝了許多常用的CURDapi,免去了我們寫mapper.xml的重復勞動,本文主要介紹了SpringBoot集成MyBatisPlus+MySQL的實現,感興趣的可以了解一下2023-10-10
Spring?boot如何在IDEA中讓一個應用在不同的端口多次啟動詳解
在開發(fā)過程中,SpringBoot項目的多端口啟動是一個實用的需求,特別是在進行并發(fā)測試或者隔離環(huán)境時,這篇文章主要介紹了Spring?boot如何在IDEA中讓一個應用在不同的端口多次啟動的相關資料,需要的朋友可以參考下2026-01-01
淺析SpringBoot微服務中異步調用數據提交數據庫的問題
這篇文章主要介紹了SpringBoot微服務中異步調用數據提交數據庫的問題,今天本文涉及到的知識點不難,都是很簡單的crud操作,本文結合實例代碼給大家介紹的非常詳細,需要的朋友可以參考下2022-07-07

