SpringBoot基于EasyExecl实现Execl模板导出

SpringBoot基于EasyExecl实现Execl模板导出

在Java中,涉及到Execl导出的场景,大家应该对POIEasyExecl并不陌生,我在工作中一般使用的EasyExecl,在日常业务中,基本是中规中矩的第一行表头,下面为数据,或者表头合并等,可是,有时候则有一些差别,格式相对要复杂一点,而且表格中很多计算公式,虽然基于EasyExecl的常规导出方式也可以实现,但是会有些繁琐,如果基于模板,则能更加简便的处理。

这次,我们便遇到这样的表格

虽然说不是非常复杂,但是,如果通过硬写代码的方式,那工作量也不小,如果,我们基于模板的方式导出,那便能减少不少工作量。这里我们便要借助EasyExecl填充Excel功能来实现该场景。

如何引入EasyExecl这就不说了,可以去官网查询,我们直接进入主题。首先,我们需要做好我们的模板。

模板格式为{.字段名},可以看到我们的表格调入站位表达式后,公式列变为了#VALUE!,不要惊慌,待我们填充值之后,刷新一下即可。

模板准备好了,接下来便该填充模板信息。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
@PostMapping("/exportById/{id}")
public void exportById(HttpServletResponse response, @PathVariable("id") Long id)
{
DishesInfo item=dishesInfoService.selectTdById(id);; //假装有数据
Map<String,Object> itemMap= BeanUtil.beanToMap(item);
List<Map<String,Object>> data=new ArrayList(1);
data.add(itemMap);
try (ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream()).withTemplate(config.getTemplatePath()+"/template.xlsx").build()) {
WriteSheet writeSheet = EasyExcel.writerSheet().build();
excelWriter.fill(data, writeSheet);

excelWriter.finish();
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
response.setCharacterEncoding("utf-8");

} catch (IOException e) {
e.printStackTrace();
}
}

通过模板导出后后,我们可以看到,填写了模板表达式的单元格已经填充好了数据,但是我们的公式单元格却是#VALUE!这样的错误,这时候,我们需要调用Easyexecl提供的功能来刷新单元格

1
2
Workbook workbook = excelWriter.writeContext().writeWorkbookHolder().getWorkbook();
workbook.setForceFormulaRecalculation(true);

最终,我们可以得到我们想要的结果

这样的表格,只是EasyExecl填充Excel功能最简单的一种填充场景,它还可以实现更加灵活和复杂的模板场景。有兴趣的可以去尝试一下。

SpringBoot基于EasyExecl实现Execl模板导出

https://blogs.52fx.biz/posts/2462440650.html

作者

eyiadmin

发布于

2023-01-21

更新于

2024-05-31

许可协议

评论