[alibaba/easyexcel]填充列表模式,采用List传入数据,生成的excel文件可能存在串行问题

2024-05-16 863 views
4

触发场景描述

使用列表填充模式,且传入数据类型为List<Map>,每行数据对应一个Map对象;如果前面某行的Map对象中缺少模板中定义的key,而后继行又有这个key,则key对应的列会出现串行问题。具体重现方式如下: 定义一个excel模板如下(假设模板文件名为temp.xlsx):

账号 姓名
{.account} {.name}

触发Bug的代码

// 采用List<Map>构造两条数据
List datas = new ArrayList<>();
{
    Map<String, Object> map = new HashMap<String, Object>();
    map.put("account", "account1");
    // 此处缺少name,所以未设置name
    // 因为数据库是按照纵表方式设计和存储的,读取出来的数据可能缺少某些key
    datas.add(map);
}
{
    Map<String, Object> map = new HashMap<String, Object>();
    map.put("account", "account2");
    map.put("name", "name2");
    datas.add(map);
}
// 按列表填充方式生成excel文件
String templateFileName = "template.xlsx";
String fileName = "users.xlsx";
ExcelWriterSheetBuilder sheet = EasyExcel.write(fileName).withTemplate(templateFileName).sheet();
sheet.doFill(datas);

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

无任何异常和报错,但第二行的name跑到了第一行了,生成的excel文件如下:

账号 姓名
account1 name2
account2

回答

9

这个需要整体重新设计。整个fill逻辑要重新梳理

5

这个有计划处理吗

5

使用新版本还是会出现这个问题,将尝试修复一下

3
2510 修改了doFill()方法