- 准备工作
首先,我们需要在项目的依赖文件中添加对poi-ooxml的依赖,这样我们才能够在Java中读写Excel文件。
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>4.1.0</version>
</dependency>
- 实现Controller方法
为了导出Excel文件,我们需要实现一个Controller方法。下面是一个基本的实现。
@GetMapping("/download")
public void download(HttpServletResponse response) throws IOException {
// 设置响应头信息,让浏览器可以识别出Excel文件
response.setContentType("application/vnd.ms-excel");
response.setHeader("Content-Disposition", "attachment;filename=user.xlsx");
// 创建工作簿
XSSFWorkbook workbook = new XSSFWorkbook();
// 写入数据
XSSFSheet sheet = workbook.createSheet("用户信息");
List<User> users = userService.getUsers(); // 获取用户数据
int rowNum = 0;
for (User user : users) {
XSSFRow row = sheet.createRow(rowNum++);
row.createCell(0).setCellValue(user.getId());
row.createCell(1).setCellValue(user.getUsername());
row.createCell(2).setCellValue(user.getEmail());
}
// 将Excel文件写入响应输出流
workbook.write(response.getOutputStream());
// 关闭工作簿
workbook.close();
}
在上面的代码中,我们首先设置了响应头信息,以便浏览器可以正确地识别出Excel文件。然后创建了一个工作簿对象,在其中添加了我们需要导出的数据。最后将工作簿写入到响应的输出流中,以便将Excel文件返回给浏览器。
- 示例一
在下面的示例中,我们将展示如何获取一组用户的数据并将其写入Excel文件中。要实现这一点,我们需要在UserService类中编写一个方法来获取用户数据。
@Service
public class UserService {
public List<User> getUsers() {
// 此处略去获取数据的代码
return users;
}
}
我们还需要实现一个Controller方法来返回用户数据的Excel文件。
@GetMapping("/users/download")
public void download(HttpServletResponse response) throws IOException {
response.setContentType("application/vnd.ms-excel");
response.setHeader("Content-Disposition", "attachment;filename=users.xlsx");
// 创建工作簿
XSSFWorkbook workbook = new XSSFWorkbook();
// 写入数据
XSSFSheet sheet = workbook.createSheet("用户信息");
List<User> users = userService.getUsers(); // 获取用户数据
int rowNum = 0;
for (User user : users) {
XSSFRow row = sheet.createRow(rowNum++);
row.createCell(0).setCellValue(user.getId());
row.createCell(1).setCellValue(user.getUsername());
row.createCell(2).setCellValue(user.getEmail());
}
// 将Excel文件写入响应输出流
workbook.write(response.getOutputStream());
// 关闭工作簿
workbook.close();
}
在这个示例中,我们首先从UserService中获取用户数据,然后将其写入Excel文件中。最后将Excel文件写入响应输出流中,以返回Excel文件。
- 示例二
在下面的示例中,我们将展示一个更高级的例子,该例子实现了将一个对象列表写入Excel文件中。
@GetMapping("/books/download")
public void download(HttpServletResponse response) throws IOException {
response.setContentType("application/vnd.ms-excel");
response.setHeader("Content-Disposition", "attachment;filename=books.xlsx");
// 创建工作簿
XSSFWorkbook workbook = new XSSFWorkbook();
// 写入数据
XSSFSheet sheet = workbook.createSheet("图书信息");
List<Book> books = bookService.getBooks(); // 获取图书数据
int rowNum = 0;
for (Book book : books) {
XSSFRow row = sheet.createRow(rowNum++);
row.createCell(0).setCellValue(book.getId());
row.createCell(1).setCellValue(book.getName());
row.createCell(2).setCellValue(book.getAuthor());
row.createCell(3).setCellValue(book.getPrice());
}
// 将Excel文件写入响应输出流
workbook.write(response.getOutputStream());
// 关闭工作簿
workbook.close();
}
在这个示例中,我们首先从BookService中获取图书数据,然后将其写入Excel文件中。通过Book对象的getter方法,我们获取了每一个Book对象的ID、名称、作者和价格,并将其写入Excel文件中。最后将Excel文件写入响应输出流中,以返回Excel文件。
总结:
以上就是SpringBoot导出数据生成Excel文件并返回的完整攻略。在实现这些例子时,我们首先设置了响应头信息,以允许浏览器正确识别Excel文件。然后,使用Apache POI库来实现Excel文件的创建和写入。最后,将Excel文件写入响应输出流中,以便可以将其作为响应返回给客户端。最后提醒一下,在响应完毕后,需要手动关闭Workbook,否则将导致内存泄漏问题。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:SpringBoot 导出数据生成excel文件返回方式 - Python技术站