java excel 读取一行_一行代码完成 Java的 Excel 读写--easyexcel

news/2024/10/17 18:21:52/

最近我在 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 模式。在上层做了模型转换的封装,使用起来更加方便。

d9ee450e3f31def54b3866608da65ceb.png

2、项目结构

470e950a3371d70a7e16a388c7959141.png

2.1、pom.xml

cef9ae63cef9ce7ae6a977b2022d570a.png

2.2、模型

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

2d123b20909c488f00fe5e7aeaa545a9.png

ee0fac4697c74bbce89a68200be3fb6c.png

2f2173382664d36914b032e7d149daaa.png

RowNumExcelListener

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

7f4a01fc912624e641c35eae81e6f82f.png

2.3、读操作

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

def40d698111f6bc6b0e0eb89d00b208.png

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

563c39da98c1b818a479ada1a496b3c1.png

2.4、写操作

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

536289191b3c43bf55196ae56fc4b74c.png

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

7ce2c105b542daf57261ee4a9cb5d449.png

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

b144f968e5d9aa256c3d6502a86b977d.png

40b2b2eade39de9057d8ded2cdc8b82d.png

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

3、小结

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

ps:需要完整代码,关注公众号:哈尔的数据城堡(data_dev),回复‘easyexcel’获得~


http://www.ppmy.cn/news/790935.html

相关文章

excel一列数据中每个数重复固定次数

问题描述:把一些数据每个重复指定次数,比如我想把内容这一列每一个都重复这么多次数 解决方法:采用excel中的Power Query方法,具体方法是数据-自表格区域,在数据来源处选择想要处理的数据,在上载以后会出现…

Excel表中只能选择固定内容

一、实现效果 二、实现方法 2.0、通用操作 ①选中需要操作的列; ②选中顶部的导航栏【数据】; ③找到【数据工具】; ④点击【数据验证】; 2.1、设置Excel表中只能选择指定内容 ①选中【设置】; ②选择【序列】&…

excel按照固定行数拆分多个

1 背景&#xff1a; 工作需要&#xff0c;需要把Excel按照固定行数拆分。 解决办法&#xff1a; 1. 生成是提前处理&#xff1a; 简单来说就是按照行数生成多个Excel。 大概逻辑如下&#xff1a; if&#xff08;list.size< limit&#xff09; { 直接生成Excel return&…

Python 读取整个excel数据,指定行数据和指定列数据解决方法

import xlrdclass operateExcel(object):def __init__(self, filepath"../user_list_命名格式.xls", sheet_name"users"):self.filepath filepath # excel所在路径self.sheet_name sheet_name # excel中sheet页的名字self.data xlrd.open_workbook(self…

python提取Excel多个sheet中固定单元格数据

有个Excel&#xff0c;里面有多个sheet&#xff0c;现在需要把每个sheet中固定单元格的数据提取出来 例如我的这个表格&#xff0c;每个月都有一个这样的表格&#xff0c;然后一共12个sheet存放了12个月的数据&#xff0c;现在我把每个sheet的C5单元格数据提取出来 首先&#x…

python删除excel某行的格式_Python+Xlwings 删除Excel的行和列

这篇文章主要介绍了Python+Xlwings 删除Excel的行和列的方法,帮助大家更好的理解和使用python,感兴趣的朋友可以了解下 一、需求: 某公司管理的多个资管计划每天生成A表,业务人员需手工打开每个A表,将某些行、列删除后方可打印上报。 现拟采用程序代替手工操作。 二、分析…

excel在文本的固定位置插入字符、进行日期和时间的合并

1.excel在文本的固定位置插入字符 如上图&#xff0c;现在想要将其转化为日期格式&#xff08;比如2017/1/1&#xff09;&#xff0c;但是当设置单元格格式为日期时却显示出很多&#xff03;。我们可以通过在20170101中添加两个斜杠“/”来将其转化为2017/1/1。可以用replace函…

EXCEL工具介绍

目录 1. 锁定功能2. 固定 1. 锁定功能 锁定&#xff1a;F4 公式引用单元格&#xff0c;有“相对引用”与“绝对引用” 美元符号“ $ ”在excel公式中的作用是在“绝对引用”时&#xff0c;锁定行号或列标&#xff08;单元格地址由列标行号组成&#xff0c;如A1&#xff0c;A为…