一行代码完成 Java的 Execl 读写--easyexecl

最近我在 Github 上查找一个可以快速开发 Execl 导入导出工具,偶然发现由阿里开发 easyexecl 开源项目,尝试使用后感觉这款工具挺不错的,分享一下我的 easyexecl 案例使用。

1、easyexecl 简介

一般在项目可能会涉及到 Execl 导入和导出,通常我们都是使用 Apache POI 或者 jxl。但他们都存在一个严重的问题就是非常的耗内存,POI 有一套 SAX 模式的 API 可以一定程度的解决一些内存溢出的问题,但 POI 依旧存在一些缺陷,比如 07 版 Excel 解压缩以及解压后存储都是在内存中完成的,内存消耗依然很大。而 easyexcel 重写了 POI 对 07 版 Excel 的解析,能够原本一个 3M 的 Execl 用 POI SAX 依然需要 100M 左右内存降低到 KB 级别,并且再大的 Excel 不会出现内存溢出,03 版依赖 POI 的 SAX 模式。在上层做了模型转换的封装,使用起来更加方便。

640?wx_fmt=png

2、项目结构

640?wx_fmt=png

2.1、pom.xml

640?wx_fmt=png

2.2、模型

@Data 是 Lombok 插件的注解,需要先安装。@Data 注解在类上,会为类的所有属性自动生成 set/get、equals、canEqual、hashCode、toString方法。

640?wx_fmt=png

640?wx_fmt=png

640?wx_fmt=png

RowNumExcelListener

使用 easyexcel,我们需要继承 AnalysisEventListener 。必须实现 invoke() 和 doAfterAllAnalysed() 方法。easyexecl 会调用 invoke() 将数据存入 List 中。

640?wx_fmt=png

2.3、读操作

当只读取一个 Execl 的一个sheet,可以直接 EasyExcelFactory.readBySax() 方法解析 Execl 文件。

640?wx_fmt=png

读取多个 sheet,需要通过读取所有 sheet,再进行选择读取哪些数据,读取完一个 sheet,需要重新清空列表,不然会导致所有 sheet 数据都存储在列表中。

640?wx_fmt=png

2.4、写操作

根据模型的写入,通过 ExcelWriter 的 wirter() 方法,ExcelWriter 根据 sheet 预先设置的 模型生成和插入数据。

640?wx_fmt=png

(推荐)根据模板的写入,根据一个 Execl 文件为模板,生成 Execl 文件。

640?wx_fmt=png

easyexecl 还支持对单元格的样式的控制,通过 WriteHandler 接口实现。但是 easyexecl 所支持的样式要比 POI 少,官方也不是不推荐使用 easyexecl 进行实现复杂的 Execl。easyexecl 主要为了解决 OOM 的问题,实现低消耗读取解析文件。

640?wx_fmt=png

640?wx_fmt=png

如何实现通过浏览器下载 Execl 文件,案例中使用的文件输出流,要实现网络下载,只需要把对应的输出流改为获取 Response 进行输出即可。

3、小结

一般在项目实现 Execl 导入导出功能,easyexecl是可以胜任的,easyexecl 有着这处理海量数据的 Execl 的能力和更高一级的封装,可以让我们更快的上手,easyexecl 适用于解析海量数据 Execl 场景,如果需要实现生成复杂的 Execl 文件,最好还是使用 POI 比较好。

更加详细的信息可以查看 github 上的内容,GitHub链接为 https://github.com/alibaba/easyexcel。

ps:需要完整代码,关注公众号,回复‘easyexecl’获得~

推荐阅读:

学机器学习怎么可以不知道最小二乘法

Scala 函数式编程(一) 什么是函数式编程?

缓存世界中的三大问题及解决方案


640?wx_fmt=jpeg

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值