easyexcel 2.2.6 新版本以列表的形式读取 Excel

news/2024/10/22 12:31:31/

使用步骤:

注:讲述使用 EasyExcel 的读取 Excel 数据列表的案例,项目基于 springboot + maven 模式。

1、引入 EasyExcel 依赖包,文章以 easyexcel 2.2.6 为基础。

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

2、创建 Excel 内容处理转换类 StringArrayExcelReadListener,该类须是 AnalysisEventListener 的子类,并重写 invoke、invokeHeadMap 等方法。

import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import lombok.extern.slf4j.Slf4j;import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;/*** StringList 解析监听器* @author Lingyejun* @since 2022-11-12*/
@Slf4j
public class StringArrayExcelReadListener extends AnalysisEventListener<Map<String, String>> {/*** 存储读取到的表头*/private List<String> head = new ArrayList<>();/*** 存储读取到的 Excel 数据*/private List<List<String>> data = new ArrayList<>();/*** 每解析一行都会回调invoke()方法* @param item  读取后的数据对象* @param context 内容*/@Overridepublic void invoke(Map<String, String> item, AnalysisContext context) {if(item != null && !item.isEmpty()) {List<String> info = item.entrySet().stream().map(e -> e.getValue()).collect(Collectors.toList());data.add(info);}}@Overridepublic void doAfterAllAnalysed(AnalysisContext context) {}/*** 处理读取到的表头数据* @param headMap* @param context*/@Overridepublic void invokeHeadMap(Map<Integer, String> headMap, AnalysisContext context) {if(headMap != null && !headMap.isEmpty()) {head = headMap.entrySet().stream().map(e -> e.getValue()).collect(Collectors.toList());}}/*** 获取表头数据信息* @return*/public List<String> getHead() {return this.head;}/*** 获取读取到的 Excel 数据* @return*/public List<List<String>> getData() {return this.data;}
}

3、读取文件流,并读取 Excel 文件信息。

@PostMapping("importExcel")
public void excelImportAdd(@RequestParam("file") MultipartFile file) {if (file.isEmpty()) {throw new QuZuException("请选择上传文件");}InputStream inputStream;try {inputStream = file.getInputStream();} catch (IOException e) {e.printStackTrace();throw new QuZuException("解析文件错误");}StringArrayExcelReadListener listener = new StringArrayExcelReadListener();ExcelReader reader = EasyExcelFactory.read(inputStream, listener).build();// 读取Sheet,从第0行开始读取(表示从表头开始读)ReadSheet readSheet = EasyExcel.readSheet(0).build();reader.read(readSheet);reader.finish();List<String> head = listener.getHead();System.out.println(JSON.toJSONString(head));List<List<String>> data = listener.getData();System.out.println(JSON.toJSONString(data));
}

概念普及

1.什么是POI?

其中Apache POI 是用Java编写的免费开源的跨平台的 Java API,Apache POI提供API给Java程序对Microsoft Office格式档案读和写的功能。POI为“Poor Obfuscation Implementation”的首字母缩写,意为“简洁版的模糊实现”。

在Java技术生态圈中,可以进行Excel文件处理的主流技术包括: Apache POI 、 JXL 、 Alibaba EasyExcel 等。

其中各个技术都有最适合的场景

Apache POI 基于 DOM 方式进行解析,将文件直接加载内存,所以速度较快,适合 Excel 文件数据量不大的应用场景。

JXL 只支持Excel 2003以下版本,所以不太常见。

Alibaba EasyExcel 采用逐行读取的解析模式,将每一行的解析结果以观察者的模式通知处理(AnalysisEventListener),所以比较适合数据体量较大的 Excel 文件解析。

本文我们使用POI作为处理Excel文件的技术。

2.为什么要用POI?

主要用于导入导出大量数据例:在开发过程中常常有客户这样子要求:你要把我们的报表直接用Excel打开(电信系统、银行系统)。或者是:我们已经习惯用Excel打印。这样在我们实际的开发中,很多时候需要实现导入、导出Excel的应用时。有大量的报表需要导出(从数据库导出为Excel),另外在做测试的时候又需要往数据库里面导入很多测试数据(从Excel导入数据库)(如数据分析统计)即将上线的电商网站,大量的基础数据需要录入,人工一条一条录入不太现实,这时候就用到了poi导入

