首页 > 其他分享 >SpringBoot结合easyexcel处理Excel文件

SpringBoot结合easyexcel处理Excel文件

时间:2023-05-25 17:35:51浏览次数:43  
标签:listener SpringBoot easyexcel BlackTitle Excel blacklist data public

文/朱季谦

假如有这样一个需求,每天需要读取以下表头的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;
     }

   }
 }

标签:listener,SpringBoot,easyexcel,BlackTitle,Excel,blacklist,data,public
From: https://www.cnblogs.com/zhujiqian/p/17431991.html

相关文章

  • springboot 跳转到网页上的两种实现方式(转发与重定向详细对比)
    1.情景展示虽然现在流行的是前后端分离,后端开发与前端往往只进行数据交互,不需要参与对网页跳转的控制及网页内容的开发。但是,由服务器(后端)跳转到客户端(浏览器)或者从A服务器跳到B服务器是一项基本的能力。在项目开发中,真正遇到的时候,该如何实现?哪种实现方式更好?2.具体分析......
  • SpringBoot中使用@Scheduled实现定时任务通过读取配置文件动态开关
    场景SpringBoot中定时任务与异步定时任务的实现:https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/117083609上面讲的通过@Scheduled注解实现简单定时任务的方式。如果定时任务有多个,不同业务场景下需要动态配置某个定时任务的开关。可以通过@ConditionalOnPropert......
  • 3万多中国植物志植物百科ACCESS\EXCEL数据库
    中国是全球植物多样性最丰富的国家之一,全球36个热点地区主要或部分在我国境内的有四个。在一穷二白的基础上,经全国312位作者和164位绘图人员45年的努力,《中国植物志》自1959年开始出版,在2004年全部完成,记载了301科3408属31142种植物的科学名称、形态特征、生态环境、地理分布、经......
  • 1万多花木百科花木大全(含图)ACCESS\EXCEL数据库
    《花木百科花木大全[图]ACCESS数据库》数据库是采集全X花木网的图文数据,资料很详细,字段包含种名、学名、别名、花期、生态性状、观赏性分类、科、属、分布地区、形态特征、生长习性、主要病虫害、园林用途、主要功能、园林品种推荐、其他等。因为网站源花木的图片有限,所以有图片......
  • 近8万条谜语灯谜大全ACCESS\EXCEL数据库
    其实互联网上关于谜语和灯谜的资料仍然是挺多的,但是要想数据量以万来计算并且是接近10万的量来看的话,就只能是《近8万条谜语灯谜大全ACCESS数据库》了。而且《近8万条谜语灯谜大全ACCESS数据库》的数据表字段中也包含分类字段,可以根据分类字段有针对性的给出谜语。分类情况包含:......
  • springboot入门
    1. 介绍  7SpringBoot是Spring中的一个成员, 可以简化Spring,SpringMVC的使用。 他的核心还是IOC容器。1.1 特点:  7Create stand-alone Spring applications创建spring应用Embed Tomcat, Jetty or Undertow directly (no need to deploy WAR files)内嵌的tomca......
  • 上万条童话故事儿童故事ACCESS\EXCEL数据库
    虽然已经有《7千多儿童故事网ACCESS\EXCEL数据库》这种记录数的童话故事类数据,但是遇到了好采集的就总想采集下来,后续有时间或有需求可以再做合并等操作。分类情况统计为:儿童故事:儿童小故事(1895)、睡前故事(1229)、益智故事(233)、哲理故事(177)。民间故事:世界上下五千年(257)、外国民间......
  • 10万单词例句表单词句子ACCESS\EXCEL数据库
    原本我以为《3万5千英语句子英语例句大全ACCESS数据库》例句已经够多了,没想到今天遇到一个10万条英语单词例句的数据,非常适合与单词词典进行关联学习,例句多了单词的用法以及句子的掌握都更有效率,例句多了单词的用法以及句子的掌握都更有效率,例句多了单词的用法以及句子的掌握都更......
  • 5-22|pywintypes.com_error: (-2147352567, '发生意外。', (0, 'Microsoft Office Exc
    pywintypes.com_error:(-2147352567,'发生意外。',(0,'MicrosoftOfficeExcel','Excel无法打开文件“pywintypes.com_error:(-2147352567,'发生意外。',(0,'MicrosoftOfficeExcel','Excel无法打开文件“价格(手工调整1).xlsx”,因为文件格式或文件扩展......
  • 如何利用VBA实现Excel与Word交互?
    excel与word数据交互的需求很常见,例如,利用excel明细生成word合同、利用excel明细生成word报告单、批量提取word数据到excel表格等等。通常情况下大家都是手动复制粘贴。但是其实可以用程序去简化这一部分工作。在做开发过程中,遇到过很多案例,在此总结出来。一、什么是VBA?首先我们来......