当前位置 博文首页 > 岛主~it_rabbit:海量数据Excel报表利器——EasyExcel(开场篇)

    岛主~it_rabbit:海量数据Excel报表利器——EasyExcel(开场篇)

    作者:岛主~it_rabbit 时间:2021-07-03 18:26

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

    bkbky
    下一篇:没有了