海量数据Excel报表利器——EasyExcel(开场篇)
海量数据Excel报表利器——EasyExcel(开场篇)
互联网的精髓就是共享,可以共享技术、共享经验、共享情感、共享快乐~
很多年前就有这个想法了,从事IT行业时间也不短了,应该把自己工作和业余所学习的东西记录并分享出来,和有缘人一起学习和交流。
如果您是那个有缘人,请上岛一叙!爪哇岛随时欢迎您!
一、简介
咱们传统Excel的操作或者数据解析都是利用Apach POI进行操作,有使用过POI经验的同学应该都了解,POI框架并不完美,有较多的缺陷:
操作Excel步骤繁琐
核心组件:Workbook、Sheet、Row、Cell
读取数据时对于不同数据类型的数据处理非常麻烦导出动态Excel的操作更是麻烦
学习成本较高,对于新手来说很难在短时间上手
性能问题比较明细,特别是在海量数据场景下,经常出现内存OOM问题
写HSSF(6.5w内),最多只能处理 65536 行,否则会抛出异常;
写XSSF(100w内),写数据时速度非常慢,非常耗内存,经常发生内存溢出;
写SXSSF(100w+),过程总会产生临时文件,需要清理临时文件;使用高阶功能(区域合并、注释、动态数据)仍然非常耗内存;
阿里巴巴项目组开源出来了一款更容易上手且性能更高的Excel操作框架:EasyExcel,它以使用简单、节省内存著称。它可以支持:
基础表格的导入导出
图片数据的导入导出
百万数据的导入导出
读写操作核心: 注解 + List + API封装
官方地址:https://alibaba-easyexcel.github.io/quickstart/write.html
API + 注解: https://alibaba-easyexcel.github.io/quickstart/api.html
二、性能评测【数据量级:2个属性,80w】
1. 实测结果【数量级:2列数据,80万】
** POI【3.10-FINAL】:**
EasyExcel【1.1.2-beta4】
2. 数据读取机制对比
数据读取
POI读取数据时会先将数据全部加载到内存中,然后返回给调用者,当数据量比较大时,容易发生OOM;
EasyExcel读取数据时采用SAX模式,逐行解析,将解析结果通过观察者模式通知处理,数据量较大时也不会发生OOM;
三、为什么选择EasyExcel
性能方面
64M内存1分钟内读取75M(46W行25列)
功能方面
读Excel
指定列的index和列名 ExcelProperty注解【index、value】
读取多个sheet
数据格式自定义转换器(xxxFormat注解、converter属性)
多行head头
通过List集合读取数据(不用对象读取)
读取Web浏览器数据
写Excel
根据参数导出指定列
复杂表头写入(合并、多级头、动态表头)
多个sheet写入
数据格式自定义转换
图片导出
根据模板导出
自定义行列样式(尺寸、合并、颜色、排序、下拉、筛选、超链接等)
使用Table方式导出
自定义拦截器
通过List集合读取数据(不用对象读取)
Web浏览器写入
学习成本
阿里巴巴提供官方Demo示例文档
API结构易理解,上手快
语雀社区提供持续更新维护,当前最新版本更新到2.2.8
四、结束语
如果你的项目中也有Excel的导入导出操作,EasyExcel是一个不错的选择。关于EasyExcel我在最近的项目中使用到一些高阶的内容,我会分篇将我的使用及心得分享出来,一起借鉴学习。
爪哇岛盛产最前沿的IT技术栈,欢迎广大IT同仁入岛学习分享
来源https://www.cnblogs.com/it-rabbit-cyj/p/14966325.html