7 行代码优雅地实现 Excel 文件导出功能?

文章目录

  • 一、前言
  • 二、Apache poi、jxl 的缺陷
  • 三、阿里出品的 EasyExcel,安利一波
  • 四、EasyExcel 解决了什么
  • 五、快速上手
    • 5.1 添加依赖
    • 5.2 七行代码搞定 Excel 生成
  • 六、特殊场景支持
  • 七、Web 下载示例代码
  • 八、需要注意的点
  • 九、总结

一、前言

关于导出 Excel 文件,可以说是大多数服务中都需要集成的功能。那么,要如何优雅快速地(偷懒地)去实现这个功能呢?

你可能第一想法是:这还不简单?用 Apache 开源框架 poi, 或者 jxl 都可以实现啊。面向百度编程,把代码模板 copy 下来,根据自己的业务再改改,能有多难?
嗯… 的确不难,但是你的代码可能是下面这个熊样子的:
在这里插入图片描述
面这段代码看上去是不是又臭又长呢?今天,小哈将教您如何使用 7 行代码搞定 Excel 文件生成功能!

二、Apache poi、jxl 的缺陷

在说如何实现之前,我们先来讨论一下传统 Excel 框架的不足!除了上面说的,Apache poi、jxl 都存在生成 excel 文件不够简单优雅快速外,它们都还存在一个严重的问题,那就是非常耗内存,严重时会导致内存溢出。

POI 虽然目前来说,是 excel 解析框架中被使用最广泛的,但这个框架并不完美。

为什么这么说呢?

开发者们大部分使用 POI,都是使用其 userModel 模式。而 userModel 的好处是上手容易使用简单,随便拷贝个代码跑一下,剩下就是写业务转换了,虽然转换也要写上百行代码,但是还是可控的。

然而 userModel 模式最大的问题是在于,对内存消耗非常大,一个几兆的文件解析甚至要用掉上百兆的内存。现实情况是,很多应用现在都在采用这种模式,之所以还正常在跑是因为并发不大,并发上来后,一定会OOM或者频繁的 full gc。

三、阿里出品的 EasyExcel,安利一波

什么是 EasyExcel? 见名知意,就是让你操作 Excel 异常的酸爽。先来看下 EasyExcel GitHub 官方截图:
https://github.com/alibaba/easyexcel
在这里插入图片描述
速、简单避免OOM的java处理Excel工具!

以下是官方介绍:
在这里插入图片描述

四、EasyExcel 解决了什么

主要来说,有以下几点:

传统 Excel 框架,如 Apache poi、jxl 都存在内存溢出的问题;

传统 excel 开源框架使用复杂、繁琐;

EasyExcel 底层还是使用了 poi, 但是做了很多优化,如修复了并发情况下的一些 bug, 具体修复细节,可阅读官方文档https://github.com/alibaba/easyexcel;

五、快速上手

5.1 添加依赖

<

<!-- https://mvnrepository.com/artifact/com.alibaba/easyexcel -->
<dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>1.1.2-beta5</version>
</dependency>

5.2 七行代码搞定 Excel 生成

在这里插入图片描述
上面这段示例代码中,有两个点很重要,小哈已经重点标注标:

①:WriteModel 这个对象就是要写入 Excel 的数据模型对象,等等,你这好像不行吧?表头 head,以及每个单元格内的数据顺序都没指定,能达到想要的效果么?别急,后面会讨论这块!

②:创建需要写入的数据集,当然了,正常业务中,这块都是从数据库中查询出来的。
回过头来,我们来看看 WriteModel 这个对象内部到底有什么幺蛾子!
在这里插入图片描述
ExayExcel 提供注解的方式, 来方便的定义 Excel 需要的数据模型:

①:首先,定义的写入模型必须要继承自 BaseRowModel.java;

②:通过 @ExcelProperty 注解来指定每个字段的列名称,以及下标位置;

同时,上面定义的 createModelList() 方法也很简单,通过循环,创建一个写入模型的 List 集合:
在这里插入图片描述
废话不多说,这个快速接入的案例也介绍的差不多了,跑一跑单元测试看下实际效果:
在这里插入图片描述
怎么样,效果还是挺棒棒的!
在这里插入图片描述

六、特殊场景支持

在实际的业务中,我们还会有一些特需的需求,比如说下面这些。

6.1 动态生成 Excel 内容
上面的例子是基于注解的,也就是说表头 head, 以及内容都是写死的,换句话说,我定义好了一个数据模型,那么,生成的 Excel 文件也就是只能遵循这种模型来了,但是,实际业务中可能会存在动态变化的需求,要怎么做呢?
在这里插入图片描述
①:无注解模式,动态添加表头,也可自由组合复杂表头,代码如下:
在这里插入图片描述

②:创建动态数据,注意这里的数据类型是 Object:
在这里插入图片描述跑一下单元测试,看下效果:
6.2 自定义表头以及内容样式
我想自定义表头,内容样式,咋办?
在这里插入图片描述
我们复用了上面的示例代码,并额外添加了设置自定义表格样式的代码, createTableStytle()具体内容如下:
在这里插入图片描述
我们可以通过 TableStyle 这个类来设置表头、表格主题的样式。

