一、EasyExcel概述

Java解析、生成Excel比较有名的框架有Apache poi、jxl。但他们都存在一个严重的问题就是非常的耗内存,poi有一套SAX模式的API可以一定程度的解决一些内存溢出的问题,但POI还是有一些缺陷,比如07版Excel解压缩以及解压后存储都是在内存中完成的,内存消耗依然很大。easyexcel重写了poi对07版Excel的解析,能够原本一个3M的excel用POI sax依然需要100M左右内存降低到几M,并且再大的excel不会出现内存溢出,03版依赖POI的sax模式。在上层做了模型转换的封装,让使用者更加简单方便。

github地址:https://github.com/alibaba/easyexcel

使用文档:https://alibaba-easyexcel.github.io/

官方给出的数据,64M内存1分钟内读取75M(46W行25列)的Excel,当然还有急速模式能更快,但是内存占用会在100M多一点:

二、EasyExcel常用功能

读Excel

  • 最简单的读
  • 指定列的下标或者列名
  • 读多个sheet
  • 日期、数字或者自定义格式转换
  • 多行头
  • 同步的返回
  • 读取表头数据
  • 数据转换等异常处理
  • 不创建对象的读
  • web中的读

写Excel

  • 最简单的写
  • 根据参数只导出指定列
  • 指定写入的列
  • 复杂头写入
  • 重复多次写入(写到单个或者多个Sheet)
  • 日期、数字或者自定义格式转换
  • 图片导出
  • 根据模板写入
  • 列宽、行高
  • 自定义样式
  • 合并单元格
  • 使用table去写入
  • 动态头,实时生成头写入
  • 自动列宽(不太精确)
  • 自定义拦截器(上面几点都不符合但是要对单元格进行操作的参照这个)
  • 不创建对象的写
  • web中的写
  • web中的写并且失败的时候返回json

填充Excel

  • 最简单的填充
  • 填充列表
  • 复杂的填充
  • 数据量大的复杂填充
  • 横向的填充

三、EasyExcel使用方法和调优

官方除了文档外,还提供了强大的demo代码。代码就不贴了,我只给出maven坐标:

<dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>2.1.4</version>
</dependency>

默认大文件处理

默认大文件处理会自动判断,共享字符串5M以下会使用内存存储,大概占用15-50M的内存,超过5M则使用文件存储,然后文件存储也要设置多内存M用来存放临时的共享字符串,默认20M。除了共享字符串占用内存外,其他占用较少,所以可以预估10M,所以默认大概30M就能读取一个超级大的文件。

根据实际需求配置内存

四、EasyExcel的核心原理

1、文件解压文件读取通过文件形式

2、避免将全部全部数据一次加载到内存

采用sax模式一行一行解析,并将一行的解析结果以观察者的模式通知处理。 

3、抛弃不重要的数据

Excel解析时候会包含样式,字体,宽度等数据,但这些数据是我们不关心的,如果将这部分数据抛弃可以大大降低内存使用。Excel中数据中Style占了相当大的空间。

五、该项目的优缺点

该项目不是阿里重点项目,目前只有三个人维护,但项目很活跃,获得的star数也很高,可以作为生产来使用。但要注意,目前还有以下功能尚未实现:

  • 单个文件的并发写入、读取
  • 读取图片
  • csv读取(这个后续可能会考虑)

