背景
同事在做easyexcel导出Excel,根据模板导出的时候,发现导出的表格,总会覆盖落款的内容。
这就很尴尬了,表格居然不能自动填充,直接怒喷工具,哈哈。
然后一起看了一下这个问题。
分析原因
我找了自己的系统中关于表格导出的页面,导出了一下,发现可以正常扩充。
于是排查问题。
1、观察模板。
模板中,在不需要填充的地方,也用了 {.字段}, 改成 {字段},试了不行。
2、模板导出时,总有一行是合并的。
怀疑数据问题,修改数据,发现这个是落款的合并单元格,也不行。
3、比对系统代码。
发现了问题,代码中少加了配置。
4、对比mvn版本
发现版本不太一样,会存在影响
解决问题
1、增加配置
发现了问题,解决测试。
原代码如下:
java
public static void exportExcelByTemplate(String templateFile, Map<String,Object> data,List<Object> dataList, OutputStream out){
ExcelWriter build = EasyExcel.write(out).withTemplate(templateFile).build();
WriteSheet sheet = EasyExcel.writerSheet().build();
build.fill(dataList, sheet);
build.fill(data,sheet);
build.finish();
}
修改之后如下:
java
public static void exportExcelByTemplate(String templateFile, Map<String,Object> data,List<Object> dataList, OutputStream out){
ExcelWriter build = EasyExcel.write(out).withTemplate(templateFile).build();
WriteSheet sheet = EasyExcel.writerSheet().build();
FillConfig fillConfig = FillConfig.builder().forceNewRow(Boolean.TRUE).build();
build.fill(dataList, fillConfig, sheet);
build.fill(data,sheet);
build.finish();
}
增加了配置:FillConfig
即:FillConfig fillConfig = FillConfig.builder().forceNewRow(Boolean.TRUE).build();
需要注意的是,配置一定要是 TRUE 才行。
观察源码不难发现,配置中有一个重要的一项:forceNewRow
即强制添加新行,也就是这个配置起到了作用。
2、poi升级
以上方式仍不行的话,就需要观察当前poi的版本问题了。
版本修改
原版本如下:
java
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>4.1.0</version>
</dependency>
修改之后如下:
java
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>4.1.2</version>
</dependency>
重试,解决问题。
相关链接:JAVA导出Excel文件:https://blog.csdn.net/qq_38254635/article/details/126691175