我们知道 EasyExcel 在作者从阿里离职之后就停止维护了,但在前两周 EasyExcel 原作者推出了他的升级版框架 FastExcel。以下是 FastExcel 的上手实战过程,带大家一起提供新框架的魅力。

FastExcel 是由原 EasyExcel 作者创建的最新作品,作者在 2023 年从阿里离职后,随着阿里宣布停止更新 EasyExcel,所以他就决定继续维护和升级这个项目。在重新开始时,作者为它起名为 FastExcel,以突出这个框架在处理 Excel 文件时的高性能表现,而不仅仅是简单易用。

FastExcel 仍是免费的开源框架,它具备以下特点:

  1. 完全兼容原 EasyExcel 的所有功能和特性,这使得用户可以无缝过渡。
  2. 从 EasyExcel 迁移到 FastExcel 只需简单地更换包名和 Maven 依赖即可完成升级。
  3. 在功能上,比 EasyExcel 提供更多创新和改进。
  4. FastExcel 1.0.0 版本新增了读取 Excel 指定行数和将 Excel 转换为 PDF 的功能。

FastExcel 具体使用如下。

FastExcel 使用

1.1 添加依赖

<dependency>
<groupId>cn.idev.excel</groupId>
<artifactId>fastexcel</artifactId>
<version>1.0.0</version> <!-- 请确保使用最新版本 -->
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>

1.2 创建实体类和监听器

1.2.1 创建实体类

import cn.idev.excel.annotation.ExcelProperty;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString; @Setter
@Getter
@ToString
public class User {
@ExcelProperty("编号")
private Integer id;
@ExcelProperty("名字")
private String name;
@ExcelProperty("年龄")
private Integer age;
}

1.2.2 创建事件监听器

FastExcel 是依靠事件监听器实现 Excel 逐行读取文件的,如果没有这种逐行处理的机制和数据监听器,在处理大文件时可能会导致内存溢出。而事件监听器使得数据可以边读取边处理,例如,可以直接将数据写入数据库或者进行其他业务逻辑处理,避免了大量数据在内存中的堆积。

import cn.idev.excel.context.AnalysisContext;
import cn.idev.excel.event.AnalysisEventListener; import java.util.ArrayList;
import java.util.List;
public class BaseExcelListener<T> extends AnalysisEventListener<T> {
// 用于存储读取到的Excel数据对象列表
private List<T> dataList = new ArrayList<>();
@Override
public void invoke(T t, AnalysisContext analysisContext) {
// 每读取一行数据,就将其添加到dataList中
dataList.add(t);
}
@Override
public void doAfterAllAnalysed(AnalysisContext analysisContext) {
// 当所有数据读取完成后,可以在这里进行一些后续操作,如打印读取到的数据数量
System.out.println("读取完成,共读取了 " + dataList.size() + " 条数据");
}
// 提供一个方法用于获取存储数据的列表
public List<T> getDataList() {
return dataList;
}
}

1.3 实现写入和读取功能

1.3.1 Excel写入功能

// Excel写入功能
@GetMapping("/download")
public void download(HttpServletResponse response) throws IOException {
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
response.setCharacterEncoding("utf-8");
String fileName = URLEncoder.encode("test", "UTF-8");
response.setHeader("Content-disposition",
"attachment;filename*=utf-8''" + fileName + ".xlsx");
// 写入数据
FastExcel.write(response.getOutputStream(), User.class)
.sheet("模板")
.doWrite(buildData());
}
// 创建测试数据
private List<User> buildData() {
// 创建 User 测试数据
User user1 = new User();
user1.setId(1);
user1.setName("张三");
user1.setAge(18);
User user2 = new User();
user2.setId(2);
user2.setName("李四");
user2.setAge(19);
return List.of(user1, user2);
}

以上代码执行效果如下:

1.3.2 Excel读取功能

