关注我的公众号:【编程朝花夕拾】,可获取首发内容。

01 引言
FastExcel
大家可能不熟悉,但是EasyExcel
应该都使用过吧?
FastExcel
是EasyExcel
版本的延续,自从阿里巴巴官方停止维护EasyExcel
,EasyExcel
的作者继续维护起来,并持续改进优化,并更名为FastExcel
。

02 简介
FastExcel
是一个 Java
库,旨在高效地读取和写入 Excel
文件。它最初是 EasyExcel
的分叉版本,旨在提供增强的性能、持续维护和新功能,同时保持与原始 EasyExcel API
的兼容性。这使其成为在 Java
应用程序中处理 Excel
数据的强大的用户友好的工具。
FastExcel
通过优化内存使用来优先考虑高性能,特别是在处理大型数据集时。它通过 SAX
解析机制实现这一点,以流式方式处理基于 XML
的 Excel
文件(XLSX
),而无需一次性将整个文件加载到内存中。
官网地址:readmex.com/fast-excel/...
Github地址:github.com/fast-excel/...
主要特性:
- 高性能读写:FastExcel 专注于性能优化,能够高效处理大规模的 Excel 数据。相比一些传统的 Excel 处理库,它能显著降低内存占用。
- 简单易用:该库提供了简洁直观的 API,使得开发者可以轻松集成到项目中,无论是简单的 Excel 操作还是复杂的数据处理都能快速上手。
- 流式操作:FastExcel 支持流式读取,将一次性加载大量数据的问题降到最低。这种设计方式在处理数十万甚至上百万行的数据时尤为重要。
03 功能概要
业务项目中,我们经常需要读写Excel
,如Excel的导入,导出。
3.1 Maven
xml
<dependency>
<groupId>cn.idev.excel</groupId>
<artifactId>fastexcel</artifactId>
<version>1.2.0</version> <!-- Or the latest version -->
</dependency>
3.2 模型类
用来接收Excel数据的实体
java
@Data
public class Book {
private String bookName;
private String author;
private BigDecimal price;
private Date saleDate;
}
3.3 读取Excel文件
API
:

案例:
java
@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));
}
执行结果:

代码解析:
read(File file, Class head, ReadListener readListener)
FastExcel
拥有静态方法read()
file
:需要读取的文件head
:需要将文件解析的对象,按照字段的顺序和excel的澍勋解析,也可以通过@ExcelProperty
指定索引位置readListener
:读取每一条数据的监听器,处理数据也是这里处理的
FastExcel.read(...).sheet().doRead()
sheet()
:默认第一个sheet
,也可以传递参数指定doRead()
:开始同步读取数据,也可以异步读取数据doReadSync()
3.4 写入Excel文件
写入文件之前,我们需要定义模板类的名称,需要使用到@ExcelProperty
java
@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:

案例:
java
@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);
}
执行结果:

代码解析:
write(String pathName, Class head)
FastExcel
拥有静态方法write()
pathName
:文件要生成的位置head
:模板类,这个生成Excel的关键
FastExcel.write(...).sheet().sheetName("test").doWrite(bookList)
sheet()
:写入sheet
的位置,默认第一个sheetName("test")
:自定义sheet
的名称doWrite()
:要写入的数据源
04 小结
FastExcel
替我们省去了使用POI的繁琐,使用起来只关系需要处理的数据即可,非常方便。EasyExcel
和FastExcel
在使用上基本没有什么区别,因为同宗同源。
EasyExcel
已经停止维护了,你会去迁移到FastExcel
上么?作者给出了几个迁移优势:
