Spring Boot本身并不提供导出Excel的功能,但可以使用Apache POI库来导出Excel文件。以下是一个示例代码,可以导出某个表的表字段以及字段类型。
首先,需要在pom.xml文件中添加Apache POI的依赖:
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>4.1.2</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>4.1.2</version>
</dependency>
然后,创建一个Controller来处理导出Excel的请求:
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.core.io.ByteArrayResource;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
@RestController
@RequestMapping("/export")
public class ExportController {
@GetMapping("/excel")
public ResponseEntity<ByteArrayResource> exportExcel() throws IOException {
// 创建工作簿
Workbook workbook = new XSSFWorkbook();
Sheet sheet = workbook.createSheet("表字段");
// 获取表字段以及字段类型
// 这里假设你已经获取到了表字段和字段类型的数据,可以使用JDBC等方式获取
String[] fields = {
"字段1", "字段2", "字段3"};
String[] types = {
"类型1", "类型2", "类型3"};
// 写入表标题
Row titleRow = sheet.createRow(0);
titleRow.createCell(0).setCellValue("字段");
titleRow.createCell(1).setCellValue("字段类型");
// 写入表数据
for (int i = 0; i < fields.length; i++) {
Row row = sheet.createRow(i + 1);
row.createCell(0).setCellValue(fields[i]);
row.createCell(1).setCellValue(types[i]);
}
// 设置列宽自适应
for (int i = 0; i < 2; i++) {
sheet.autoSizeColumn(i);
}
// 将工作簿写入字节数组
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
workbook.write(outputStream);
// 创建响应体并设置文件名
HttpHeaders headers = new HttpHeaders();
headers.add(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=table_fields.xlsx");
// 创建字节数组资源
ByteArrayResource resource = new ByteArrayResource(outputStream.toByteArray());
// 返回Excel文件
return ResponseEntity.ok()
.headers(headers)
.contentType(MediaType.APPLICATION_OCTET_STREAM)
.body(resource);
}
}
以上代码会生成一个Excel文件,文件名为table_fields.xlsx
,包含表字段以及字段类型的信息。访问/export/excel
路径即可下载该文件。