easyexcel 多级表头因为部分字段名称相同,导致读取覆盖的问题

zbdgwd5y  于 5个月前  发布在  其他
关注(0)|答案(3)|浏览(115)

建议先去看文档
快速开始常见问题
触发场景描述
使用多级表头导入,因为,一级表头字段不同,二级 excel字段名称相同,导致数据覆盖的问题
触发Bug的代码

这里写代码
![image](https://user-images.githubusercontent.com/35096977/206956178-70d644f3-c2a9-41b1-bd62-c16e2a9a7545.png)
![image](https://user-images.githubusercontent.com/35096977/206956210-739da0d5-b34d-491c-88b5-ee22586154bd.png)

提示的异常或者没有达到的效果

siv3szwd

siv3szwd1#

目前ExcelProperty这个注解读的时候,如果存在多个,只会取最后一个。read: When you have multiple heads, take the last one。
建议你可以先通过指定列下标来实现。

xzv2uavs

xzv2uavs2#

这个建议使用下标来处理,后续考虑自定义头匹配。

bvn4nwqk

bvn4nwqk3#

可以尝试使用 eec 来处理这类多表头读取,上面的文件可以使用多注解来转对象或者直接转Map,示例代码如下

try (ExcelReader reader = ExcelReader.read(Paths.get("D:\\测试.xlsx"))) {
    Sheet sheet = reader.sheet(0);
    List<O> list = sheet.header(1, 2).bind(O.class).rows().map(row -> (O) row.get()).collect(Collectors.toList());
    list.forEach(System.out::println);
    sheet.reset(); // 重置
    List<Map<String, Object>> rows = sheet.header(1, 2).rows().map(Row::toMap).collect(Collectors.toList());
    rows.forEach(System.out::println); // Map的Key为"单位承担保险:养老金"  "Row1:Row2"这种格式获取数据
} catch (IOException e) {
    e.printStackTrace();
}

// 使用多注解来处理多行表头,几行表头就定义几行注解
public static class O {
    @ExcelColumn("单位承担保险")
    @ExcelColumn("养老金")
    private BigDecimal ylj;
    @ExcelColumn("单位承担保险")
    @ExcelColumn("医疗")
    private BigDecimal yl;

    @ExcelColumn("个人承担保险")
    @ExcelColumn("养老金")
    private BigDecimal gylj;
    @ExcelColumn("个人承担保险")
    @ExcelColumn("医疗")
    private BigDecimal gyl;

    @Override
    public String toString() {
        return ylj + " : " + gylj;
    }
}

相关问题