Excel监听器:

package cn.com.git.dgmsdi.web.controller.batchProducts;


import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import java.util.ArrayList;
import java.util.List;

public final class ExcelListener<T> extends AnalysisEventListener<T>{

    /**
     * 自定义用于暂时存储data
     * 可以通过实例获取该值
     */
    private List<T> datas = new ArrayList<>();
    /**
     * 每解析一行都会回调invoke()方法
     * @param object  读取后的数据对象
     * @param context 内容
     */
    @Override
    @SuppressWarnings("unchecked")
    public void invoke(Object object, AnalysisContext context) {
        T map = (T) object;
        //数据存储到list,供批量处理,或后续自己业务逻辑处理。
        datas.add(map);
    }
    @Override
    public void doAfterAllAnalysed(AnalysisContext context) {
        //解析结束销毁不用的资源
        //注意不要调用datas.clear(),否则getDatas为null
    }
    /**
     * 返回数据
     * @return 返回读取的数据集合
     **/
    public List<T> getDatas() {
        return datas;
    }
    /**
     * 设置读取的数据集合
     * @param datas 设置读取的数据集合
     **/
    public void setDatas(List<T> datas) {
        this.datas = datas;
    }
}

controller层:

    @PostMapping(value = "/import")
    public Map<String,List<String>> readExcel(MultipartFile file) throws IOException {
        ExcelListener<BatchProductsReqDTO> listener = new ExcelListener<>();
        //headRowNumber(1)从第2行开始读取,使用getDatas()方法取出数据
        EasyExcel.read(file.getInputStream(), BatchProductsReqDTO.class, listener).headRowNumber(1).sheet(0).doRead();
        List<BatchProductsReqDTO> list = listener.getDatas();
        System.out.println(list);
        //取出导入的数据list,并拼装报文向Service层传递
        BaseRequestDTO<List<BatchProductsReqDTO>> baseRequestDTO = new BaseRequestDTO<>();
        baseRequestDTO.setPayload(list);
        //在Service层做业务逻辑处理,并返回错误信息存放在map中,比如{"0":["1","2"],"2":["3","4"]}说明:Excel中的数据在第一行第2、3列和第二行第4、5列的数据校验不通过(首列、首行都为0)
        BaseResponseDTO<Map<String,List<String>>> multimapBaseResponseDTO = batchProductsService.importData(baseRequestDTO);
        return multimapBaseResponseDTO.getPayload();
    }

实体类:

package cn.com.git.dgmsdi.api.inside.dto.batchProducts;

import com.alibaba.excel.annotation.ExcelIgnore;
import com.alibaba.excel.annotation.ExcelProperty;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import lombok.extern.slf4j.Slf4j;

import java.math.BigDecimal;
import java.util.Date;

/**
 * @author zhanghao
 * @create 2022/7/27 14:33
 */
@Slf4j
@Getter
@Setter
@ToString
public class BatchProductsReqDTO {

    /**
     * 放款银行(Excel数据第二列)
     */
    @ExcelProperty(value = "放款机构", index = 1)
    private String loanBank;

    /**
     * 产品ID
     */
    @ExcelProperty(value = "业务产品名称", index = 2)
    private String productName;

    /**
     * 客户名称
     */
    @ExcelProperty(value = "客户名称", index = 3)
    private String custName;

    /**
     * 导入ID
     */
    @ExcelIgnore
    private String importId;

    /**
     * 导入批次号
     */
    @ExcelIgnore
    private String importBatchNo;
    
	}

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