接口

 /**
* 导入
*
* @param file
* @return
*/
@PostMapping("/waitimport")
public Result waitImport(@RequestParam("file") MultipartFile file) {
try { ExcelReader read = EasyExcel.read(file.getInputStream()).build(); ReadSheet sheet1 = EasyExcel.readSheet("流水列表").head(BankSerialWaitCheckImportDto.class).registerReadListener(bankSerialWaitCheckImportListener).build();
ReadSheet sheet2 = EasyExcel.readSheet("明细列表").head(BusinessBillsBankSerialImportDto.class).registerReadListener(businessBillsBankSerialImportListener).build(); read.read(sheet1, sheet2);
read.finish(); ThreadLocal<List<BankSerialWaitCheckImportDto>> dataListLocal1 = bankSerialWaitCheckImportListener.getDataList();
List<BankSerialWaitCheckImportDto> bsList = (List<BankSerialWaitCheckImportDto>) dataListLocal1.get(); ThreadLocal<List<BusinessBillsBankSerialImportDto>> dataListLocal2 = businessBillsBankSerialImportListener.getDataList();
List<BusinessBillsBankSerialImportDto> billsRecv = (List<BusinessBillsBankSerialImportDto>) dataListLocal2.get(); Result result = bankSerialService.handleWaitCheckPageImport(bsList, billsRecv);
return Result.ok();
} catch (Exception e) {
e.printStackTrace();
return Result.error("导入失败:" + e.getMessage());
}
}

监听器

package com.chinaums.chcp.biz.importXls.listener;

import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import com.chinaums.chcp.biz.importXls.vo.BankSerialWaitCheckImportDto;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component; import java.util.ArrayList;
import java.util.List; @Component
@Scope("prototype")
public class BankSerialWaitCheckImportListener extends AnalysisEventListener<BankSerialWaitCheckImportDto> { // 保存结果
List<BankSerialWaitCheckImportDto> saveList = new ArrayList<>(); ThreadLocal<List<BankSerialWaitCheckImportDto>> dataList = new ThreadLocal<>(); /**
* 每读一行内容,都会调用一次该对象的invoke,在invoke可以操作使用读取到的数据
*
* @param vo
* @param analysisContext
*/
@Override
public void invoke(BankSerialWaitCheckImportDto vo, AnalysisContext analysisContext) {
vo.setNum(saveList.size() + 1);
saveList.add(vo);
} /**
* 读取完整个文档之后,调用的方法
*
* @param analysisContext
*/
@Override
public void doAfterAllAnalysed(AnalysisContext analysisContext) {
List<BankSerialWaitCheckImportDto> newList = new ArrayList<>();
newList.addAll(saveList);
saveList.clear();
dataList.set(newList); } public ThreadLocal<List<BankSerialWaitCheckImportDto>> getDataList() {
return dataList;
}
}
package com.chinaums.chcp.biz.importXls.listener;

import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import com.chinaums.chcp.biz.importXls.vo.BusinessBillsBankSerialImportDto;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component; import java.util.ArrayList;
import java.util.List; @Component
@Scope("prototype")
public class BusinessBillsBankSerialImportListener extends AnalysisEventListener<BusinessBillsBankSerialImportDto> { // 保存结果
List<BusinessBillsBankSerialImportDto> saveList = new ArrayList<>(); ThreadLocal<List<BusinessBillsBankSerialImportDto>> dataList = new ThreadLocal<>(); /**
* 每读一行内容,都会调用一次该对象的invoke,在invoke可以操作使用读取到的数据
*
* @param vo
* @param analysisContext
*/
@Override
public void invoke(BusinessBillsBankSerialImportDto vo, AnalysisContext analysisContext) {
vo.setNum(saveList.size() + 1);
saveList.add(vo);
} /**
* 读取完整个文档之后,调用的方法
*
* @param analysisContext
*/
@Override
public void doAfterAllAnalysed(AnalysisContext analysisContext) {
List<BusinessBillsBankSerialImportDto> newList = new ArrayList<>();
newList.addAll(saveList);
saveList.clear();
dataList.set(newList); } public ThreadLocal<List<BusinessBillsBankSerialImportDto>> getDataList() {
return dataList;
}
}

实体类

package com.xxx.chcp.biz.importXls.vo;

import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import lombok.Data; import java.io.Serializable; /**
* 流水列表
*/
@Data
//导出时忽略没有@ExcelProperty的字段
@ExcelIgnoreUnannotated
public class BankSerialWaitCheckImportDto implements Serializable {
private Integer num; @ExcelProperty(value = "唯一标识")
private String id; /**
* 银行名称-关联
*/
@ExcelProperty(value = "银行名称")
private String bankName; /**
* 项目名称
*/
@ExcelProperty(value = "项目名称")
private String projectName; /**
* 备注
*/
@ExcelProperty(value = "备注")
private String remark; }
package com.xxx.chcp.biz.importXls.vo;

import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import com.chinaums.chcp.base.annotation.Dict;
import com.chinaums.chcp.base.constant.SysConstant;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;
import lombok.Data; import java.io.Serializable;
import java.time.LocalDateTime; /**
* 明细列表
*/
@Data
//导出时忽略没有@ExcelProperty的字段
@ExcelIgnoreUnannotated
public class BusinessBillsBankSerialImportDto implements Serializable {
private Integer num; /**
* 关联银行流水入账ID
*/
@ExcelProperty(value = "关联的唯一标识")
private String bankSerialId; /**
* 合同号
*/
@ExcelProperty(value = "合同编号")
private String contractNo; /**
* 合同金额
*/
@ExcelProperty(value = "合同金额")
private String contractAmount; }

