首先,导入依赖,依赖尽量导入最新的版本,不然容易出现模板因为list行数问题,导致导出的数据没有写入,或者数据格式混乱:
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>${poi.version}</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>${poi.version}</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml-schemas</artifactId>
<version>${poi.version}</version>
</dependency>
然后制作模板,模板中如果list数据在最后,请插入一行空数据,写有{{maruko}}随便一个元素,不然模板导出会报错的,至于原因,暂时不清楚,关于模板语法,可以查询对应语法$fe:
代码:
实体类:
@Excel(name = "**")
private String name;
@Excel(name = "**")
private String sex;
@Excel(name = "**")
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date birthday;
实现层:查询数据返回map集合
public Workbook exportExcelWork(ExportExcelDto exportExcelDto) {
ResponseVo<Map<String, Object>> mapResponseVo = companyExportApiService.export(exportExcelDto.getNsrsbh());
Map<String, Object> map = mapResponseVo.getData();
TemplateExportParams templateExportParams =
new TemplateExportParams(PATH+ModuleCodeEnum.getTemplatePathByModuleCode(exportExcelDto.getExportCode()));
Workbook workbook = ExcelExportUtil.exportExcel(templateExportParams, map);
return workbook;
}
controller层
@PostMapping(value = "/exportOneBaseInfo")
@ApiOperation(value = "导出一户式电子文档", notes = "导出一户式电子文档")
public void baseInfoExport(@RequestBody ExportExcelDto exportExcelDto,
HttpServletResponse response) {
Integer exportCode = exportExcelDto.getExportCode();
//根据模板编号,取出模板文件名
String templateFile = ModuleCodeEnum.getTemplatePathByModuleCode(exportCode);
//根据模板编号,取出serviceName
String serviceName = ModuleCodeEnum.getServiceNameByModuleCode(exportCode);
log.info("访问接口为{}", serviceName);
try {
ExportService exportService =
(ExportService) SpringContextUtils.getBean(serviceName);
Workbook workbook = exportService.exportExcelWork(exportExcelDto);
OutputStream out = response.getOutputStream();
response.setContentType("application/octet-stream");
//设置导出Excel的名称
response.setHeader("Content-disposition", "attachment;filename=" + new String((templateFile).getBytes(),
"UTF-8"));
workbook.write(out);
out.flush();
} catch (BusinessException be) {
log.error("{}", be);
throw be;
} catch (Exception e) {
log.error("{}", e);
}
}