[alibaba/easyexcel]读取Excel跳过指定行使用headRowNumber无效

2024-05-17 617 views
2

触发场景描述 Java类使用@ExcelProperty(index = 0)可以读取到 但使用@ExcelProperty("门店号")后,数据都为null 触发Bug的代码

ExcelUtils.ExcelReadListener<T> readListener = new ExcelUtils.ExcelReadListener<>(validator);
EasyExcel.read(inputStream, clazz, readListener)
        .sheet(sheetName)
        .headRowNumber(startRow - 1)
        .doRead();

Java数据类如下

@Data
public class CallConfigExcel {

    @ExcelProperty("门店号")
    private String storeCode;
}

结果如下: image

回答

6

是否有空格之类的?

9

指定行之后读取到数据全部为null?有bug

8

我现在也碰到这种情况了~!~ 经查是 有个 属性 headMap 是空的,不知道怎么回事 该map 初始曾经被赋值,但是又被一个tempList 给覆盖了,导致为空

配置是否有错?

EasyExcel.read(file.getInputStream(), clazz, listener)
                .sheet()
                .headRowNumber(headRowNumber)
                .doRead();

headRowNumber 我写的值是2 即忽略前两行,但是如果一写此值,那么 实体类的所有属性都是null 如果不写的话,实体类是可以正常读取excel 并且正确赋值的。

实体类::

@Data
@NoArgsConstructor
@AllArgsConstructor
public class ManualReClassExcelTO {

    @NotBlank
    @ExcelProperty(value = "Company Code")
    private String companyCode;

    @NotBlank
    @ExcelProperty(value = "Fiscal Year")
    private String fiscalYear;
3

@zhuangjiaju halo, can u help me ? tks~

3

@heihei180 这个headRowNumber就是有bug,不过有个比较low的方式,for + continue扫描到指定行再处理数据

6

@heihei180 这个headRowNumber就是有bug,不过有个比较low的方式,for + continue扫描到指定行再处理数据

我跳过了:~~

 /**
     * wait fix: #1611
     */
    private AtomicInteger counter = new AtomicInteger(1);

    private Integer skipNumber = -1;

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

        if (skipNumber > 0 && counter.getAndIncrement() == skipNumber)
            return;

// ... biz
}

指定的 headNumber 不设知道到 他的读取 build 上,而是改到 lisenter 上的skipNumber :)