springboot生成excel文件 
时间: 2023-06-05 14:47:08 浏览: 154
Spring Boot可以使用Apache POI库来生成Excel文件。POI是一个Java库,可以读取和写入Microsoft Office格式的文件,包括Excel、Word和PowerPoint。
以下是使用Spring Boot和POI生成Excel文件的步骤:
1. 添加POI依赖
在pom.xml文件中添加以下依赖:
```
<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>
```
2. 创建Excel文件
使用POI创建Excel文件的步骤如下:
a. 创建工作簿
```
Workbook workbook = new XSSFWorkbook();
```
b. 创建工作表
```
Sheet sheet = workbook.createSheet("Sheet1");
```
c. 创建行
```
Row row = sheet.createRow(0);
```
d. 创建单元格
```
Cell cell = row.createCell(0);
cell.setCellValue("Hello World");
```
3. 将Excel文件写入输出流
使用Java IO将Excel文件写入输出流,以便将其发送到客户端。
```
response.setContentType("application/vnd.ms-excel");
response.setHeader("Content-Disposition", "attachment; filename=myfile.xlsx");
OutputStream outputStream = response.getOutputStream();
workbook.write(outputStream);
outputStream.flush();
outputStream.close();
```
完整的代码示例:
```
@GetMapping("/download")
public void downloadExcel(HttpServletResponse response) throws IOException {
Workbook workbook = new XSSFWorkbook();
Sheet sheet = workbook.createSheet("Sheet1");
Row row = sheet.createRow(0);
Cell cell = row.createCell(0);
cell.setCellValue("Hello World");
response.setContentType("application/vnd.ms-excel");
response.setHeader("Content-Disposition", "attachment; filename=myfile.xlsx");
OutputStream outputStream = response.getOutputStream();
workbook.write(outputStream);
outputStream.flush();
outputStream.close();
}
```
以上就是使用Spring Boot和POI生成Excel文件的步骤。
相关推荐















要实现Vue和Spring Boot的Excel导出功能,可以按照以下步骤进行:
1. 在Vue中编写前端页面,包括按钮和表格等元素。
2. 在Vue中编写调用Spring Boot后端接口的函数,将需要导出的数据传递给后端。
3. 在Spring Boot中编写后端接口,接收前端传递的数据,并使用Apache POI库生成Excel文件。
4. 将生成的Excel文件返回给前端。
下面是一个简单的示例代码:
Vue前端代码:
html
<template>
<el-button @click="exportExcel">导出Excel</el-button>
<el-table :data="tableData" border>
<el-table-column prop="name" label="姓名"></el-table-column>
<el-table-column prop="age" label="年龄"></el-table-column>
</el-table>
</template>
<script>
import axios from 'axios'
export default {
data() {
return {
tableData: [
{ name: '张三', age: 18 },
{ name: '李四', age: 20 },
{ name: '王五', age: 22 }
]
}
},
methods: {
exportExcel() {
axios.post('/api/exportExcel', this.tableData).then(response => {
const blob = new Blob([response.data], { type: 'application/vnd.ms-excel' })
const downloadElement = document.createElement('a')
const href = window.URL.createObjectURL(blob)
downloadElement.href = href
downloadElement.download = 'data.xlsx'
document.body.appendChild(downloadElement)
downloadElement.click()
document.body.removeChild(downloadElement)
window.URL.revokeObjectURL(href)
})
}
}
}
</script>
Spring Boot后端代码:
java
@RestController
@RequestMapping("/api")
public class ExcelController {
@PostMapping("/exportExcel")
public ResponseEntity<byte[]> exportExcel(@RequestBody List<Map<String, Object>> dataList) throws IOException {
// 创建Excel文件
Workbook workbook = new XSSFWorkbook();
Sheet sheet = workbook.createSheet("Sheet1");
Row headerRow = sheet.createRow(0);
headerRow.createCell(0).setCellValue("姓名");
headerRow.createCell(1).setCellValue("年龄");
for (int i = 0; i < dataList.size(); i++) {
Map<String, Object> data = dataList.get(i);
Row dataRow = sheet.createRow(i + 1);
dataRow.createCell(0).setCellValue((String) data.get("name"));
dataRow.createCell(1).setCellValue((Integer) data.get("age"));
}
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
workbook.write(outputStream);
return ResponseEntity.ok().contentType(MediaType.parseMediaType("application/vnd.ms-excel"))
.header(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=\"" + "data.xlsx" + "\"")
.body(outputStream.toByteArray());
}
}
在这个示例中,我们使用了axios库来发送POST请求,将需要导出的数据传递给后端。后端接收到数据后,使用Apache POI库生成Excel文件,并将文件以字节数组的形式返回给前端。前端通过创建一个元素,并设置其href属性为Excel文件的URL,来实现文件下载功能。
需要注意的是,这个示例中使用的是xlsx格式的Excel文件,如果需要生成xls格式的文件,可以将XSSFWorkbook改为HSSFWorkbook,同时将响应头的Content-Type改为"application/vnd.ms-excel"。



