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

2024-05-09 154 views
9

触发场景描述 使用多级表头导入,因为,一级表头字段不同,二级 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)

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

回答

8

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

3

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

3

可以尝试使用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;
    }
}