导语
对于类似这种的不规则excel表格导出,可以使用阿里的EasyExcel开源工具中的模板导出功能实现,只需要在excel文件对应的单元格中挖空,就可以根据任意类中字段的名称自动填入内容到对应的空中,非常方便
正片
1:引入依赖
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>3.3.2</version>
</dependency>
2:Controller接口
@PostMapping("/export/{id}")
@ApiOperation(value = "导出")
public void export(@PathVariable(value = "id") Long id,HttpServletResponse response) {
service.export(id,response);
}
3:Service
@Override
public void export(Long id , HttpServletResponse response){
//模板路径
String path="/data/aaa.xlsx";
//查实体
AppealVO appeal = getOneDetails(id);
//导出
templateExport(path, "目标文件名",appeal,response);
}
@SneakyThrows
public static void templateExport(String templatePath,String fileName,Object input, HttpServletResponse response) {
String suffix=".xlsx";
if (!fileName.contains(suffix)) {
fileName += suffix ;
}
//设置下载文件名
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
if (ObjectUtil.isNotEmpty(fileName)) {
fileName = URLEncoder.encode(fileName, StandardCharsets.UTF_8.toString());
response.setHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\"; filename*=utf-8''" + fileName);
}
response.setCharacterEncoding("utf-8");
// sheet:第0个
EasyExcel.write(response.getOutputStream()).withTemplate(templatePath).sheet(0).doFill(input);
}