@Operation(summary = "下载导入主数据的excel模板", description = "") @GetMapping("/download-excel-template") public ResponseEntity<Resource> downloadExcelTemplate(@RequestParam(name = "logicModelId", required = true) Long logicModelId) throws BizBaseException { LoginUserBO loginUser = ContextUtil.getLoginUser(); OperationInfo operationInfo = OperationInfoBuilder.build(loginUser); MasterdataModelBO masterdataModelBO = masterdataModelService.getMasterdataModelById(ShardingKey.ofContext(), logicModelId); // 创建 Excel 文件 Workbook workbook = new XSSFWorkbook(); Sheet sheet = workbook.createSheet("sheet1"); // 添加字段 List<LogicalModelColumnBO> fieldInfos = masterdataModelBO.getFieldInfos(); if (fieldInfos != null && !fieldInfos.isEmpty()) { Row headerRow = sheet.createRow(0); for (int i = 0; i < fieldInfos.size(); i++) { LogicalModelColumnBO field = fieldInfos.get(i); if (ignoreField(field.getName())) continue; Cell headerCell = headerRow.createCell(i); headerCell.setCellValue(field.getCname()); } } // 写入到文件流中 ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); try { workbook.write(outputStream); } catch (IOException e) { e.printStackTrace(); } // 构造下载文件的响应头 HttpHeaders headers = new HttpHeaders(); headers.add(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=template.xlsx"); // 将字节流封装成 Resource 对象 ByteArrayResource resource = new ByteArrayResource(outputStream.toByteArray()); // 返回文件下载响应 return ResponseEntity.ok() .headers(headers) .contentType(MediaType.parseMediaType("application/vnd.ms-excel")) .contentLength(resource.contentLength()) .body(resource); }
时间: 2023-06-24 10:06:46 浏览: 146
SpringMVC下实现Excel文件上传下载
这段代码是一个下载 Excel 模板的接口,接口的请求路径为 "/download-excel-template",需要传递一个名为 "logicModelId" 的必填参数,表示要下载的 Excel 模板对应的逻辑模型 ID。接口响应的是一个 Excel 文件,响应头中包含了文件名和文件类型,文件内容是根据逻辑模型 ID 查询到的字段信息动态生成的。具体实现过程是:创建一个 Workbook 对象,然后根据逻辑模型 ID 查询到该模型对应的字段信息,根据字段信息动态生成 Excel 文件,最后将 Excel 文件转换成字节流并封装成 Resource 对象返回。
阅读全文