海量数据Excel报表利器——EasyExcel(开场篇)
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我在最近的项目中使用到一些高阶的内容,我会分篇将我的使用及心得分享出来,一起借鉴学习。
海量数据Excel报表利器——EasyExcel(开场篇)的更多相关文章
- 海量数据Excel报表利器——EasyExcel(一 利用反射机制导出Excel)
EasyExcel 写入(导出) 互联网的精髓就是共享,可以共享技术.共享经验.共享情感.共享快乐~ 很多年前就有这个想法了,从事IT行业时间也不短了,应该把自己工作和业余所学习的东西记录并分享出来, ...
- 使用node.js生成excel报表下载(excel-export express篇)
引言:日常工作中已经有许多应用功能块使用了nodejs作为web服务器,而生成报表下载也是我们在传统应用. java中提供了2套类库实现(jxl 和POI),.NET 作为微软的亲儿子更加不用说,各种 ...
- 010杰信-创建购销合同Excel报表系列-3-新增合同货物:这里涉及到子表的新增(合同货物表是购销合同表的子表)
效果说明: 前面分析过购销合同的Excel报表需要四张表,这篇讲的是合同货物表. 这个合同货物表是购销合同的子表,是一个购销合同有多个合同货物的关系.在合同货物表中有购销合同的主键作为外键.所以这张表 ...
- 从数据库中导出excel报表
通常需要将后台数据库中的数据集或者是其他列表等导出excel 报表,这里主要引用了Apose.cells dll 类库, (1)直接上主要代码: protected void txtExport_Cl ...
- 如何将jsp页面的table报表转换到excel报表导出
假设这就是你的jsp页面: 我们会添加一个“导出到excel”的超链接,它会把页面内容导出到excel文件中.那么这个页面会变成这个样子 在此,强调一下搜索时关键词的重要性,这样一下子可以定位到文章, ...
- 在.NET中使用EPPlus生成Excel报表 .
--摘抄自:http://blog.csdn.net/zhoufoxcn/article/details/14112473 在开发.NET应用中可能会遇到需要生成带图表(Chart)的Excel报表的 ...
- poi导出Excel报表多表头双层表头、合并单元格
效果图: controller层方法: /** * * 导出Excel报表 * @param request * @return * */ @ ...
- java导出excel报表
1.java导出excel报表: package cn.jcenterhome.util; import java.io.OutputStream;import java.util.List;impo ...
- Excel报表
Excel报表 1.Excel报表导入到GridView protected void Page_Load(object sender, EventArgs e) { string path = Se ...
随机推荐
- [bug] Python AttributeError: module 'web' has no attribute 'application'
原因 文件名是web.py,与包名web冲突 解决 重命名文件,再运行
- 利用IOzone进行存储性能测试
利用IOzone进行存储性能测试 命令:1.iozone -s 10G -r 4k -i 0(0代表顺序写) -w(代表文件不删除) -+n(不测重读重写) -Rb(以某种格式生成测试文件) /t ...
- Linux_日志管理理论概述
一.日志系统 1.kernel -->物理终端(/dev/console) --> /var/log/dmesg(系统启动时信息(包括错误信息)记录到该文件) 或者:# dmesg 或 # ...
- Lua中的元表(metatable)、元方法(metamethod)详解
在第一次看见这两样东西的时候,可能会觉得它很深奥,但其实很好理解,虽然实际上它可能真的很深奥.(小若:停!滚粗.) 1.知道为什么1 + 1 = 2吗? 为什么在Lua中,1+1会等于2呢?(小若:难 ...
- TCP/IP、Http的区别--(转自任智康)
TPC/IP协议是传输层协议,主要解决数据如何在网络中传输,而HTTP是应用层协议,主要解决如何包装数据.关于TCP/IP和HTTP协议的关系,网络有一段比较容易理解的介绍:"我们在传输数据 ...
- IIC通信时遇到问题的解决
如果遇到问题,反复查不到 就DEBUG 下单点运行,执行每一个SCK 和SDA的拉高拉低 看看是否能正常的拉高拉低 先解决掉底层的GPIO的控制问题, 有的时候可能数据引脚为特殊功能引脚
- gpgj - 06.估值分析举例
06.估值分析举例 1.举个栗子-贵州茅台的护城河 品牌效益高 只有高档产品 不卖中低档,不会拉低公司收入 { "question": "我们来复习一下护城河要如何分 ...
- RabbitMQ 集群原理
RabbitMQ默认集群原理 rabbitmq 本身是基于erlang编写,erlang语言天生具备分布式的特性(通过同步Erlang集群各节点的erlang cookie实现),RabbiteMQ天 ...
- hive sql的参数调优
shuffle优化之减少shuffle数据量 1.谓词下推 hive.optimize.ppd ,默认为true. 所谓谓词下推就是过滤条件如果写在shuffle操作后面,就提前过滤掉,减少参与sh ...
- docker部署安装流程第一版
docker部署安装流程第一版 1.以Dockerfile的方式进行构建docker 以cloud 新联盟为例 dockerfile from hub.c.163.com/library/maven ...