6.3 合并单元格
我们可以通过 merge() 方法来合并单元格:
在这里插入图片描述注意下标是从 0 开始的,也就是说合并了第六行到第七行,其中的第一列到第五列,跑下代码,看下效果:在这里插入图片描述6.4 自定义处理
对于更复杂的处理,EasyExcel 预留了 WriterHandler 接口来,允许你自定义处理代码:
在这里插入图片描述接口中定义了三个方法:

sheet(): 在创建每个 sheet 后自定义业务逻辑处理;

row(): 在创建每个 row 后自定义业务逻辑处理;

cell(): 在创建每个 cell 后自定义业务逻辑处理;

我们实现了该接口后,编写自定义逻辑处理代码,然后调用 getWriterWithTempAndHandler()静态方法获取 ExcelWriter 对象时,传入 WriterHandler 的实现类即可。在这里插入图片描述

七、Web 下载示例代码

八、需要注意的点

九、总结

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/523187.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Docker精华问答 | 用dockerfile制作镜像

Docker 是个划时代的开源项目&#xff0c;它彻底释放了计算虚拟化的威力&#xff0c;极大提高了应用的维护效率&#xff0c;降低了云计算应用开发的成本&#xff01;使用 Docker&#xff0c;可以让应用的部署、测试和分发都变得前所未有的高效和轻松&#xff01;1Q&#xff1a;…

日志服务Flink Connector《支持Exactly Once》

摘要&#xff1a; Flink log connector是阿里云日志服务推出的&#xff0c;用于对接Flink的工具&#xff0c;包含两块&#xff0c;分别是消费者和生产者&#xff0c;消费者用于从日志服务中读数据&#xff0c;支持exactly once语义&#xff0c;生产者用于将数据写到日志服务中&…

两个瓶子水怎样一样多_同事每天比我多睡两个小时!省下70万买了地铁站附近房子 杭州姑娘却感叹买房时一定是脑子进了水……...

都市快报讯 你上下班路上要多久&#xff1f;这个问题最近引起网友热议。 昨天&#xff0c;杭州市城乡建设发展研究院发布11月份城区交通运行分析&#xff1a;从上个月起&#xff0c;杭州的交通运行已经开启“冬季模式”&#xff0c;晚高峰出行进一步集中&#xff0c;拥堵程度环…

为什么电路交换不适合计算机网络,电路交换技术不适合计算机数据通信

5.2 分组交换原理上一节介绍了计算机网络的组成和网络的体系结构&#xff0c;其中通信子网的基本任务就是将数据信息从源点传送到S的点&#xff0c;在源点与目的点之间可能要经过许多个链路和中继节点。链路的功能是传输&#xff0c;而中继节点的功能是交换&#xff0c;也就是从…

Kibana:数据分析的可视化利器

摘要&#xff1a; 阿里云Elastisearch集成了可视化工具Kibana&#xff0c;用户可以使用Kibana的开发工具便捷的查询和分析存储在Elastisearch中的数据。除了柱状图、线状图、饼图、环形图等经典可视化功能外&#xff0c;还拥有地理位置分析、数据图谱分析、时序数据分析等高级功…

Kubernetes监控在小米的落地

戳蓝字“CSDN云计算”关注我们哦&#xff01;转自&#xff1a;小米云技术作者&#xff1a;郭如意本文介绍了高可用、持久存储、可动态调整的Kubernetes监控方案的实现过程。小米的弹性调度平台&#xff08;Ocean&#xff09;以及容器平台主要基于开源容器自动化管理平台kuberne…

智能机器人建房子后房价走势_深圳建二手房价引导制度,学习长沙意图明显,距离稳准狠差点意思...

#深圳建二手房价引导制度#大家好&#xff0c;我是勇谈。9月17日&#xff0c;深圳市司法局就《深圳市房地产市场监管办法(修订征求意见稿)》公开征求意见。《征求意见稿》共九章108条。对于修订监管办法的必要性&#xff0c;深圳市司法局也给出了自己的答案“《办法》的相关规定…

idea解决maven pom依赖下载失败

流程1 第一步&#xff1a;打开cmd窗口&#xff0c;进入repository本地仓库 执行命令&#xff1a; 进入本地仓库&#xff1a; cd %userprofile%\.m2\repository第二步&#xff1a;执行以下命令&#xff1a; for /r %i in (*.lastUpdated) do del %i流程2 mvn -U idea:idea

6位技术大咖11月倾心巨献,大数据+安全主题的技术分享合集【阿里云MVP 干货集锦】...

摘要&#xff1a; 大家好&#xff0c;阿里云 MVP 11月大数据安全主题分享新鲜出炉&#xff0c;快来一睹为快吧&#xff01;哪些MVP的分享最吸引你&#xff0c;你最想支持哪个MVP&#xff1f; 我们将开启为期一周的最人气内容评选&#xff0c;我们将在MVP评论内容下抽取评论最佳…