poi 属于 Apache旗下 http://poi.apache.org/

当然: poi 不仅仅导入导出 Excel;可以用于Office 其他办公软件---word等等;

3.POI的缺点

Java解析、生成Excel比较有名的框架有Apache poi、jxl。但他们都存在一个严重的问题就是非常的耗内存,poi有一套SAX模式的API可以一定程度的解决一些内存溢出的问题,但POI还是有一些缺陷,比如07版Excel解压缩以及解压后存储都是在内存中完成的,内存消耗依然很大。easyexcel重写了poi对07版Excel的解析,能够将原本一个3M的excel文件,在之前使用POI sax依然需要100M左右内存才可以完成解析,降低到几M就可以了,并且再大的excel不会出现内存溢出。总之Alibaba EasyExcel相对于Apache POI的话,它是定位为海量数据读取。

本篇文章如有帮助到您,请给「翎野君」点个赞,感谢您的支持。

首发链接:https://www.cnblogs.com/lingyejun/p/16884994.html


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

相关文章

Spire.XLS:一款Excel处理神器

正文 前言&#xff1a;最近项目里面有一些对Excel操作的需求&#xff0c;博主想都没想&#xff0c;NPOI呗&#xff0c;简单、开源、免费&#xff0c;大家都喜欢&#xff01;确实&#xff0c;对于一些简单的Excel导入、导出、合并单元格等&#xff0c;它都没啥太大的问题&#…

报表控件Stimulsoft v2023.1全新发布 | 附免费下载试用

Stimulsoft Ultimate 宣布发布新版本2023.1&#xff01;在最新版本中添加了对Razor Pages的支持、新的数据监视器可视化工具、为PHP和Blazor平台更新了组件,欢迎下载试用&#xff01; Stimulsoft Ultimate官方正版下载 Razor Pages 在 2023.1.1 版中&#xff0c;我们添加了对…

编辑 用Excel制作股票交易表格/日志,带macro宏程序(vba)更新V1.5

写在前面 交易股票最好要记录每一笔交易&#xff0c;交易记录能帮助我们回忆和分析交易中的成功失败&#xff0c;以获得交易技能的提升&#xff0c;甚至可以使我们头脑更加清晰&#xff0c;不至于做出错误判断和冲动交易。 于是本着每一笔交易都详细记录的投资者&#xff0c;…

Excel神器之xlwings的安装

使用强大的xlwings插件可以大大提高你的Excel使用效率。 但是在安装过程中会遇到各种各样的踩坑问题&#xff0c;下面是xlwings的安装过程 第一步 确定你的python版本 例如我这里是python3.9.1&#xff0c;我们可以通过 windowR 输入 cmd 通过命令查看 python --version 第二…

(一)python实战——使用Pyinstaller打包一个python的exe可执行文件

前言 在python编程中&#xff0c;我们往往需要将我们的应用程序打包成一个可执行文件&#xff0c;方便使用。如果是单独的python文件&#xff0c;其他人使用前必须要先安装python环境&#xff0c;在python环境中通过命令执行我们的python程序。本节内容我们主要介绍一下使用Py…

Windows电脑怎么通过ssh访问GitHub

Windows系统访问GitHub可以通过使用Git Bash&#xff0c;它是Git版本控制软件的命令行版&#xff0c;包含了SSH客户端。你可以按照下面的步骤来配置和使用&#xff1a; 如果你还没有安装Git Bash&#xff0c;你可以去Git的官方网站(https://git-scm.com/)下载并安装。在安装过程…

html下播放.wav,wav格式文件用什么播放

WAV文件作为最经典的Windows多媒体音频格式&#xff0c;应用非常广泛&#xff0c;使用三个参数来表示声音&#xff1a;采样位数、采样频率和声道数&#xff1b;Windows Media Player和Winamp都可以播放。 本文环境&#xff1a;windows10系统、thinkpad t480电脑。 WAV文件作为最…

史上最全的JPA日常使用总结

好久没写博客了&#xff0c;今天来总结一下JPA的日常使用吧&#xff0c;因为换了工作&#xff0c;以前是用Mybatis Plus&#xff0c;现在要使用JPA。 虽说是总结&#xff0c;也算是学习。 JPA其实按道理来说是一种规范&#xff0c;像Hibernate就是遵循了这种规范。现在最具代…