当前位置:首页 > 服务端 > 海量数据Excel报表利器——EasyExcel(开场篇)

海量数据Excel报表利器——EasyExcel(开场篇)

2022年11月06日 21:56:29服务端29

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】:**
海量数据Excel报表利器——EasyExcel(开场篇) _ JavaClub全栈架构师技术笔记

EasyExcel【1.1.2-beta4】
海量数据Excel报表利器——EasyExcel(开场篇) _ JavaClub全栈架构师技术笔记

2. 数据读取机制对比

数据读取
海量数据Excel报表利器——EasyExcel(开场篇) _ JavaClub全栈架构师技术笔记
海量数据Excel报表利器——EasyExcel(开场篇) _ JavaClub全栈架构师技术笔记

  • POI读取数据时会先将数据全部加载到内存中,然后返回给调用者,当数据量比较大时,容易发生OOM;
  • EasyExcel读取数据时采用SAX模式,逐行解析,将解析结果通过观察者模式通知处理,数据量较大时也不会发生OOM;

三、为什么选择EasyExcel

  1. 性能方面

64M内存1分钟内读取75M(46W行25列)

海量数据Excel报表利器——EasyExcel(开场篇) _ JavaClub全栈架构师技术笔记

  1. 功能方面
  • 读Excel
    • 指定列的index和列名 ExcelProperty注解【index、value】
    • 读取多个sheet
    • 数据格式自定义转换器(xxxFormat注解、converter属性)
    • 多行head头
    • 通过List集合读取数据(不用对象读取)
    • 读取Web浏览器数据
  • 写Excel
    • 根据参数导出指定列
    • 复杂表头写入(合并、多级头、动态表头)
    • 多个sheet写入
    • 数据格式自定义转换
    • 图片导出
    • 根据模板导出
    • 自定义行列样式(尺寸、合并、颜色、排序、下拉、筛选、超链接等)
    • 使用Table方式导出
    • 自定义拦截器
    • 通过List集合读取数据(不用对象读取)
    • Web浏览器写入
  1. 学习成本
  • 阿里巴巴提供官方Demo示例文档
  • API结构易理解,上手快
  • 语雀社区提供持续更新维护,当前最新版本更新到2.2.8

四、结束语

如果你的项目中也有Excel的导入导出操作,EasyExcel是一个不错的选择。关于EasyExcel我在最近的项目中使用到一些高阶的内容,我会分篇将我的使用及心得分享出来,一起借鉴学习。

作者:岛主~it_rabbit
来源链接:https://www.cnblogs.com/it-rabbit-cyj/p/14966325.html

版权声明:
1、JavaClub(https://www.javaclub.cn)以学习交流为目的,由作者投稿、网友推荐和小编整理收藏优秀的IT技术及相关内容,包括但不限于文字、图片、音频、视频、软件、程序等,其均来自互联网,本站不享有版权,版权归原作者所有。

2、本站提供的内容仅用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯相关权利人及本网站的合法权利。
3、本网站内容原作者如不愿意在本网站刊登内容,请及时通知本站(javaclubcn@163.com),我们将第一时间核实后及时予以删除。


本文链接:https://www.javaclub.cn/server/68255.html

标签: EasyExcel
分享给朋友:

“海量数据Excel报表利器——EasyExcel(开场篇)” 的相关文章

EasyExcel导入导出

EasyExcel导入导出

maven依赖 <!-- https://mvnrepository.com/artifact/com.alibaba/easyexcel --> <dependency> <groupId>com.alibaba</g...

EasyExcel导出简单使用

github地址:https://github.com/alibaba/easyexcel; 参考网址:https://alibaba-easyexcel.github.io/index.html 引入jar: <!-- 阿里巴巴 easyExcel依赖 --&...

Excel映射到实体-easyexcel工具

Excel映射到实体-easyexcel工具

来源 项目需要把Excel进行解析,并映射到对象属性,实现类似Mybatis的ORM的效果。使用的方式是自定义注解+POI,这种方式代码复杂而且不易于维护。 easyexcel是阿里巴巴开源的一个框架,解决了字段映射问题、OOM问题、使用复杂问题等,总之是一个很方便的工具 Git...

EasyExcel Demo

实体类 /** * 排班日期,主键 */ @TableId @JsonFormat(shape = JsonFormat.Shape.STRING, pattern="yyyy-MM-dd") @ExcelProperty(va...

Java开发笔记之EasyExcel报错com.alibaba.excel.exception.ExcelGenerateException: java.lang.ExceptionInInitializerError

EasyExcel ExceptionInInitializerError 0x01 概述 使用阿里巴巴的EasyExcel,代码运行报错com.alibaba.excel.exception.ExcelGenerateException: java.lang....

easyexcel往已存在的excel文件里追加数据

File templateFile = new File(filePath, fileName); File destFile = new File(filePath, "test.xlsx"); try { if...

EsayExcel读

easyExcel读写 引入依赖 <dependency> <groupId>com.alibaba</groupId> <artifactId>easyexcel</artifac...

excel开发

easyexcelhttps://www.jianshu.com/p/78cc1729fbd1 https://blog.csdn.net/daisy_apk/article/details/84635620invoke方法每解析一行执行一次,anal...

EasyExcel 框架使用-读

EasyExcel 框架使用-读

EasyExcel 框架使用 官方介绍:JAVA解析Excel工具EasyExcel Java解析、生成Excel比较有名的框架有Apache poi、jxl。但他们都存在一个严重的问题就是非常的耗内存,poi有一套SAX模式的API可以一定程度的解决一些内存溢出的问题,但...

EasyExcel基本使用

EasyExcel: 1、EasyExcel特点 Java领域解析、生成Excel比较有名的框架有Apache poi、jxl等。但他们都存在一个严重的问题就是非常的耗内存。如果你的系统并发量不大的话可能还行,但是一旦并发上来后一定会OOM或 者JVM频繁的full gc。...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。