文/朱季谦

假如有这样一个需求,每天需要读取以下表头的Excel文件,统计文件里击中黑名单的比例,该文件is_blacklist列的1表示击中了黑名单,0表示未击中黑名单。

基于该需求,可以在定时任务通过easyexcel工具进行处理。

一、首先需要在SpringBoot引入easyexcel的maven依赖

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

二、定义一个接收Excel文件表头列数据的Java Bean——

@Data
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode
public class BlackTitle {
@ExcelProperty(value = {"key"})
private String key; @ExcelProperty(value = {"is_blacklist"})
private String is_blacklist; }

这注解@ExcelProperty是easyexcel包的注解,起到的作用是,例如可以将private String key通过 @ExcelProperty(value = {"key"})映射到表格的key值。简单理解,就是每一个BlackTitle对象,能接收到表格每一行到数据,表格的key列值映射到BlackTitle的熟悉key值,表格的is_blacklist列值映射到BlackTitle的熟悉is_blacklist值。

三、继承EasyExcel 框架中的 AnalysisEventListener 接口的类 BlackTitleListener,用于监听并处理 Excel 文件中的数据行。

当EasyExcel解析每一行数据时,这个invoke 方法就会被调用,该BlackTitleListener类里的重写方法实现将当前读取的行数据添加到 data 列表中。该类最后提供了一个 getData() 方法,用于返回解析出来的数据列表,即集合data——

public static class BlackTitleListener extends AnalysisEventListener<BlackTitle> {

   private List<BlackTitle> data = new ArrayList<>();

   @Override
public void invoke(BlackTitle blackTitle, AnalysisContext analysisContext) {
data.add(blackTitle);
} @Override
public void doAfterAllAnalysed(AnalysisContext analysisContext) {
} public List<BlackTitle> getData(){
return data;
}
}

四、实现读取Excel文件的sheet表格——

String source = "C:\\Users\\Admin\\Desktop\\blacklist.xlsx";
BlackTitleListener listener = new BlackTitleListener();
//读取 Excel 文件的第一个 sheet 中的数据,并将其转换成 BlackTitle 对象,最终存储在 listener 对象中。
EasyExcel.read(source,listener).head(BlackTitle.class).sheet(0).headRowNumber(1).doReadSync();

这里创建一个名为 listenerBlackTitleListener 对象,在该对象里,可以监听读取每一行数据的操作。调用EasyExcel.read(...) 方法去读取Excel文件,通过 .head(BlackTitle.class) 设置表头信息,即将表头字段映射到BlackTitle类里属性。通过 .sheet(0) 指定要读取第一个sheet表格数据。.headRowNumber(1) 表示表头位于第一行(索引从 0 开始)。.doReadSync() 方法开始同步读取 Excel 数据,然后将数据存储到 listener 对象中。

五、获取读取存储到集合里的数据进行处理

获取读取到集合里的数据——

List<BlackTitle> data = listener.getData();

接下来,就可以通过简单的集合迭代来统计出表格is_blacklist列值为1的比例了——

 long blackSize = data.stream().filter(k->k.getIs_blacklist().equals("1")).count();

最后,完整代码如下——

public class BlackTitleTest {
public static void main(String[] args) {
String source = "C:\\Users\\Admin\\Desktop\\blacklist.xlsx";
BlackTitleListener listener = new BlackTitleListener();
EasyExcel.*read*(source,listener).head(BlackTitle.class).sheet(0).headRowNumber(1).doReadSync();
List<BlackTitle> data = listener.getData();
long blackSize = data.stream().filter(k->k.getIs_blacklist().equals("1")).count(); } public static class BlackTitleListener extends AnalysisEventListener<BlackTitle> { private List<BlackTitle> data = new ArrayList<>(); @Override
public void invoke(BlackTitle blackTitle, AnalysisContext analysisContext) {
data.add(blackTitle);
} @Override
public void doAfterAllAnalysed(AnalysisContext analysisContext) { } public List<BlackTitle> getData(){
return data;
} }
}

