controller
@GetMapping("/download/excel")
@Operation(summary = "下载技术引入Excel模板")
public void downloadTemplateExcel(HttpServletResponse response) { technologyService.getTechnologyExcelModel(response);
}
service
public void getTechnologyExcelModel(HttpServletResponse response) { List<TechnologyImportExcelDto> technologyImportExcelDtoList = getTechnologyImportExcelVOList(); File file; try { //使用临时文件 file = File.createTempFile("开源技术导入模板", ".xlsx"); FileOutputStream fileOutputStream = new FileOutputStream(file); ExportParams params = new ExportParams("表格标题", "Sheet1", ExcelType.XSSF); String tipsMessage = "开源技术导入需遵循以下规则:xxx"; params.setTitle(tipsMessage); Workbook workbook = ExcelExportUtil.exportExcel(params, TechnologyImportExcelDto.class, technologyImportExcelDtoList); // 获取Sheet对象 Sheet sheet = workbook.getSheetAt(0); // 只有一个Sheet // 设置标题行样式 Row titleRow = sheet.getRow(0); // 标题在第一行 CellStyle titleStyle = workbook.createCellStyle(); titleStyle.setAlignment(HorizontalAlignment.LEFT); // 设置水平对齐方式为左对齐 titleStyle.setVerticalAlignment(VerticalAlignment.CENTER); // 设置垂直对齐方式为居中 titleStyle.setWrapText(true); // 设置文本自动换行 // 设置边框 titleStyle.setBorderBottom(BorderStyle.THIN); titleStyle.setBorderTop(BorderStyle.THIN); titleStyle.setBorderLeft(BorderStyle.THIN); titleStyle.setBorderRight(BorderStyle.THIN); // 设置标题行每个单元格的样式 for (Cell cell : titleRow) { cell.setCellStyle(titleStyle); } // 设置行高 titleRow.setHeightInPoints(titleRow.getHeightInPoints() * 4); // 设置为五行字的高度 // 设置字体加粗 Font font = workbook.createFont(); font.setBold(true); titleStyle.setFont(font); 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(); }
}
@NotNull
private static List<TechnologyImportExcelDto> getTechnologyImportExcelVOList() { List<TechnologyImportExcelDto> technologyImportExcelDtoList = new ArrayList<>(); TechnologyImportExcelDto technologyImportExcelDto = new TechnologyImportExcelDto( "系统软件/固件", "模板", "x", "1.0.0", "GPL-2.0", "http://xx.com", "5", "2023-03-15 14:17:02", "http://download.com", "描述内容"); technologyImportExcelDtoList.add(technologyImportExcelDto); return technologyImportExcelDtoList;
}