springboot 多列动态表头Excel导出,如何实现
时间: 2024-12-21 13:30:18 浏览: 6
复杂多表头excel表格的导出及布局,支持拓展
Spring Boot 中实现多列动态表头的 Excel 导出通常涉及到使用 Apache POI 或者其他第三方库如 JExcelAPI,配合 Thymeleaf 或 FreeMarker 等模板引擎来生成 Excel 文件。以下是一个简单的步骤指南:
1. 添加依赖:在你的 `pom.xml` 或者 `build.gradle` 文件中添加相关的 Excel 库依赖,例如:
```xml
<!-- Maven -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
</dependency>
<!-- Gradle -->
implementation 'org.apache.poi:poi-ooxml:5.0.0'
```
2. 创建数据模型:定义一个包含所有需要导出字段的对象类。
3. 使用模板引擎:创建一个模板文件(`.html` 或 `.ftl`),在这里你可以显示动态表头,例如:
```html
<table>
<thead>
<tr th:each="header : ${headers}">
<th th:text="${header.name}"></th>
</tr>
</thead>
<tbody>
<!-- 表体内容 -->
</tbody>
</table>
```
这里,`${headers}` 是从服务端传递过来的动态表头列表。
4. 服务端处理:在 Spring Boot 控制器中,获取动态表头数据,并结合模板渲染结果,然后使用 POI 的 `XSSFWorkbook` 或 `XSSFSheet` 来创建 Excel 文件。例如:
```java
@GetMapping("/export")
public ResponseEntity<OutputStreamResource> exportExcel(@ModelAttribute("headers") List.ColumnHeaderModel headers) {
// 获取数据并填充到表头
List<List<Object>> data = fetchData();
try (Workbook workbook = new XSSFWorkbook();
OutputStream outputStream = response.getOutputStream()) {
createExcelSheet(workbook, headers, data);
return ResponseEntity.ok()
.contentType(MediaType.APPLICATION_OCTET_STREAM)
.contentLength(workbook.getPhysicalSize())
.body(new OutputStreamResource(outputStream, "report.xlsx"));
} catch (IOException e) {
throw new RuntimeException("Failed to generate Excel", e);
}
}
private void createExcelSheet(Workbook workbook, List.ColumnHeaderModel headers, List<List<Object>> data) {
Sheet sheet = workbook.createSheet();
Row headerRow = sheet.createRow(0);
for (ColumnHeaderModel header : headers) {
Cell cell = headerRow.createCell(header.getIndex());
cell.setCellValue(header.getTitle());
}
// 添加数据行...
}
```
5. 客户端请求:用户通过前端(如 HTML、Thymeleaf 或 React)发送一个带有表头信息的请求,然后服务器返回生成的 Excel 下载。
阅读全文