转载

一行代码完成 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 模式。 在上层做了模型转换的封装,使用起来更加方便。

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

2、项目结构

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

2.1、pom.xml

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

2.2、模型

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

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

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

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

RowNumExcelListener

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

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

2.3、读操作

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

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

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

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

2.4、写操作

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

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

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

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

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

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

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

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

3、小结

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

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

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

推荐阅读:

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

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

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

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

原文  http://mp.weixin.qq.com/s?__biz=MzUyMTk4NzQzNg==&mid=2247483987&idx=1&sn=27933e2b9753c22243dc795bd552b06d
正文到此结束
Loading...