dto
@ExcelTarget(value = "ExcelVo")
public class ExcelDto {
@Excel(name = "类别路径", orderNum = "0", width = 20, isImportField = "true")
@Schema(description = "类别路径")
private String categoryPath;
@Excel(name = "技术名称", orderNum = "1", width = 15, isImportField = "true")
@Schema(description = "技术名称")
private String name;
}
service
public void getTechnologyExcelTemplate(HttpServletResponse response) {
// 里面放置excel中需要的属性
List<ExcelDto> excelDtoList = getExcelVOList();
File file;
try {
//使用临时文件
file = File.createTempFile("template", ".xlsx");
FileOutputStream fileOutputStream = new FileOutputStream(file);
ExportParams params = new ExportParams("Excel文件名", "表名", ExcelType.XSSF);
Workbook workbook = ExcelExportUtil.exportExcel(params, ExcelDto.class, excelDtoList);
workbook.write(fileOutputStream);
fileOutputStream.close();
workbook.close();
} catch (IOException e) {
throw new RuntimeException(e);
}
//下载,读取文件流并将其添加到response的输出流中,同时设置响应的Header字段
try (InputStream inputStream = new FileInputStream(file);
//获取response的输出流对象
OutputStream outputStream = response.getOutputStream()) {
response.setContentType("application/octet-stream");
response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(file.getName(), StandardCharsets.UTF_8));
response.setHeader("Access-Control-Expose-Headers", "Content-Disposition");
IOUtils.copy(inputStream, outputStream);
outputStream.flush();
} catch (Exception e) {
throw new RuntimeException();
} finally {
// 清除文件
file.delete();
}
}