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 |