[alibaba/easyexcel]关于使用填充 Excel 复杂的填充导致格式改变的问题

2024-05-24 860 views
7

使用Excel 复杂的填充 的时候 如果list不是最后一行 但是list下面有格式 导出之后格式没有了,而且list的格式也不对。 微信截图_20191031120620 微信截图_20191031120603

回答

8
  // 模板注意 用{} 来表示你要用的变量 如果本来就有"{","}" 特殊字符 用"\{","\}"代替

// {} 代表普通变量 {.} 代表是list的变量 List<Map<String, Object>> a = new ArrayList<>(); for (int i = 0; i < 4; i++) { Map b = new HashMap(); b.put("a", i + "序号"); b.put("b", i + "产品"); b.put("c", i + "规格"); b.put("d", i + "数量"); b.put("p0", i + "价格1"); b.put("p1", i + "价格2"); b.put("p2", i + "价格3"); b.put("p3", i + "价格4"); a.add(b); } //第一次生成的文件 String templateFileName ="C:/Users/Administrator/Desktop/1572406131820.xlsx"; //最终生成的文件 String fileName = "C:/Users/Administrator/Desktop/" + System.currentTimeMillis() + ".xlsx"; ExcelWriter excelWriter = EasyExcel.write(fileName).withTemplate(templateFileName).build(); WriteSheet writeSheet = EasyExcel.writerSheet().build(); // 这里注意 入参用了forceNewRow 代表在写入list的时候不管list下面有没有空行 都会创建一行,然后下面的数据往后移动。默认 是false,会直接使用下一行,如果没有则创建。 // forceNewRow 如果设置了true,有个缺点 就是他会把所有的数据都放到内存了,所以慎用 // 简单的说 如果你的模板有list,且list不是最后一行,下面还有数据需要填充 就必须设置 forceNewRow=true 但是这个就会把所有数据放到内存 会很耗内存 // 如果数据量大 list不是最后一行 参照下一个 FillConfig fillConfig = FillConfig.builder().forceNewRow(Boolean.TRUE).build(); excelWriter.fill(a, fillConfig, writeSheet); excelWriter.finish();

贴上我的代码

0
 <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>easyexcel</artifactId>
        <version>2.1.0-beta4</version>
    </dependency>

版本是最新的

4

已经在2.1.1 修复。非常感谢您的意见。

8

下面有图片好像还是解决不了

4

已经在2.1.1 修复。非常感谢您的意见。

下面有图片好像还是解决不了