使用EasyExcel导入导出Excel报表-JAVA解析Excel工具相关推荐

  1. java sax 解析excel,使用EasyExcel导入导出Excel报表-JAVA解析Excel工具

    1.EasyExcel概述 Java解析.生成Excel比较有名的框架有Apache poi.jxl.但他们都存在一个严重的问题就是很是的耗内存,poi有一套SAX模式的API能够必定程度的解决一些内 ...

  2. java导出excel报表_java生成excel报表文件示例

    此次简单的操作将数据从数据库导出生成excel报表以及将excel数据导入数据库 首先建立数据库的连接池: package jdbc; import java.io.FileInputStream; ...

  3. springboot整合easyexcel 导入导出excel案例及文件无法打开

    前端请求 vue3+axios+typescript downloadByUrlStream({url:process.env.VUE_APP_API_URL1+"/MeshDevice/u ...

  4. java解析excel的工具_Java 解析 Excel 工具 easyexcel

    软件介绍 easyexcel -- JAVA 解析 Excel 工具 Java 解析.生成 Excel 比较有名的框架有 Apache poi.jxl .但他们都存在一个严重的问题就是非常的耗内存,p ...

  5. 【使用EasyExcel导入导出】

    使用EasyExcel导入导出 一,为什么要使用EasyExcel 1.1 EasyExcel与Poi的区别 Java解析.生成Excel比较有名的框架有Apache poi.jxl.但他们都存在一个 ...

  6. 阿里EasyExcel导入导出

    阿里EasyExcel导入导出 前言 使用阿里提供的EasyExcel进行excel的导入导出简单,方便,快捷 ` 一.使用版本 <dependency><groupId>co ...

  7. EasyExcel导入导出下载模板(带下拉)

    EasyExcel导入导出网上资料很多,这里就不多做描述了,总之就是一款比较轻而小,易用的excel操作工具包:这里在项目中使用到,做下笔记.以及表格中下拉框的实现: 声明:本文思路是借鉴于某大神的, ...

  8. Java写Excel时OOM_JAVA解析Excel工具避免OOM

    JAVA解析Excel工具easyexcel Java解析.生成Excel比较有名的框架有Apache poi.jxl.但他们都存在一个严重的问题就是非常的耗内存,poi有一套SAX模式的API可以一 ...

  9. java excel api xlsx_Java 解析Excel(xls、xlsx两种格式)

    Java 解析Excel(xls.xlsx两种格式) 一.环境 JDK 1.8 二.JAR 1.commons-collections4-4.1.jar 2.poi-3.9-20121203.jar ...

最新文章

  1. jovi智慧场景运动步怎么是零_Jovi智慧场景,赛事直播提前提醒,让你不错过任何一刻的精彩...
  2. JavaScript中getBoundingClientRect()方法详解
  3. iOS之CALayer的CAEmitterLayer实现“红包雨”效果
  4. 20款Notepad++插件下载和介绍
  5. 跟着老桂学ASP.NET Core 2.0
  6. leetcode359. 日志速率限制器
  7. win7打不开qq文件怎么办
  8. 关于CCSpriteSheet报错问题
  9. 其他手机安装鸿蒙系统,不是华为手机,也能用上鸿蒙系统
  10. HDU1265 Floating Point Presentation【水题】
  11. javascript窗口属性示意图
  12. 台式计算机的cpu设置,台式电脑如何超频,cpu超频详细设置教程
  13. GTK+ GUI库使用现状
  14. 计算机专业就业崩溃,计算机专业就业“遇冷说”引发争议
  15. 国学游戏之神州方块源码
  16. 从来不是别人的不幸和痛苦
  17. Java后端技术栈,到底如何深入学习?
  18. 怀仁一中2021高考成绩查询,2019怀仁一中录取分数线(附2019高考成绩喜报)
  19. urllib中urlparse使用技巧以及iter_content图片边下边存到硬盘使用
  20. java类中获取tomcat下的webap路径方法

热门文章

  1. 【Arduino】开发入门教程【六】数据类型转换函数
  2. Hadoop之HDFS简介
  3. 如何打造高质量的SSP广告引擎(内部干货分享)
  4. 深入理解Mysql - 索引原理详解
  5. ts引入公共方法_angular 封装公共方法
  6. python列表求平均值_长篇文讲解:Python要求O(n)复杂度求无序列表中第K的大元素实例...
  7. oracle或mysql分组查询并且获取前3条排序后的数据
  8. 使用TargetSources
  9. 反射机制及其应用场景
  10. redis.conf 配置详解