// Excel读取功能
@PostMapping("/upload")
public ResponseEntity<String> upload(@RequestParam("file") MultipartFile file) {
if (file.isEmpty()) {
return ResponseEntity.badRequest().body("请选择一个文件上传!");
}
try {
BaseExcelListener<User> baseExcelListener = new BaseExcelListener<>();
FastExcel.read(file.getInputStream(), User.class,
baseExcelListener).sheet().doRead();
// 得到读取数据
List<User> dataList = baseExcelListener.getDataList();
System.out.println(dataList);
return ResponseEntity.ok("文件上传并处理成功!");
} catch (IOException e) {
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("文件处理失败!");
}
}

以上代码执行效果如下:

EasyExcel 如何升级到FastExcel

2.1 修改依赖

将 EasyExcel 的依赖替换为 FastExcel 的依赖,如下:

<!-- easyexcel 依赖 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>xxxx</version>
</dependency>

依赖替换为:

<dependency>
<groupId>cn.idev.excel</groupId>
<artifactId>fastexcel</artifactId>
<version>1.0.0</version>
</dependency>

2.2 修改代码

将 EasyExcel 的包名替换为 FastExcel 的包名,如下:

// 将 easyexcel 的包名替换为 FastExcel 的包名
import com.alibaba.excel.**;

替换为

import cn.idev.excel.**;

Excel转换为PDF

FastExcel 支持将 Excel 文件转换为 PDF 文件,FastExcel 将 Excel 转为Pdf 底层依赖于 Apache POI 和 itext-pdf。受限于 itext-pdf 的许可证,请确保您的使用符合 itext-pdf 的许可证,后续 FastExcel 将支持更多的 PDF 转换功能替换 itext-pdf,实现代码如下:

FastExcel.convertToPdf(new File("excelFile"),new File("pdfFile"),null,null);

小结

FastExcel 依然是原来的那个 EasyExcel,但又不完全是 EasyExcel,希望 FastExcel 越做越好。各位小伙伴们,一起体验起来吧。

本文已收录到我的面试小站 www.javacn.site,其中包含的内容有:并发编程、MySQL、Redis、Spring、Spring MVC、Spring Boot、Spring Cloud、MyBatis、JVM、设计模式、消息队列等模块。

干掉EasyExcel!FastExcel初体验的更多相关文章

  1. win7升win10,初体验

    跟宿舍哥们聊着聊着,聊到最近发布正式版的win10,听网上各种评论,吐槽,撒花的,想想,倒不如自己升级一下看看,反正不喜欢还可以还原.于是就开始了win10的初体验了,像之前装黑苹果双系统一样的兴奋, ...

  2. 微软最新设计Fluent Design System初体验

    微软最新设计Fluent Design System初体验 本文图片不全!建议移步知乎专栏查看!!! https://zhuanlan.zhihu.com/p/30582886 原创 2017-11- ...

  3. .NET平台开源项目速览(15)文档数据库RavenDB-介绍与初体验

    不知不觉,“.NET平台开源项目速览“系列文章已经15篇了,每一篇都非常受欢迎,可能技术水平不高,但足够入门了.虽然工作很忙,但还是会抽空把自己知道的,已经平时遇到的好的开源项目分享出来.今天就给大家 ...

  4. Xamarin+Prism开发详解四:简单Mac OS 虚拟机安装方法与Visual Studio for Mac 初体验

    Mac OS 虚拟机安装方法 最近把自己的电脑升级了一下SSD固态硬盘,总算是有容量安装Mac 虚拟机了!经过心碎的安装探索,尝试了国内外的各种安装方法,最后在youtube上找到了一个好方法. 简单 ...

  5. Spring之初体验

                                     Spring之初体验 Spring是一个轻量级的Java Web开发框架,以IoC(Inverse of Control 控制反转)和 ...

  6. Xamarin.iOS开发初体验

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKwAAAA+CAIAAAA5/WfHAAAJrklEQVR4nO2c/VdTRxrH+wfdU84pW0

  7. 【腾讯Bugly干货分享】基于 Webpack & Vue & Vue-Router 的 SPA 初体验

    本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/57d13a57132ff21c38110186 导语 最近这几年的前端圈子,由于 ...

  8. 【Knockout.js 学习体验之旅】(1)ko初体验

    前言 什么,你现在还在看knockout.js?这货都已经落后主流一千年了!赶紧去学Angular.React啊,再不赶紧的话,他们也要变out了哦.身旁的90后小伙伴,嘴里还塞着山东的狗不理大蒜包, ...

  9. 在同一个硬盘上安装多个 Linux 发行版及 Fedora 21 、Fedora 22 初体验

    在同一个硬盘上安装多个 Linux 发行版 以前对多个 Linux 发行版的折腾主要是在虚拟机上完成.我的桌面电脑性能比较强大,玩玩虚拟机没啥问题,但是笔记本电脑就不行了.要在我的笔记本电脑上折腾多个 ...

  10. 百度EChart3初体验

    由于项目需要在首页搞一个订单数量的走势图,经过多方查找,体验,感觉ECharts不错,封装的很细,我们只需要看自己需要那种类型的图表,搞定好自己的json数据就OK.至于说如何体现出来,官网的教程很详 ...

