使用步骤:

注:讲述使用 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

easyexcel 2.2.6 新版本以列表的形式读取 Excel相关推荐

  1. python循环读取excel存入列表_python3 循环读取excel文件并写入json操作

    文件内容: excel内容: 代码: import xlrd import json import operator def read_xlsx(filename): # 打开excel文件 data ...

  2. 阿里的Easyexcel读取Excel文件(最新版本)

      本篇文章主要介绍一下使用阿里开源的Easyexcel工具处理读取excel文件,因为之前自己想在网上找一下这个简单的立即上手的博客,发现很多文章的教程都针对比较旧的版本的Easyexcel,没有使 ...

  3. 使用java解析和读取excel表格(EasyExcel的简单使用)

    ** 解析excel的工具 ** Apache POI.JXL.Alibaba EasyExcel等.其中Apache POI基于DOM方式进行解析,将文件直接加载内存,所以速度较快,适合Excel文 ...

  4. pandas为dataframe添加新的数据行(rows)、在dataframe后面纵向添加一行数据(数据为列表list形式)、列有不匹配将会使用NA值进行填补

    pandas为dataframe添加新的数据行(rows).在dataframe后面纵向添加一行数据(数据为列表list形式).列有不匹配将会使用NA值进行填补 目录

  5. python中删除列表中的空元素以及如何读取excel中的数据

    这个暂时也没有找到更好的办法,用的是别人博客中的一种办法http://www.biofacebook.com/?p=186 while " in a: a.remove(") 其中 ...

  6. Python读取excel文件可读取xlsx格式和xls格式可直接读取超链接,读出为字典格式(列表套字典),处理合并单元格的问题

    直接上代码:(代码有注释,代码下方有解释) 1.可读取excel中的xlsx格式文件 2.可读取excel中的xls格式文件 3.可直接读取网页上的excel的超链接 4.解决有列合并的情况以及行合并 ...

  7. python列表逐行写入excel_python表格数据到excel-想问下python3怎么将列表数据逐行写入excel表格呢?...

    如何用python将数据写入excel表格 简介绍一下这两个库,先说xlrd,这个Excel比较,各种方法使用起来方便: bk = xlrd.open_workbook('your.xls') sh ...

  8. catia制作物料明细_CATIA导出装配文件的部件列表BOM清单到Excel文件 | 坐倚北风

    在CATIA中可以导出装配文件的部件列表BOM清单到Excel文件.点击Design Table命令按钮. 打开Creation of a Design Table对话框,选择Create a des ...

  9. EasyExcel 轻松灵活读取Excel内容

    写在前面 Java 后端程序员应该会遇到读取 Excel 信息到 DB 等相关需求,脑海中可能突然间想起 Apache POI 这个技术解决方案,但是当 Excel 的数据量非常大的时候,你也许发现, ...

最新文章

  1. 预见未来丨机器学习:未来十年研究热点
  2. Android DHCP 启动分析【2】
  3. 架构师之路 — API 经济 — Web、HTTP Server、API Service、Application
  4. Linux学习总结(9)——Linux 新手必知必会的 10 条 Linux 基本命令
  5. PHP pear安装
  6. 【攻防】Kubelet访问控制机制与提权方法研究
  7. 一个有关程序运行时间的小测试
  8. python模拟手机充值场景_appium+Python实例(二)模拟新建场景表(辅助测试执行)...
  9. python基础逻辑判断语句(九)
  10. 消息中间件学习总结(16)——17 个方面,综合对比 Kafka、RabbitMQ、RocketMQ、ActiveMQ 四个分布式消息队列
  11. 怎么用vc采集ni卡数据_「解决方案」三维激光扫描多数据混合作业,助力“地籍调查”...
  12. 关于djangorestframework
  13. python 更新pip报错 解决方法大全
  14. kms服务器修改,kms服务器ip地址修改
  15. 避免使用宏#define定义常量
  16. LSL学习笔记(4)
  17. python图形分析_使用Python图形化分析大Log文件
  18. iso文件用什么打开?还有iso是什么东西?
  19. 正宇丨有钱,把日子过好;没钱,把心情过好
  20. x+=x-=x*x; 和 x-=x*x; x+=x;

热门文章

  1. 什么是Library
  2. 封闭解、解析解和数值解定义
  3. 杭电 2072 单词数(题解+代码)
  4. 毛远丽教授谈机器学习技术在检验医学中的新应用|专家论坛
  5. XML和Schema命名空间详解---实例篇
  6. 【随便聊聊】Mac 笔记本该怎么选?
  7. IOS图像2之jpg、png图片保存、互转、设置有损压缩因子
  8. Android Tag-Cloud (云标签) 效果
  9. IDEA-自定义常用代码块
  10. 如何用java画一颗圣诞树