EsayExcel如何在业务层中获取表头?

1. 业务场景                                                                            

在Excel导入的时候, 也避免不了有些用户不按照流程, 去导入一些奇奇怪怪的Excel模板, 来导致后端系统500报错, 这个时候就需要校验Excel的表头来判断模板是否正确

EsayExcel如何在业务层中获取表头?_第1张图片

 源码在文章末尾


2. 获取表头

其实读取表头并不难, 我们可以直接去继承AnalysisEventListener<导入的exce实体类>, 并实现里面的方法, 其中invokeHeadMap方法就能实现获取表头的功能

/**
 * 读取表头
 */
@Slf4j
public class EasyExcelListener extends AnalysisEventListener {


    @Override
    public void invoke(ImportLocationInfor data, AnalysisContext context) {

    }

    @Override
    public void doAfterAllAnalysed(AnalysisContext context) {

    }

    @Override
    public void invokeHeadMap(Map headMap, AnalysisContext context) {
        log.info("表头数据 excelHead= {}", headMap);
    }
}

业务层读取Excel代码 

EasyExcel.read(file.getInputStream(), ImportLocationInfor.class, new EasyExcelListener() {
            
        }).sheet().headRowNumber(3).doRead();

3. 在业务层中获取表头

上述就是获取表头的方法, 虽然很简单, 但是如果有更复杂的业务逻辑, 放在这个类就尤为不合适了, 这里我们采取重写invokeHeadMap的方式实现在业务层中(impl)来校验表头

   /**
     * 表头校验
     *
     * @param file 文件
     * @throws IOException
     */
    public void checkHeader(MultipartFile file) throws IOException {
        EasyExcel.read(file.getInputStream(), ImportLocationInfor.class, new EasyExcelListener() {
            @Override
            public void invokeHeadMap(Map headMap, AnalysisContext context) {
                //headRowNumber(3)应该是循环到第三行, 在遍历的时候readRowHolder也会先读取0,1 所以这里指定为index3
                if (context.readRowHolder().getRowIndex() == 2) {
                    headMap.forEach((index, item) -> {
                        if (!HEAD.contains(item)) {
                            log.info("第三行表头参数>>{}", headMap);
                            throw new BaseServiceException("模板格式错误, 请下载地点信息导入模板!");
                        }
                    });
                }
            }
        }).sheet().headRowNumber(3).doRead();
    }

因为表头的参数时写死的我们可以采用静态的方式存储, 这样只会加载一次

    public final static HashSet HEAD = new HashSet() {{
        add("所属场景[*]");
        add("1级地点名称[*]");
        add("2级地点名称");
        add("3级地点名称");
        add("4级地点名称");
        add("5级地点名称");
        add("6级地点名称");
        add("7级地点名称");
    }};


EsayExcel在业务层中获取表头源码(0积分下载)-Java文档类资源-CSDN下载业务场景:                       更多下载资源、学习资料请访问CSDN下载频道.https://download.csdn.net/download/qq_45481709/86542177?spm=1001.2014.3001.5503

你可能感兴趣的:(工具类,java,esayExcel,Excel表格,表头,阿里巴巴)