网易首页 > 网易号 > 正文 申请入驻

杀疯了,超越 EasyExcel 的新一代 Excel 处理神器~

0
分享至

钓友宝 (微信小程序):一款专门为 钓友 开发的 免费的 分享钓点地图与实时天气的软件,地图中标记了所有野钓、钓场、公共水域等的精确位置,支持导航功能。

简介

FastExcel是由原EasyExcel作者在阿里巴巴宣布停止维护EasyExcel之后推出的升级版框架。它继承了EasyExcel的所有优点,并且在性能和功能上进行了显著的提升和创新。

FastExcel的特点

  • 高性能读写:FastExcel专注于性能优化,能够高效处理大规模的Excel数据,显著降低内存占用。

  • 简单易用:提供了简洁直观的API,使得开发者可以轻松集成到项目中,无论是简单的Excel操作还是复杂的数据处理都能快速上手。

  • 流式操作:支持流式读取,将一次性加载大量数据的问题降到最低,特别适合处理数十万甚至上百万行的数据。

  • 完全兼容:完全兼容原EasyExcel的所有功能和特性,用户可以无缝过渡。

  • 持续更新:FastExcel会持续更新,修复bug,优化性能,增加新功能。

FastExcel使用方法1. 创建实体类和监听器
  • 创建实体类

在使用FastExcel进行Excel文件的读写操作之前,需要定义一个实体类,该类中的每个属性对应Excel中的一列。使用@ExcelProperty注解来指定列名。

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;
}
  • 创建事件监听器

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

  extends AnalysisEventListener

  {     private List  dataList =  new ArrayList<>();      @Override      public void invoke(T t, AnalysisContext analysisContext) {         dataList.add(t);     }      @Override      public void doAfterAllAnalysed(AnalysisContext analysisContext) {         System.out.println( "读取完成,共读取了 " + dataList.size() +  " 条数据");     }      public List   getDataList ()  {          return dataList;     } }

2. 实现写入和读取功能
  • Excel写入功能

以下是使用FastExcel进行Excel写入的示例代码。首先,创建测试数据,然后通过FastExcel.write方法将数据写入到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   buildData ()  {
    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);
}
  • Excel读取功能

以下是使用FastExcel进行Excel读取的示例代码。通过FastExcel.read方法读取Excel文件,并使用之前创建的监听器来处理读取到的数据。

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

FastExcel还支持将Excel文件转换为PDF文件,这一功能底层依赖于Apache POI和itext-pdf。请注意,使用itext-pdf时需要确保符合其许可证要求。

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

FastExcel作为一个高效且易于使用的Excel处理工具,不仅继承了EasyExcel的所有优点,还在此基础上进行了性能和功能的增强。

通过上述示例,我们可以看到FastExcel如何简化Excel文件的读写操作,以及如何通过事件监听器实现流式处理,从而有效管理内存使用。无论是企业数据导入导出还是个人项目开发,FastExcel都能提供强大的支持。

FastExcel与EasyExcel的区别

  • 性能提升:FastExcel在性能上比EasyExcel更好,更稳定。

  • API一致性:FastExcel与EasyExcel的API完全一致,可以无缝切换。

  • 功能增加:FastExcel 1.0.0版本新增了读取Excel指定行数和将Excel转换为PDF的功能。

结论

FastExcel作为一个轻量级但功能强大的Java库,专为需要高性能和低内存占用的Excel文件处理而设计。如果您的项目需要处理大规模的Excel数据,FastExcel无疑是一个值得考虑的选择。其流式处理和灵活的API使其成为处理Excel文件的理想工具。

插播一下 Java精选面试题 (微信小程序):5000+道面试题和选择题,包含Java基础、并发、JVM、线程、MQ系列、Redis、Spring系列、Elasticsearch、Docker、K8s、Flink、Spark、架构设计、大厂真题等,在线随时刷题!

作者:拉满buff搞代码 https://juejin.cn/post/7451871895753326626

