一行代码完成 Java的 Excel 读写--easyexcel
最近我在 Github 上查找一个可以快速开发 excel 导入导出工具,偶然发现由阿里开发 easyexcel 开源项目,尝试使用后感觉这款工具挺不错的,下面分享一下我的 easyexcel 案例使用。
1、easyexcel 简介
一般在项目可能会涉及到 Excel 导入和导出,通常我们都是使用 Apache POI 或者 jxl。但他们都存在一个严重的问题就是非常的耗内存,POI 有一套 SAX 模式的 API 可以一定程度的解决一些内存溢出的问题,但 POI 依旧存在一些缺陷,比如 07 版 Excel 解压缩以及解压后存储都是在内存中完成的,内存消耗依然很大。而 easyexcel 重写了 POI 对 07 版 Excel 的解析,能够原本一个 3M 的 Excel 用 POI SAX 依然需要 100M 左右内存降低到 KB 级别,并且再大的 Excel 不会出现内存溢出,03 版依赖 POI 的 SAX 模式。在上层做了模型转换的封装,使用起来更加方便。

2、项目结构

2.1、pom.xml

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



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

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

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

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

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

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


如何实现通过浏览器下载 Excel 文件,案例中使用的文件输出流,要实现网络下载,只需要把对应的输出流改为获取 Response 进行输出即可。
3、小结
一般在项目实现 Excel 导入导出功能,easyexcel 是可以胜任的,easyexcel 有着这处理海量数据?? Excel 的能力和更高一级的封装,可以让我们更快的上手,easyexcel 适用于解析海量数据 Excel 场景,如果需要实现生成复杂的 Excel 文件,最好还是使用 POI 比较好。
更加详细的信息可以查看 github 上的内容,GitHub链接为 https://github.com/alibaba/easyexcel。
ps:需要完整代码,关注公众号:哈尔的数据城堡(data_dev),回复‘easyexcel’获得~
一行代码完成 Java的 Excel 读写--easyexcel的更多相关文章
- 修改教材P74 一行代码 NineNineTable.java, 让执行结果是个三角形
修改教材P74 一行代码 NineNineTable.java, 让执行结果是个三角形: 提交在IDEA或命令行中运行结查截图,加上学号水印,没学号的不给成绩 2*9=18 3*9=27 4*9=36 ...
- Java学习---Excel读写操作
1.1.1. 简介 Apache POI 使用Apache POI 完成Excel读写操作 Apache POI 是用Java编写的免费开源的跨平台的 Java API,Apache POI提供API ...
- 一行代码实现java list去重
1.不带类型写法: 1 List listWithoutDup = new ArrayList(new HashSet(listWithDup)); 2.带类型写法(以String类型为例):1)Ja ...
- Java操作Excel文件以及在Android中的应用
本文章由临江仙原创,转载请注明出处:http://blog.csdn.net/zhy_cheng/article/details/10286563 Excel作为一种有格式的文件,可以使用Java来对 ...
- JAVA连接Excel最好用的开源项目EasyExcel,官方使用文档及.jar包下载
EasyExcel是一个基于Java的简单.省内存的读写Excel的开源项目.在尽可能节约内存的情况下支持读写百M的Excel. github地址:https://github.com/alibaba ...
- 《手把手教你》系列技巧篇(六十七)-java+ selenium自动化测试 - 读写excel文件 - 中篇(详细教程)
1.简介 前面介绍了POI可以操作excel,也简单的提到另一个操作excle的工具,本篇介绍一个其他的可以操作excel的工具,但是这个工具有一个前提,excel文件版本只能是97-2003版本,如 ...
- JAVA实现Excel的读写--jxl
前段时间因为开发网站的需要,研究了一下java实现excel的读写,一般当我们做管理软件时,都需要打印报表,报表如何制作呢?相信一定难为过大家,本篇就为大家揭开它的神秘面纱,学习完半篇,你一定会对报表 ...
- 【POI】java对excel的读写操作
在工作中需要将mongo中的数据导出到excel中,所以根据需要学习了poi.以下为学习内容的总结: 1.POI是什么? poi是Apache团队开发的专门面对用java处理Excel文档的工具. 官 ...
- 阿里 EasyExcel 7 行代码优雅地实现 Excel 文件生成&下载功能
欢迎关注个人微信公众号: 小哈学Java, 文末分享阿里 P8 资深架构师吐血总结的 <Java 核心知识整理&面试.pdf>资源链接!! 个人网站: https://www.ex ...
随机推荐
- HTML5☞canvas
<canvas>便签用于绘制图像,图表.不过,<canvas> 元素本身并没有绘制能力(它仅仅是图形的容器) - 您必须使用脚本JavaScript来完成实际的绘图任务.既然你 ...
- 关于vue-detools chorme创建安装完成,但是控制台不显示问题
搜了一下发现挺多人遇到这个问题的,绝大多数的回答都是在main.js中添加下面代码 Vue.config.devtools = true; 但是发现并不行. 后来看到有人说刷新然后在按F12就好了,居 ...
- SAP会计年度变式
会计年度变式用来确定SAP系统中每个公司的会计记账期间的变式.顾名思议,每个公司的会计年度变式必须与其实际使用的会计年度匹配. 在SAP系统中,每个会计年度最多允许有16个记账期间,其中 ...
- 【转】java中使用WebSocket
传统的请求,都是从客服端到服务端,表现在web应用上就是,消息都只能由浏览器发起请求,调用客户端的方法. webSocket可以从服务器端推送消息给浏览器. 使用场景: 当客户端发起缴费请求时,由服务 ...
- docker-compose 使用自定义网络并绑定 IP
0x00 事件 原先使用了 docker network create mynetwork 的方式创建了自定义网络,在使用 docker-compose 工具运行服务的时候,需要容器使用 mynetw ...
- lambada 表达式
1.lambada的存在来由 匿名类的一个问题是,如果匿名类的实现非常简单,例如只包含一个方法的接口,那么匿名类的语法可能看起来不实用且不清楚.在这些情况下,您通常会尝试将功能作为参数传递给另一个方法 ...
- Comet OJ - Contest #8
Comet OJ - Contest #8 传送门 A.杀手皇后 签到. Code #include <bits/stdc++.h> using namespace std; typede ...
- 201871010116-祁英红《面向对象程序设计(java)》第七周学习总结
项目 内容 <面向对象程序设计(java)> https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://www.cnblogs.com/ ...
- Eclipse的使用需要注意的问题
一.修改/设置字符集编码 设置工作空间编码格式 Window--Preference--General--Workspace下,面板''Text file encoding"选择UTF-8格 ...
- 2019-2020-1 20199305《Linux内核原理与分析》第五周作业
系统调用的三层机制(上) (一)用户态.内核态和中断 (1)Intel x86 CPU有4种不同的执行级别 分别是0.1.2.3,数字越小,特权越高.Linux操作系统中只是采用了其中的0和3两个特权 ...