关于导出 Excel 文件,可以说是大多数服务中都需要集成的功能。那么,要如何优雅快速地(偷懒地)去实现这个功能呢?
你可能第一想法是:这还不简单?用 Apache 开源框架 poi, 或者 jxl 都可以实现啊。面向百度编程,把代码模板 copy 下来,根据自己的业务再改改,能有多难?
嗯.. 的确不难,但是你的代码可能是下面这个熊样子的:
上面这段代码看上去是不是又臭又长呢?今天,小哈将教您如何使用 7 行代码搞定 Excel 文件生成功能!
在说如何实现之前,我们先来讨论一下传统 Excel 框架的不足!除了上面说的,Apache poi、jxl 都存在生成 excel 文件不够简单优雅快速外,它们都还存在一个严重的问题,那就是非常耗内存,严重时会导致内存溢出。
POI 虽然目前来说,是 excel 解析框架中被使用最广泛的,但这个框架并不完美。
开发者们大部分使用 POI,都是使用其 userModel 模式。而 userModel 的好处是上手容易使用简单,随便拷贝个代码跑一下,剩下就是写业务转换了,虽然转换也要写上百行代码,但是还是可控的。
然而 userModel 模式最大的问题是在于,对内存消耗非常大,一个几兆的文件解析甚至要用掉上百兆的内存。现实情况是,很多应用现在都在采用这种模式,之所以还正常在跑是因为并发不大,并发上来后,一定会OOM或者频繁的 full gc。
快速、简单避免OOM的java处理Excel工具!
主要来说,有以下几点:
上面这段示例代码中,有两个点很重要,小哈已经重点标注标:
PS: 如果说写入的数据量很大,需要做分片查询再写入的处理,否则可能会 OOM(Out of Memory).
回过头来,我们来看看 WriteModel
这个对象内部到底有什么幺蛾子!
ExayExcel 提供注解的方式, 来方便的定义 Excel 需要的数据模型:
废话不多说,这个快速接入的案例也介绍的差不多了,跑一跑单元测试看下实际效果:
怎么样,效果还是挺棒棒的!
在实际的业务中,我们还会有一些特需的需求,比如说下面这些。
上面的例子是基于注解的,也就是说表头 head, 以及内容都是写死的,换句话说,我定义好了一个数据模型,那么,生成的 Excel 文件也就是只能遵循这种模型来了,但是,实际业务中可能会存在动态变化的需求,要怎么做呢?
// 动态添加表头,适用一些表头动态变化的场景 // 创建一个表格,用于 Sheet 中使用 // 无注解的模式,动态添加表头Object
:
跑一下单元测试,看下效果:
我想自定义表头,内容样式,咋办?
我们复用了上面的示例代码,并额外添加了设置自定义表格样式的代码, createTableStytle()
具体内容如下:
我们可以通过 TableStyle
这个类来设置表头、表格主题的样式。
注意下标是从 0 开始的,也就是说合并了第六行到第七行,其中的第一列到第五列,跑下代码,看下效果:
接口中定义了三个方法:
row()
: 在创建每个 row 后自定义业务逻辑处理;
cell()
: 在创建每个 cell 后自定义业务逻辑处理;
比如说,我们需要从数据库中查询出数据量较大时,我们需要在业务层做分片处理,也就是,我们需要分多次查询,再写入,防止内存溢出 OOM.
csv 由于是文本文件,实际上没有最大行数的限制,但是用 Excel 客户端打开还是多了不显示。
也就是说,如果你想写入更多的行数是不行的,强行这么做,程序会报类似如下异常
小哈今天主要给小伙伴介绍了 EasyExcel, 为什么要使用它,以及演示了相关示例代码。当然了,EasyExcel 除了写 Excel 文件外,它还有快速读取 Excel 的功能,由于本文主要介绍的是:如何优雅地实现 Excel 文件生成,所以就没有介绍了,有兴趣的小伙伴们,也可以去 去去查看相关文档。
最后,祝您看完本文后有所收获,下期见!
2、点击文件后,选择选项。
3、进入Excel选项页面,点击公式,然后把R1C1引用样式选上。
4、勾选上R1C1引用样式后,列的字母就变成数字了。
5、选中A1,然后Ctrl+↓,就可以定位到最后一个单元格,就可以看到行数为1048576行了。
6、同样选中A1,然后Ctrl+→,就可以看到列数了。
收集整理的这篇文章主要介绍了,小编觉得挺不错的,现在分享给大家,也给大家做个参考。
excel表格怎么使用VBA选中的行数?excel表格选中了多行,想要知道自己选中了多少行,该怎么呢?我们可以使用vba来,下面我们就来看看详细的教程,需要的朋友可以参考下
利用VBA编程可以知道自己选中了几行,该怎么使用excel中vba呢?下面我们就来看看详细的教程。
1、打开电脑中的excle软件,选中一些区域。
2、然后在顶部栏中找到“开发工具”,在开发工具下面找到VBA的入口。
3、点击进入VBA的编程界面。
4、然后在顶部栏中找到“视图”的按钮。
5、选择“立即窗口”。
6、在立即窗口中输入以下:
? 举报,一经查实,本站将立刻删除。