公众号“Java精选”所发表内容注明来源的,版权归原出处所有(无法查证版权的或者未注明出处的均来自网络,系转载,转载的目的在于传递更多信息,版权属于原作者。如有侵权,请联系,笔者会第一时间删除处理!

最近有很多人问,有没有读者交流群!加入方式很简单,公众号Java精选,回复“加群”,即可入群!

特别推荐:专注分享最前沿的技术与资讯,为弯道超车做好准备及各种开源项目与高效率软件的公众号,「大咖笔记」,专注挖掘好东西,非常值得大家关注。点击下方公众号卡片关注

文章有帮助的话,点在看,转发吧!

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
俄国命运攸关,中国作壁上观?为何俄罗斯被动,中国却不两肋插刀

俄国命运攸关,中国作壁上观?为何俄罗斯被动,中国却不两肋插刀

静夜史君
2026-07-02 03:00:07
上海申花官宣夏季转会窗首位新援!

上海申花官宣夏季转会窗首位新援!

中超伪球迷
2026-07-04 15:51:42
0-0,中甲第2与中甲第3握手言和,深圳青年人终结2连败

0-0,中甲第2与中甲第3握手言和,深圳青年人终结2连败

俯身冲顶
2026-07-04 20:55:41
梦鸽李天一赴美不归?看到85岁李双江“现状”,原来杨洪基没说谎

梦鸽李天一赴美不归?看到85岁李双江“现状”,原来杨洪基没说谎

阿纂看事
2024-11-05 11:54:58
“明星失业”冲上热搜,娱乐圈最大的泡沫终于破了

“明星失业”冲上热搜,娱乐圈最大的泡沫终于破了

万物新世相
2026-07-01 22:14:53
苏州政协原副主席金海龙5月被查后,吴中政协原副主席戈福林被查

苏州政协原副主席金海龙5月被查后,吴中政协原副主席戈福林被查

江南江南
2026-07-04 16:18:08
不换人!男篮12人飞往韩国,2媒体人炮轰集训,1人含蓄,1人扎心

不换人!男篮12人飞往韩国,2媒体人炮轰集训,1人含蓄,1人扎心

萌兰聊个球
2026-07-04 13:55:38
一觉醒来,WTT美国大满贯,国乒传来三大振奋人心的好消息!

一觉醒来,WTT美国大满贯,国乒传来三大振奋人心的好消息!

田先生篮球
2026-07-04 06:54:57
茅台还是那个茅台,顶流资本用真金白银投票

茅台还是那个茅台,顶流资本用真金白银投票

钛媒体APP
2026-07-04 12:07:23
蔡康永日本办画展,林志玲头发油腻、面黄肌瘦,小S周杰伦送花篮

蔡康永日本办画展,林志玲头发油腻、面黄肌瘦,小S周杰伦送花篮

眼底星碎
2026-07-04 01:39:32
日本人乘坐中国高铁后,愤怒说出三大“缺点”,让人无力反驳

日本人乘坐中国高铁后,愤怒说出三大“缺点”,让人无力反驳

快乐彼岸
2026-07-02 06:21:59
看见就想吐的AI演员

看见就想吐的AI演员

新浪财经
2026-07-04 00:40:07
列治文沉船上全是华人青年!6死4伤!3米巨浪、没穿救生衣、坏掉的侧门…

列治文沉船上全是华人青年!6死4伤!3米巨浪、没穿救生衣、坏掉的侧门…

起喜电影
2026-07-04 08:18:45
英格兰墨西哥对更改开球时间不满,国际足联将维持原定时间

英格兰墨西哥对更改开球时间不满,国际足联将维持原定时间

舟望停云
2026-07-04 10:57:24
西安赛格事件发酵!网传商户进场押50万再加装修,没开业百万套牢

西安赛格事件发酵!网传商户进场押50万再加装修,没开业百万套牢

火山詩话
2026-07-04 07:13:15
山东男篮后场补强遇阻,北控新帅基本确定,青岛报价新疆年轻内线

山东男篮后场补强遇阻,北控新帅基本确定,青岛报价新疆年轻内线

中国篮坛快讯
2026-07-04 20:31:12
7月4日,基本养老金的调整通知公布了吗?工龄低于20年能涨3.5%吗

7月4日,基本养老金的调整通知公布了吗?工龄低于20年能涨3.5%吗

小谈食刻美食
2026-07-04 07:34:34
中国为啥不用自研的北斗系统,仍然使用美国GPS,难道技不如人?

中国为啥不用自研的北斗系统,仍然使用美国GPS,难道技不如人?

古书奇谈
2026-07-03 15:23:15
拍一半坐地起价被赶出剧组,烧掉千万胶片,这剧至今仍是神作

拍一半坐地起价被赶出剧组,烧掉千万胶片,这剧至今仍是神作

手工制作阿歼
2026-07-04 17:32:44
她预言了自己的死亡!!

她预言了自己的死亡!!

梳子姐
2026-07-01 20:01:45
2026-07-04 22:00:49
Java精选
Java精选
一场永远也演不完的戏
1796文章数 3859关注度
往期回顾 全部

科技要闻

韬定律论文V2版,充工程细节和实测数据

头条要闻

13年前收礼被偷拍的县长被查 偷拍他的父子此前被判刑

头条要闻

13年前收礼被偷拍的县长被查 偷拍他的父子此前被判刑

体育要闻

揭法国锋线最大优势 有人比姆巴佩还快?

娱乐要闻

白鹿打戏抠图惹非议 连累丞磊遭扒皮

财经要闻

韩国股市杠杆失控:450亿美元资金狂飙

汽车要闻

方程豹钛9内饰曝光 用上了长联屏设计/下半年上市

态度原创

家居
健康
艺术
数码
亲子

家居要闻

传奇筑 日常诗

听说少吃点能抗衰老?专家讲解!

艺术要闻

风格独特,美国具象画家Alan Feltus

数码要闻

中国空调在欧洲卖爆 多品牌正加急补货

亲子要闻

爷爷给一个月宝宝的科普小课堂:怎么预防近视?

无障碍浏览 进入关怀版