alibaba / easyexcel

快速、简洁、解决大文件内存溢出的java处理Excel工具
https://easyexcel.opensource.alibaba.com
Apache License 2.0
31.96k stars 7.49k forks source link

使用多列表填充excel时从第二个列表开始最后一行样式不对,模板中合并的单元格会自动拆分,切有些会被填充成黄色 #1477

Open playadota opened 4 years ago

playadota commented 4 years ago

image

image

image

znyf commented 3 years ago

遇到同样问题,你可以这样解决模本合并单元格自动拆分的问题,但是填充从第二列开始样式不对我也没有解决 excelWriter.fill(new FillWrapper("list",peoples), fillConfig,writeSheet);这行之后 使用 excelWriter.write(communityThings,writeSheet); 给这个对象CommunityThing,设置public class CommunityThing { @ExcelProperty(value = "",index = 0) private String community; @ContentLoopMerge(eachRow = 1,columnExtend = 5) @ExcelProperty(value = "",index = 1) private String something;

},我这里是让1到五行合并 最后别忘记在EasyExcel.write(fileName,CommunityThing.class).head(variableTitleHead())将对象放进去,并将head设置为null,例如 private List<List> variableTitleHead() { List<List> list = new ArrayList<List>(); List head0 = new ArrayList(); List head1 = new ArrayList();

    list.add(head0);
    list.add(head1);
    return list;
}

因为我这里只有两个属性,所以只设置了两个null的list

znyf commented 3 years ago

具体代码 public void compositeFill() { List peoples = personList(); peoples = peoples.stream().filter(p -> { if (p.getAddress() == null || p.getRemark() == null) { return false; } return true; }).collect(Collectors.toList()); List communityThings = communityThingList();

    // 模板注意 用{} 来表示你要用的变量 如果本来就有"{","}" 特殊字符 用"\{","\}"代替
    // {} 代表普通变量 {.} 代表是list的变量 {前缀.} 前缀可以区分不同的list
    String templateFileName =
            TestFileUtil.getPath() + "demo" + File.separator + "fill" + File.separator + "newhope-delivery-template.xlsx";
    String fileName = "f:/" + "compositeFill" + System.currentTimeMillis() + ".xlsx";

    ExcelWriter excelWriter = EasyExcel.write(fileName,CommunityThing.class).head(variableTitleHead()).withTemplate(templateFileName).build();

    WriteSheet writeSheet = EasyExcel.writerSheet().build();
    FillConfig fillConfig = FillConfig.builder().forceNewRow(Boolean.TRUE).build();

    // 如果有多个list 模板上必须有{前缀.} 这里的前缀就是 data1,然后多个list必须用 FillWrapper包裹

    //这里需要注意遍历list的时候允许list中对象的属性为"",但是不允许为null否者会报npe
    excelWriter.fill(new FillWrapper("list",peoples), fillConfig,writeSheet);
    excelWriter.write(communityThings,writeSheet);

    String deliverTotal="北京市丰台区的老王北京市丰台区的老王北京市丰台区的老王北京市丰台区的老王北京市丰台区的老王北京市丰台区的老王北京市丰台区的老王北京市丰台区的老王北京市丰台区的老王北京市丰台区的老王北京市丰台区的老王北京市丰台区的老王北京市丰台区的老王北京市丰台区的老王北京市丰台区的老王北京市丰台区的老王北京市丰台区的老王北京市丰台区的老王北京市丰台区的老王北京市丰台区的老王北京市丰台区的老王";
    String deliverTotalLength=":";
    for (int i = 0; i < deliverTotal.length()/2+1; i++) {
         deliverTotalLength+="\t ";
    }
    Map<String, Object> map = new HashMap<String, Object>();
    map.put("deliveryPeopson", "北京市丰台区的老王");
    map.put("deliverMilkDate","2021-04-37");
    map.put("deliverMilkTime","下午送");
    map.put("deliverTotal",deliverTotal);

// map.put("deliverTotalLength",deliverTotalLength); excelWriter.fill(map,writeSheet);

    // 别忘记关闭流
    excelWriter.finish();

}
zhuangjiaju commented 2 years ago

目前不支持合并单元格的填充

MsSloan commented 2 years ago

大佬啥时候支持下合并单元格第二行的样式问题,填充excel时,列表项 合并横向的单元格后,从第二行开始没有边框线了