我们知道EasyExcel获取文档头部信息主要是通过重写invokeHeadMap方法来实现。也就是下面的这个方法.

 @Override
    public void invokeHeadMap(Map<Integer,String> map,AnalysisContext context) { 
         System.out.println("=========="+map.toString()+"================");
    }

今天在实际使用时遇到了一个这样的问题。我要导入的文档有文件头的同时还存在一个文件描述消息
在这里插入图片描述而问题在于invokeHeadMap将这两行都当做文档头来进行了读取,错误的执行了两次方法。
我最初的想法是通过自定义异常的方式在头部信息校验时校验有问题的对象则抛出异常结束这个方法。

 List<String> headList = new ArrayList<>();
            for (Integer i : map.keySet()) {
                headList.add(map.get(i));
            }
            if(!headList.get(0).equals("YM")){
                throw new Exception();
            }

但是因为他执行了两次,导致第二行的文本描述也添加了进来并且作为了头部信息来进行了比较,导致正常状态下无法导入,代码更改后,通过定义变量记录方法的执行次数来约束判断的条件。

 @SneakyThrows
    @Override
    public void invokeHeadMap(Map<Integer,String> map,AnalysisContext context) {
        count++;
        //比较文件头部信息,文件头部不匹配则抛出异常停止读取文件
        //headList用来存放文档的头部信息
        if(count<=2){
            List<String> headList = new ArrayList<>();
            for (Integer i : map.keySet()) {
                headList.add(map.get(i));
            }
            if(!headList.get(0).equals("YM")){
                throw new Exception();
            }
            if(!headList.get(1).equals("TERRITORYPOST")){
                throw new Exception();
            }
            if(!headList.get(2).equals("TERRITORYCODE")){
                throw new Exception();
            }
            if(!headList.get(3).equals("TERRITORYNAME")){
                throw new Exception();
            }
            if(!headList.get(4).equals("TERRITORYTYPE")){
                throw new Exception();
            }
            if(!headList.get(5).equals("Promotion Grid ID")){
                throw new Exception();
            }
            if(!headList.get(6).equals("Promotion Grid")){
                throw new Exception();
            }
            if(!headList.get(7).equals("PROVINCECODE")){
                throw new Exception();
            }
            if(!headList.get(8).equals("PROVINCE_WORK")){
                throw new Exception();
            }
            if(!headList.get(9).equals("CITYCODE")){
                throw new Exception();
            }
            if(!headList.get(10).equals("CITY_WORK")){
                throw new Exception();
            }
            if(!headList.get(11).equals("POSTTYPE")){
                throw new Exception();
            }
            if(!headList.get(12).equals("PROPERTY")){
                throw new Exception();
            }
            if(!headList.get(13).equals("CopyFlag")){
                throw new Exception();
            }
            if(!headList.get(14).equals("Event")){
                throw new Exception();
            }
            if(!headList.get(15).equals("SpecialCase")){
                throw new Exception();
            }
            if(!headList.get(16).equals("StatusReason")){
                throw new Exception();
            }
        }
        System.out.println("=========="+map.toString()+"================");
    }
GitHub 加速计划 / ea / easyexcel
31.64 K
7.47 K
下载
快速、简洁、解决大文件内存溢出的java处理Excel工具
最近提交(Master分支:3 个月前 )
c42183df Bugfix 3 个月前
efa7dff6 * 重新加回 `commons-io` 3 个月前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