当前位置: 首页 > news >正文

FastExcel:革新Java生态的高性能Excel处理引擎

01 引言

FastExcel大家可能不熟悉,但是EasyExcel应该都使用过吧?

FastExcelEasyExcel版本的延续,自从阿里巴巴官方停止维护EasyExcelEasyExcel的作者继续维护起来,并持续改进优化,并更名为FastExcel

02 简介

FastExcel 是一个 Java 库,旨在高效地读取和写入 Excel 文件。它最初是 EasyExcel 的分叉版本,旨在提供增强的性能、持续维护和新功能,同时保持与原始 EasyExcel API 的兼容性。这使其成为在 Java 应用程序中处理 Excel 数据的强大的用户友好的工具。

FastExcel 通过优化内存使用来优先考虑高性能,特别是在处理大型数据集时。它通过 SAX 解析机制实现这一点,以流式方式处理基于 XMLExcel 文件(XLSX),而无需一次性将整个文件加载到内存中。

官网地址:https://readmex.com/fast-excel/fastexcel/page-151366ada-2ea3-4451-aa3d-98ac90ce4f6e

Github地址:https://github.com/fast-excel/fastexcel

主要特性:

  • 高性能读写:FastExcel 专注于性能优化,能够高效处理大规模的 Excel 数据。相比一些传统的 Excel 处理库,它能显著降低内存占用。
  • 简单易用:该库提供了简洁直观的 API,使得开发者可以轻松集成到项目中,无论是简单的 Excel 操作还是复杂的数据处理都能快速上手。
  • 流式操作:FastExcel 支持流式读取,将一次性加载大量数据的问题降到最低。这种设计方式在处理数十万甚至上百万行的数据时尤为重要。

03 功能概要

业务项目中,我们经常需要读写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>() {@Overridepublic void invoke(Book book, AnalysisContext analysisContext) {System.out.println("解析数据:" + JSON.toJSONString(book));bookList.add(book);}@Overridepublic 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

@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);
}

执行结果:

代码解析:

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的繁琐,使用起来只关系需要处理的数据即可,非常方便。EasyExcelFastExcel在使用上基本没有什么区别,因为同宗同源。

EasyExcel已经停止维护了,你会去迁移到FastExcel上么?作者给出了几个迁移优势:

http://www.dtcms.com/a/285541.html

相关文章:

  • [2025CVPR-目标检测方向]FSHNet:一种用于3D物体检测的全稀疏混合网络。
  • 如何为“地方升学导向型”语校建模?Prompt 框架下的宇都宫日建工科专门学校解析(7 / 500)
  • 20250718-6-Kubernetes 调度-Pod对象:环境变量,初始容器,静态_笔记
  • Python练习(6)Python面向对象编程三大特性:封装、继承与多态的15道实战练习题(含答案与深度解析)
  • 一文讲透HTML语义化标签
  • sqli-labs靶场通关笔记:第27-28a关 union、select过滤
  • Maven下载安装与idea配置
  • 2G和3G网络关闭/退网状态(截止2025年7月)
  • EaseUS Partition Master Free Edition进行磁盘重分配
  • OpenTelemetry学习笔记(四):OpenTelemetry 语义约定,即字段映射(1)
  • 中国​​2771个县级行政区​​的​​月度CO₂排放数据(2013–2021)
  • 现代R语言【Tidyverse、Tidymodel】的机器学习方法
  • TrOCR: 基于Transformer的光学字符识别方法,使用预训练模型
  • 基于Ubuntu22.04源码安装配置RabbitVCS过程记录
  • python实现Markdown转化PDF的方案
  • Windows8.1安装哪个版本的vscode?
  • 电脑插上u盘不显示怎么回事
  • 阿里云OSS预签名URL上传与临时凭证上传的技术对比分析
  • 前端基础——B/S工作原理、服务器与前端三大件
  • C++ :vector的介绍和使用
  • 管家婆软件价格跟踪管理:查询、新增、修改、删除
  • 小架构step系列18:工具
  • 抗辐照与国产替代:ASM1042在卫星光纤放大器(EDFA)中的应用探索
  • 相机长焦个短焦
  • gin数据解析和绑定
  • CentOS 7 配置环境变量常见的4种方式
  • 【Python】DRF核心组件详解:Mixin与Generic视图
  • (5)颜色的灰度,亮度,对比度,透明度,都啥意思
  • IDEA 2024.1 配置 MyBatis Generator 详细教程
  • PostgreSQL技术大讲堂 - 第97讲:PG数据库编码和区域(locale)答疑解惑