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

  1. 性能方面

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

  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我在最近的项目中使用到一些高阶的内容,我会分篇将我的使用及心得分享出来,一起借鉴学习。

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

  1. 海量数据Excel报表利器——EasyExcel(一 利用反射机制导出Excel)

    EasyExcel 写入(导出) 互联网的精髓就是共享,可以共享技术.共享经验.共享情感.共享快乐~ 很多年前就有这个想法了,从事IT行业时间也不短了,应该把自己工作和业余所学习的东西记录并分享出来, ...

  2. 使用node.js生成excel报表下载(excel-export express篇)

    引言:日常工作中已经有许多应用功能块使用了nodejs作为web服务器,而生成报表下载也是我们在传统应用. java中提供了2套类库实现(jxl 和POI),.NET 作为微软的亲儿子更加不用说,各种 ...

  3. 010杰信-创建购销合同Excel报表系列-3-新增合同货物:这里涉及到子表的新增(合同货物表是购销合同表的子表)

    效果说明: 前面分析过购销合同的Excel报表需要四张表,这篇讲的是合同货物表. 这个合同货物表是购销合同的子表,是一个购销合同有多个合同货物的关系.在合同货物表中有购销合同的主键作为外键.所以这张表 ...

  4. 从数据库中导出excel报表

    通常需要将后台数据库中的数据集或者是其他列表等导出excel 报表,这里主要引用了Apose.cells dll 类库, (1)直接上主要代码: protected void txtExport_Cl ...

  5. 如何将jsp页面的table报表转换到excel报表导出

    假设这就是你的jsp页面: 我们会添加一个“导出到excel”的超链接,它会把页面内容导出到excel文件中.那么这个页面会变成这个样子 在此,强调一下搜索时关键词的重要性,这样一下子可以定位到文章, ...

  6. 在.NET中使用EPPlus生成Excel报表 .

    --摘抄自:http://blog.csdn.net/zhoufoxcn/article/details/14112473 在开发.NET应用中可能会遇到需要生成带图表(Chart)的Excel报表的 ...

  7. poi导出Excel报表多表头双层表头、合并单元格

    效果图: controller层方法: /**     *      * 导出Excel报表     * @param request     * @return     *      */    @ ...

  8. java导出excel报表

    1.java导出excel报表: package cn.jcenterhome.util; import java.io.OutputStream;import java.util.List;impo ...

  9. Excel报表

    Excel报表 1.Excel报表导入到GridView protected void Page_Load(object sender, EventArgs e) { string path = Se ...

随机推荐

  1. mac 安装jmeter

    1.打开jemeter网址 http://jmeter.apache.org/download_jmeter.cgi 2.下载Binaries中的 apache-jmeter-5.0.tgz 3.解压 ...

  2. laravel 伪静态实现

    Route::get('show{id}.html',['as'=>'products.detail','uses'=>'companyController@show']) ->wh ...

  3. WPF 使用附加属性声明 ICommand

    一.ListBox中为什么选择同一项不能每次都触发SelectionChanged事件呢? ​ 当我需要每次点击ListBox的选中项,都触发事件.找到最符合的事件为SelectionChanged事 ...

  4. [Qt] 事件机制(一)

    事件主要分为两种: 在与用户交互时发生.比如按下鼠标(mousePressEvent),敲击键盘(keyPressEvent)等 系统自动发生,比如计时器事件(timerEvent)等 每种事件对应一 ...

  5. [刷题] PTA 6-7 统计某类完全平方数

    要求: 实现一个函数,判断任一给定整数N是否满足条件:它是完全平方数,又至少有两位数字相同,如144.676等. 函数接口定义: int IsTheNumber ( const int N ); 其中 ...

  6. 如何在CentOS 7上安装Htop

    在本教程中,我们将向您介绍如何在CentOS 7服务器上安装和配置Htop.对于那些不知道的人,Htop 是为Linux编写的一个交互式实时系统监视进程查看器.它被设计为替代Unix程序的顶部.它显示 ...

  7. JDK版本升级

    背景:本来安装了一个1.6版本的JDK,因为版本过低需要升级成1.8 安装过程很简单一路next,主要是遇到几个问题需要备注一下解决方法. Error opening registry key'sof ...

  8. liveCD版: CD光盘映像,和liveDVD一样,唯一的区别就是该版本中包含的软件包会少一点,安装系统时使用 U 盘或者CD光盘进行安装。

    https://man.linuxde.net/download/CentOS/ CentOS,英文全称"Community Enterprise Operating System" ...

  9. Centos7挂载windows共享目录

    将windows的共享目录挂载到Centos7 查看是否有mount.cifs命令,如果没有,在线安装 [root@dropbox-bak01 ~]# yum install cifs-utils - ...

  10. Python小白的数学建模课-A1.2021年数维杯C题(运动会优化比赛模式探索)探讨

    Python小白的数学建模课 A1-2021年数维杯C题(运动会优化比赛模式探索)探讨. 运动会优化比赛模式问题,是公平分配问题 『Python小白的数学建模课 @ Youcans』带你从数模小白成为 ...