1
触发场景描述
多列表组合填充填充场景出现数据填充丢失
这边的目标场景是有多个下拉的列表填充 模版长这个样子 预期效果 可以生成并填充下拉的列表
触发Bug的代码 public static String esBatchImportFileOptionCodeFill(File originaltemplateFile,
Map<String, List<EsOptionBaseDTO>> map) {
String fileName = FileUtil.getTmpDir() + File.separator
+ IdUtil.fastSimpleUUID() + ".xlsx";
FileUtil.touch(fileName);
try (ExcelWriter excelWriter = EasyExcel.write(fileName).withTemplate(originaltemplateFile).build()) {
WriteSheet writeSheet = EasyExcel.writerSheet(2).build();
for (Map.Entry<String, List<EsOptionBaseDTO>> stringListEntry : collect) {
// 如果有多个list 模板上必须有{前缀.} 这里的前缀就是 data1,然后多个list必须用 FillWrapper包裹
FillWrapper data = new FillWrapper(stringListEntry.getKey(), stringListEntry.getValue());
excelWriter.fill(data, writeSheet);
}
}
}
提示的异常或者没有达到的效果
大家尽量把问题一次性描述清楚,然后贴上全部异常,这样方便把问题一次性解决掉。 至少大家要符合一个原则就是,能让其他人复现出这个问题,如果无法复现,肯定无法解决。
实际的效果如图 打开文件提示部分内容有问题
部分数据丢失
自己增加了以下处理代码后:
public static String esBatchImportFileOptionCodeFill(File originaltemplateFile,
Map<String, List<EsOptionBaseDTO>> map) {
String fileName = FileUtil.getTmpDir() + File.separator
+ IdUtil.fastSimpleUUID() + ".xlsx";
FileUtil.touch(fileName);
try (ExcelWriter excelWriter = EasyExcel.write(fileName).withTemplate(originaltemplateFile).build()) {
WriteSheet writeSheet = EasyExcel.writerSheet(2).build();
// 因为有多个模版码表填充 当存在多个码表需要填充 需要根据数据行数排序 行数少的先填充 否则会出现数据丢失问题
List<Map.Entry<String, List<EsOptionBaseDTO>>> collect = new ArrayList<>(map.entrySet());
collect.sort((a, b) -> {
if (a.getValue().size() == b.getValue().size()) {
return 0;
}
return a.getValue().size() > b.getValue().size() ? 1 : -1;
});
for (Map.Entry<String, List<EsOptionBaseDTO>> stringListEntry : collect) {
// 如果有多个list 模板上必须有{前缀.} 这里的前缀就是 data1,然后多个list必须用 FillWrapper包裹
FillWrapper data = new FillWrapper(stringListEntry.getKey(), stringListEntry.getValue());
excelWriter.fill(data, writeSheet);
}
}
}
导出数据后目前正常可用