easyExcel文件头部信息校验爬坑

这篇博客讲述了在使用EasyExcel处理Excel文件时遇到的问题,即invokeHeadMap方法错误地将文件描述作为头部信息读取。作者通过增加计数器限制头部信息的校验次数,确保只校验两行头部信息,并对头部字段进行逐一匹配,避免了错误的导入。此外,还展示了具体的代码实现来解决这个问题。

我们知道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<Int
### 使用EasyExcel配置表头以实现数据导入 #### 配置表头并读取Excel文件的数据 通过`@HeadRowNumber`注解指定从哪一行开始作为头部,通常情况下默认是从第一行。如果存在多级表头,则可以通过设置此参数跳过不需要解析的行数。 对于简单的场景可以直接利用实体类映射的方式完成表头到字段之间的关联,在实体属性上添加`@ExcelProperty`注解释放具体列名或者索引位置: ```java public class User { @ExcelProperty("姓名")//根据名称匹配 private String name; @ExcelProperty(index = 0)//根据下标匹配(当有多余空白列时推荐使用这种方式) private Integer age; } ``` 接着创建监听器用于接收每一行转换后的对象列表,并重写相应的方法处理业务逻辑: ```java class UserDataListener extends AnalysisEventListener<User> { /** * 这个每一条数据解析都会来调用 * * @param oneRowData 表格中的一条记录对应的JavaBean实例 */ @Override public void invoke(User oneRowData, AnalysisContext context) { System.out.println(oneRowData); } /** * 所有数据解析完成了会来调用 */ @Override public void doAfterAllAnalysed(AnalysisContext context) { // 数据全部解析完成后执行的操作 } } ``` 最后编写具体的读取流程代码如下所示: ```java String fileName = "path/to/excel/file.xlsx"; EasyExcel.read(fileName, User.class, new UserDataListener()) .sheet() .headRowNumber(1)//如果有标题栏则加上这句表示忽略首行 .doRead(); ``` 上述过程实现了基于预设好的模板格式去校验传入文件内的结构是否一致[^4]。
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值