最新要闻

广告

手机

iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?

iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?

警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案

警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案

家电

SpringBoot结合easyexcel处理Excel文件-全球焦点

来源:博客园

文/朱季谦


【资料图】

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

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

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

   com.alibaba   easyexcel   3.1.1 

二、定义一个接收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 {   private List data = new ArrayList<>();     @Override   public void invoke(BlackTitle blackTitle, AnalysisContext analysisContext) {     data.add(blackTitle);   }     @Override   public void doAfterAllAnalysed(AnalysisContext analysisContext) {   }     public List 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 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 data = listener.getData();     long blackSize = data.stream().filter(k->k.getIs_blacklist().equals("1")).count();       }   public static class BlackTitleListener extends AnalysisEventListener {     private List data = new ArrayList<>();          @Override     public void invoke(BlackTitle blackTitle, AnalysisContext analysisContext) {       data.add(blackTitle);     }          @Override     public void doAfterAllAnalysed(AnalysisContext analysisContext) {          }          public List getData(){       return data;     }   } }

关键词: