海量数据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 ...
随机推荐
- spring-第三章-jdbc
一,回顾 aop:面向切面编程,就是将一些和主业务流程没有关系的公共代码,提取封装到切面类,通过切入点规则,可以对目标方法进行功能增强;也就是可以再目标方法执行的前后添加一段额外逻辑代码; 二,Jdb ...
- 【Mysql】数据库索引,百万数据测试索引效果
Mysql官方对索引的定义是:索引(index)是帮助Mysql高效获取数据的数据结构.进而,我们可以知道索引的本质是数据结构. 一.索引的分类 主键索引:也就是我们常见的 PRIMARY KEY,只 ...
- Centos7 安装 htop
此安装方法是目前位置我了解到的最简介.最快速的安装方法.本人亲验: 系统版本: CentOS Linux release 7.3.1611 (Core) 安装步骤: yum -y instal ...
- 强哥memcache学习笔记
搭建memcache服务器:1.在内存中缓存数据2.数据形态以key->value memcache优点:1.快速缓存2.跨域登录memcache缺点:1.复杂的数据存取的操作2.不能永久保存数 ...
- setting>SSH>sessions setting>勾选ssh Keepalive[ MobaXterm】设置保持SSH连接
[ MobaXterm]设置保持SSH连接 ssh远程连接会在无操作时自动断开连接.为了保持程序运行和连接,需要设置保持连接. 1.MobaXterm如果使用了MobaXterm客户端,那么需要在设置 ...
- Python3统计gitlab上的代码量
import threading import gitlab import xlwt #获取所有的user def getAllUsers(): usersli = [] client = gitla ...
- linux命令--使用fsck修复文件系统
使用fsck修复文件系统错误 1.问题描述 服务器maint_samba 由于服务器maint_samba (debian操作系统)没有正常关机,在重新启动过程中/dev/sdb1出现文件系统错误,需 ...
- html-新闻滚动条
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- 用华为MindSpore框架训练数据库类型的数据集
技术背景 在前面一篇博客我们讲到三种用python去读取一个文件的指定行的操作,最终给出的一个结论大概是,对于大型的数据而言,最快的找到指定行的方法是Linux系统自带的sed指令,那么是否只有这一种 ...
- 如何使用 IoC
创建Maven工程,pom.xml添加依赖 <?xml version="1.0" encoding="UTF-8"?> <project x ...