EasyExcel读取多个sheet表数据,自定义监听器的更多相关文章

  1. Easypoi实现excel多sheet表导入导出功能

    Easypoi简化了开发中对文档的导入导出实现,并不像poi那样都要写大段工具类来搞定文档的读写. 第一步引入Easypoi依赖 <!-- 导出文件工具 EasyPoi实现Excel读写管理测试 ...

  2. 使用python对工作簿每个sheet表进行数据可视化展示(本案例是从第2个sheet开始循环读取也就是索引为1的表)

    # 导入相关模块from pyecharts.charts import Barfrom pyecharts import options as optsfrom pyecharts.charts i ...

  3. c# applibrary实现一个Sheet表中存放多张DataTable数据

    1.工具类(applibrary.dll) public class ExcelHelper { /// <summary> /// 文件名 /// </summary> pu ...

  4. MVC视图中读取ViewBag传递过来的HashTable表数据

    视图中头部添加 @using System.Collections; 循环读取哈希表数据 <ul id="AccessView" class="sys_spec_t ...

  5. Java读取excel指定sheet中的各行数据,存入二维数组,包括首行,并打印

    1. 读取 //读取excel指定sheet中的各行数据,存入二维数组,包括首行 public static String[][] getSheetData(XSSFSheet sheet) thro ...

  6. HBase表数据的转移之使用自定义MapReduce

    目标:将fruit表中的一部分数据,通过MR迁入到fruit_mr表中 Step1.构建ReadFruitMapper类,用于读取fruit表中的数据 package com.z.hbase_mr; ...

  7. 如何实现MySQL表数据随机读取?从mysql表中读取随机数据

    文章转自 http://blog.efbase.org/2006/10/16/244/如何实现MySQL表数据随机读取?从mysql表中读取随机数据?以前在群里讨论过这个问题,比较的有意思.mysql ...

  8. pandans导出Excel并将数据保存到不同的Sheet表中

    数据存在mongodb中,按照类别导出到Excel文件,问题是想把同一类的数据放到一个sheet表中,最后只导出到一个excel文件中# coding=utf-8import pandas as pd ...

  9. Selenium应用代码(读取mysql表数据登录)

    1. 封装链接数据库的类: import java.sql.ResultSet; import java.sql.Connection; import java.sql.DriverManager; ...

  10. Spark无法读取hive 3.x的表数据

    通过Ambari2.7.3安装HDP3.1.0成功之后,通过spark sql去查询hive表的数据发现竟然无法查询 HDP3.0 集成了hive 3.0和 spark 2.3,然而spark却读取不 ...

随机推荐

  1. SQLserver查询用逗号隔开的字段中是否包含另一个字段的值

    CHARINDEX(','+用逗号隔开的字段+',',','+是否包含的字段+',')>0 大于0则存在

  2. Selenium KPI接口 时间等待

    常见的时间等待有三种: 固定.显示.隐士. 应用场景: 主要用于模拟真实的用户操作,有时时间过于短,页面响应不过来,从而造成元素定位不到. 使用格式: sleep(3):一般用于调试 implicit ...

  3. 【译】Visual Studio 中新的强大生产力特性

    有时候,生活中的小事才是最重要的.在最新版本的 Visual Studio 中,我们增加了一些功能和调整,目的是让您脸上带着微笑,让您更有效率.这里是其中的一些列表,如果您想要完整的列表,请查看发行说 ...

  4. Qt ButtonRole参数的作用

    文章目录 QMessgageBox中addButton(QAbstructButton* , ButtonRole),ButtonRole的作用 QMessgageBox中addButton(QAbs ...

  5. 数据质量框架QUalitis浅尝使用

    数据质量管理平台(微众银行)Qualitis+Linkis (一)Qualitis是一个数据质量管理系统,用于监控数据质量. 其功能包括: 数据质量模型定义 数据质量结果可视化 可监控 数据质量管理服 ...

  6. Docker Swarm(一)

    Docker Swarm(一)即使有了Docker Compose,项目的部署仍然存在问题,因为Docker Compose只能把项目所有的容器部署在同一台机器上,这在生产环境下是不现实的.Docke ...

  7. burp suite使用(一) --- 抓包,截包,改包

    接下来我将以一个新手的角度讲述如何使用burp来抓包,截包和改包. 我采用的是UC浏览器来配合burp的使用. 1.设置浏览器 设置---其他---更改代理设置 由于UC浏览器采用的是ie的内核,所以 ...

  8. 【Java】Java UDP 套接字编程乱码问题

    零.发现问题 用Java写了个UDP收发程序,发现中文有问题! package socket; import java.io.IOException; import java.net.Datagram ...

  9. study Python3【2】导入模块

    import 与 from...import 在 python 用 import 或者 from...import 来导入相应的模块. 将整个模块(somemodule)导入,格式为: import ...

  10. AI数字人Heygem:口播与唇形同步的福音,无需docker,无需配置环境,一键整合包来了

    介绍 短短72小时,硅基智能在GitHub开源的数字人模型Heygem.ai便突破1,300颗Star,迅速成为全球技术社区瞩目的焦点.这一现象级的增长速度不仅彰显了Heygem.ai的技术领先性,更 ...