• java利用EasyExcel实现导入功能,并返回错误信息的所属行列


    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;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47

    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();
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    实体类:

    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;
        
    	}
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
  • 相关阅读:
    浅谈pytorch安装
    Python:实现modular exponential模指数算法(附完整源码)
    VR失重太空舱游乐设备|航空航天VR体验|VR航天航空体验馆
    Png怎么转jpg?这种方法教你如何快速转换
    ONLYOFFICE 桌面编辑器 8.1使用体验分享
    容易忽视的细节:Log4j 配置导致的零点接口严重超时
    【Hive SQL】统计同名路径下目录数量(基于reverse、split和substr函数)
    大数据产业酝酿巨变 元宇宙新格局呼之欲出
    网络安全专业的就业方向有哪些?
    Python-sklearn-diabetes项目实战
  • 原文地址:https://blog.csdn.net/weixin_45670589/article/details/126227796