随机推荐

  1. eBPF 概述:第 1 部分:介绍

    1. 前言 有兴趣了解更多关于 eBPF 技术的底层细节?那么请继续移步,我们将深入研究 eBPF 的底层细节,从其虚拟机机制和工具,到在远程资源受限的嵌入式设备上运行跟踪. 注意:本系列博客文章将集 ...

  2. 墨天轮国产数据库沙龙 | 张玮绚:TDengine,高性能、分布式、支持SQL的时序数据库

    分享嘉宾:张玮绚(Wade Zhang)北京涛思数据科技有限公司(TDengine)研发VP 整理:墨天轮 导读 TDengine 是一款高性能.分布式.支持 SQL 的时序数据库,让大量设备.数据采 ...

  3. .NET高级调试 - 3.12 sosex实用的几个命令介绍

    简介 sosex是sos的一个拓展,主要目的是将一些繁琐的排查过程脚本化,比如探测死锁,设置断点等.更加方便快捷协助我们排查问题. 比较可惜的是,在.net core中不可用,作者已经不更新了. 更多 ...

  4. apisix~按域名进行请求转发

    路由route 路由(Route)是请求的入口点,它定义了客户端请求与服务之间的匹配规则.路由可以与服务(Service).上游(Upstream)关联,一个服务可对应一组路由,一个路由可以对应一个上 ...

  5. 在 Kubernetes 中部署并使用 KubeEdge

    作者:马伟,青云科技容器顾问,云原生爱好者,目前专注于云原生技术,云原生领域技术栈涉及 Kubernetes.KubeSphere.KubeKey 等. 边缘计算在广泛制造业.工业.零售和金融等行业, ...

  6. Nginx 反向代理 (泛域名->泛域名,https,静态文件)

    Nginx 反向代理配置指南 (泛域名 -> 泛域名, HTTPS, 静态文件) 完整版 server { # 监听80端口 listen 80; listen 443 ssl http2;; ...

  7. nginx原理剖析

    当我们启动nginx服务之后,可以使用如下命令查看nginx进程 显然易见,nginx大致分为master以及worker两部分: master-workers 机制 首先./nginx -s rel ...

  8. Mysql导出文本文件

    使用mysqldump命令导出文本文件 mysqldump -u root -pPassword -T 目标目录 dbname [tables] [option]; 其中: Password 参数表示 ...

  9. 深度学习系列之1----直观解释Transformer

    Abstract 这个系列主要用来记录我自己这种的AI小白的学习之路,通过将所学所知总结下来,记录下来.之前总喜欢记录在笔记本上,或者ipad上,或者PC端的Typora上,但总是很难回头检索到一些系 ...

  10. 一些有用的shell命令组合

    1.找出Linux系统中磁盘占用最大的10个文件 1)CentOS7 和 busybox 1.30.1 验证可用 find / -type f -print0 | xargs -0 du | sort ...