淤泥管道机器人_丛台区设备管道清洗超高效率

丛台区设备管道清洗超高效率后&#xff0c;施工前对施工人员安全措施安排完毕后&#xff0c;对检查井内剩余的砖、石、部分淤泥等残留物进行人工清理&#xff0c;直到清理完毕为止。  CCTV管道检测是指管道闭路电视检测系统可以实现排水管道的内窥检测工作&#xff1a;可以检…

华为发布开发者召集令,等你来战!

戳蓝字“CSDN云计算”关注我们哦&#xff01;曾几何时&#xff0c;“上云”只是大型企业和科技领域的特权。时至今日&#xff0c;“云”不再是漂浮空中那般缥缈。普通企业&#xff0c;甚至是个人开发者之间&#xff0c;对“上云”的谈及也如同一日三餐那么平常。对于新兴行业而…

承担集团数万应用、研发人员日常工作,阿里持续交付平台的设计、迭代之道...

摘要&#xff1a; 阿里持续交付平台已经经历了 8 年的不断迭代进化&#xff0c;成长为集团几万应用所依赖的最重要的研发工具&#xff0c;它的效率直接影响着几万研发日常工作。但平台不能只是工具的堆砌&#xff0c;更需要针对互联网时代的研发模式进行深度思考&#xff0c;不…

使用FTP下载文件connect.retrieveFileStream(filename) 获取不到InputStream流,返回null的问题

使用同事的代码做FTP下载文件&#xff0c;InputStream in connect.retrieveFileStream(fileName);执行这句时InputStream总是获取为空 后来把代码改成ftp.retrieveFileStream(new String(dirPath[1].getBytes(“UTF-8”), “ISO-8859-1”));加上字符集指定就好了&#xff0c;…

css怎么让两个table并排_关于CSS布局

水平居中水平居中可能是CSS布局中最常用到的布局&#xff0c;这里介绍几种水平居中的方式1、使用inline-block 和 text-align实现.parent{text-align: center;} .child{display: inline-block;}优点&#xff1a;兼容性好&#xff1b;不足&#xff1a;需要同时设置子元素和父元素…

边缘计算高考题!全答对就可以去华为上班!

戳蓝字“CSDN云计算”关注我们哦&#xff01;作者 | 边小缘来源 | 边缘计算社区绝密★启用前2019年普通高等学校招生全国统一考试&#xff08;边缘计算社区版&#xff09;不定向选择题。&#xff08;1010100分&#xff09;1以下哪项不是边缘计算的特点&#xff1f;A.低时延C.离…

《2017中国开发者调查报告》即将发布!你看那个人,好像一个程序员哦!

摘要&#xff1a; 2017云栖大会北京峰会期间&#xff0c;云栖社区即将重磅发布首份《2017中国开发者调查报告》&#xff0c;历时3个月的调研&#xff0c;7032人参与调查问卷&#xff0c;最终呈现出一份集开发者画像与能力的完整描绘。想了解最接地气的中国开发者现状吗&#xf…

中蜂几月份自然分蜂_蜜蜂的种类:北黑蜂,中华蜜蜂,皖南中蜂,贵州纳雍中蜂等等...

北黑蜂东北黑蜂是在闭锁优越的自然环境里通过自然选择与人工进行所培育的中国唯一的地方优良蜂种&#xff0c;分布在我国黑龙江省饶河县&#xff0c;其各项生理指标均明显优于世界四大著名蜂种&#xff0c;这是其它蜂种不可比拟的&#xff0c;也是我国乃至世界不可多得的极其宝…

2017,人工智能技术如何让中国开发者“倾心”又“上火”!

摘要&#xff1a;2017云栖大会北京峰会期间&#xff0c;云栖社区即将重磅发布首份《2017中国开发者调查报告》&#xff0c;历时3个月的调研&#xff0c;7032人参与调查问卷&#xff0c;最终呈现出一份集开发者画像与能力的完整描绘。本文就让大家先睹为快&#xff0c;分享其中关…

OpenStack入门科普,看这一篇就够啦!

戳蓝字“CSDN云计算”关注我们哦&#xff01;作者 | 小枣君来源 | 鲜枣课堂大家好&#xff0c;我是小枣君。最近几年&#xff0c;OpenStack这个词开始频繁出现&#xff0c;引起了越来越多人的关注。对于大部分人来说&#xff0c;这是一个很陌生的词&#xff0c;不知道它到底是什…

代码谱写传奇,深度揭秘中国开发者现状!

摘要&#xff1a;云栖社区重磅发布首份《2017中国开发者调查报告》&#xff0c;历时3个月的调研&#xff0c;7032人参与调查问卷&#xff0c;最终呈现出一份集开发者画像与能力的完整描绘。《报告》总结概括了中国八大开发技术领域特征&#xff0c;涵盖了Web开发、前端开发、云…