手机网站策划书方案,域名备案要多少钱,wordpress 360字体插件下载,学校网站建设开发项目计划报告背景 
在使用easyexcel导出时#xff0c;如果遇到一个模板中同时存在 一部分是实体类中的字段#xff0c;另外部分是列表的字段#xff0c;需要特殊处理一下#xff0c;比如下面的模板#xff1a;  
这里面 user#xff0c; addr 是实体类#xff08;或者map#xff09…背景 
在使用easyexcel导出时如果遇到一个模板中同时存在 一部分是实体类中的字段另外部分是列表的字段需要特殊处理一下比如下面的模板  
这里面 user addr 是实体类或者mapextra是一个字符串datadata1是两组列表数据。 
准备数据的代码如下 private static MapString, Object getParams() {// 准备导出的数据User user  new User();user.setName(user);MapString, Object addr  new HashMap();addr.put(name, addr);String extra  extra;ListData dataList  new ArrayList();for (int i  0; i  10; i) {Data data  new Data();data.setName(data  i);data.setAge(i);dataList.add(data);}MapString, Object params  HashMap.newHashMap(16);params.put(user, user);params.put(addr, addr);params.put(extra, extra);params.put(data, dataList);params.put(data1, dataList);return params;}问题 
我们一开始的想法很简单直接把这些参数打包丢到map里面直接fill一次不就成功了但是实际上并没有成功,导出代码如下 
var params  getParams();
String templateFileName  D:\\test.xlsx;String fileName  D:\\test-res.xlsx;
try (ExcelWriter excelWriter  EasyExcel.write(fileName).withTemplate(templateFileName).build()) {WriteSheet writeSheet  EasyExcel.writerSheet().build();excelWriter.fill(params, writeSheet);
}导出结果  
可以看到除了没有前缀的的extra所有带前缀的都导出失败了仔细查阅文档后发现这些需要用FillWrapper包装一下为了方便使用这里写了一个工具类代码如下 
public static void export(String templateFileName, String outputFile, MapString, Object params){try (ExcelWriter excelWriter  EasyExcel.write(outputFile).withTemplate(templateFileName).build()) {WriteSheet writeSheet  EasyExcel.writerSheet().build();// 先把不带前缀的都fill进去excelWriter.fill(params, writeSheet);params.forEach((key, val) - {// 基础类型都是不带前缀的前面处理了不再处理。if (ClassUtil.isBasicType(ClassUtil.getClass(val))) {return;}if (val instanceof Collection? collectionVal) {// 这里注意 入参用了forceNewRow 代表在写入list的时候不管list下面有没有空行 都会创建一行然后下面的数据往后移动。默认 是false会直接使用下一行如果没有则创建。// forceNewRow 如果设置了true,有个缺点 就是他会把所有的数据都放到内存了所以慎用// 简单的说 如果你的模板有list,且list不是最后一行下面还有数据需要填充 就必须设置 forceNewRowtrue 但是这个就会把所有数据放到内存 会很耗内存FillConfig fillConfig  FillConfig.builder().forceNewRow(Boolean.TRUE).build();excelWriter.fill(new FillWrapper(key, collectionVal), fillConfig, writeSheet);}else {// bean/map 只能假装是个列表了excelWriter.fill(new FillWrapper(key, Collections.singleton(val)), writeSheet);}});}}代码中的ClassUtil是hutool的 
导出结果  可以看到几处都填充成功了。 
补充 
web环境下把导出方法的前俩参数直接改成对应的输出/输入流就行了。