SpringBoot结合easyexcel处理Excel文件的更多相关文章

  1. SpringBoot整合easyexcel实现Excel的导入与导出

    导出 在一般不管大的或者小的系统中,各家的产品都一样,闲的无聊的时候都喜欢让我们这些程序员导出一些数据出来供他观赏,非说这是必须需求,非做不可,那么我们就只能苦逼的哼哧哼哧的写bug喽. 之前使用PO ...

  2. springboot整合easyexcel实现Excel导入导出

    easyexcel:快速.简单避免OOM的java处理Excel工具 Java解析.生成Excel比较有名的框架有Apache poi.jxl.但他们都存在一个严重的问题就是非常的耗内存,poi有一套 ...

  3. SpringBoot整合Easyexcel操作Excel,闲暇之余,让我们学习更多

    关于封面:晚饭后回自习室的路上 Easyexcel 官方文档 Easyexcel | github 前言 最近也是在写的一个小练习中,需要用到这个.趁着这次就将写个整合的Demo给大家. 希望能够让大 ...

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

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

  5. SpringBoot基于EasyExcel解析Excel实现文件导出导入、读取写入

    1. 简介   Java解析.生成Excel比较有名的框架有Apache poi.jxl.但他们都存在一个严重的问题就是非常的耗内存,poi有一套SAX模式的API可以一定程度的解决一些内存溢出的问题 ...

  6. EasyExcel完成excel文件的导入导出

    简介 常见的Excel分析框架有Apache poi 和EasyExcel, poi在另一篇已经介绍过了,详情可以看[https://www.cnblogs.com/jasmine-e/p/16064 ...

  7. SpringBoot基于easyexcel导出和写入Excel

      easyexcel是阿里巴巴旗下开源项目,主要用于Excel文件的导入和导出处理,今天我们利用SpringBoot和easyexcel实战演示如何导出和写入Excel文件. 一.加入我们需要的ea ...

  8. 阿里 EasyExcel 7 行代码优雅地实现 Excel 文件生成&下载功能

    欢迎关注个人微信公众号: 小哈学Java, 文末分享阿里 P8 资深架构师吐血总结的 <Java 核心知识整理&面试.pdf>资源链接!! 个人网站: https://www.ex ...

  9. 文件系统(01):基于SpringBoot框架,管理Excel和PDF文件类型

    本文源码:GitHub·点这里 || GitEE·点这里 一.文档类型简介 1.Excel文档 Excel一款电子表格软件.直观的界面.出色的计算功能和图表工具,在系统开发中,经常用来把数据转存到Ex ...

  10. SpringBoot图文教程14—SpringBoot集成EasyExcel「上」

    有天上飞的概念,就要有落地的实现 概念十遍不如代码一遍,朋友,希望你把文中所有的代码案例都敲一遍 先赞后看,养成习惯 SpringBoot 图文教程系列文章目录 SpringBoot图文教程1「概念+ ...

随机推荐

  1. dbeaver使用详解

    1.dbeaver使用本地驱动 解压 点击可执行文件 驱动管理 新建驱动 起名字 com.mysql.jdbc.Driver jdbc:mysql//{host}[:{port}]/[{databas ...

  2. sass 混合指令 (Mixin Directives)详解

    ​ 混合指令(Mixin)用于定义可重复使用的样式,避免了使用无语意的 class,比如 .float-left.混合指令可以包含所有的 CSS 规则,绝大部分 Sass 规则,甚至通过参数功能引入变 ...

  3. HTML——input之复选框

    在 HTML 中,把 <input> 标签中的 type 属性设置为 checkbox 可以实现多选框的效果.具体语法格式如下: <input type="checkbox ...

  4. protoc-gen-go: error:inconsistent package names: , prototest

    如果你已经安装proto ,以及go生成proto插件.但还是报这种错误,请看一下是否 protoc --go_out=./ *.proto 指令打错了

  5. Android 12(S) MultiMedia Learning(一)开篇

    这个系列将会作为自己学习android多媒体的笔记,如果有错误请帮忙指正. 本系列的学习均基于Android 12(S),代码来源:http://aospxref.com/

  6. Flutter学习网站和安装问题

    一.Flutter网站 Flutter中文开发者网站(推荐) https://flutter.cn/ 二.Flutter第三方库 Pub.Dev https://pub.dev/ 三.Flutter源 ...

  7. C#开发的股票盯盘小工具——摸鱼助手,附源码

    写了个盯盘小工具,最近发现很多炒股的小伙伴,上班期间看手机频繁是不是影响不好?电脑上打开交易软件,那影响是不是更不好?所以我就写了个小工具,给大家"摸鱼"用.虽然是摸鱼用,但是平常 ...

  8. 6.26考试总结(NOIP模拟10)[入阵曲·将军令·星空]

    对于虚伪而言,真实的光明或许过于耀眼了 前言 这一次吧,考得特别烂,主要是这次考试想搞一下特殊性质,然后一不小心就因小失大弄巧成拙了下,下次注意吧.. T1 入阵曲 暴力 思路 对于这个题的话,暴力的 ...

  9. C++笔记(2)拷贝构造函数

    拷贝构造函数是一种特殊的构造函数,它在创建对象时,是使用同一类中之前创建的对象来初始化新创建的对象. 如果在类中没有定义拷贝构造函数,编译器会自行定义一个.如果类带有指针变量,并有动态内存分配,则它必 ...

  10. FastJson转Java对像字段不区分大小写

    昨天遇到参数key大小写不一致导致校验签名失败的问题,查了很长时间才找到原因.看了一下FastJson源码,发现JSON.toObject中转换成对象的时候会忽略大小写. 所以,当使用了JSON.to ...