Java SpringMVC框架开发之数据导出Excel文件格式实例详解
前言
在Web应用程序中,数据导出的需求是比较常见的。本文介绍如何在Java SpringMVC框架中开发,实现将数据导出到Excel文件格式的功能。本文的示例代码基于SpringMVC 5.2.5版本和Apache POI 4.1.2版本实现。
准备工作
在开始本文的实例之前,需要做好以下准备工作:
-
确认已经安装了JDK和Eclipse IDE。
-
在Eclipse中,创建一个新的Dynamic Web Project,名称为"springmvc-excel-export"。使用Maven来管理项目的依赖。
-
在项目的pom.xml文件中添加以下必要的依赖:
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.2.5.RELEASE</version>
</dependency>
<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文件的方法。
@Controller
public class ExcelExportController {
@GetMapping("/export")
public void export(HttpServletResponse response) throws IOException {
// TODO: 在这里添加导出Excel文件的代码
}
}
- 在export方法中,使用Apache POI库来创建一个Excel工作簿,并向其中添加数据。
XSSFWorkbook workbook = new XSSFWorkbook();
XSSFSheet sheet = workbook.createSheet("Sheet 1");
Row headerRow = sheet.createRow(0);
headerRow.createCell(0).setCellValue("Name");
headerRow.createCell(1).setCellValue("Age");
headerRow.createCell(2).setCellValue("Gender");
Row dataRow = sheet.createRow(1);
dataRow.createCell(0).setCellValue("Tom");
dataRow.createCell(1).setCellValue(25);
dataRow.createCell(2).setCellValue("Male");
- 将工作簿写入到输出流中,并将输出流作为响应发送给客户端浏览器。
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
response.setHeader("Content-disposition", "attachment; filename=example.xlsx");
OutputStream outputStream = response.getOutputStream();
workbook.write(outputStream);
outputStream.flush();
outputStream.close();
workbook.close();
到此为止,我们已经完成了一个导出Excel文件的示例,完整的代码如下所示:
@Controller
public class ExcelExportController {
@GetMapping("/export")
public void export(HttpServletResponse response) throws IOException {
XSSFWorkbook workbook = new XSSFWorkbook();
XSSFSheet sheet = workbook.createSheet("Sheet 1");
Row headerRow = sheet.createRow(0);
headerRow.createCell(0).setCellValue("Name");
headerRow.createCell(1).setCellValue("Age");
headerRow.createCell(2).setCellValue("Gender");
Row dataRow = sheet.createRow(1);
dataRow.createCell(0).setCellValue("Tom");
dataRow.createCell(1).setCellValue(25);
dataRow.createCell(2).setCellValue("Male");
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
response.setHeader("Content-disposition", "attachment; filename=example.xlsx");
OutputStream outputStream = response.getOutputStream();
workbook.write(outputStream);
outputStream.flush();
outputStream.close();
workbook.close();
}
}
示例说明
示例1:实现从数据库中读取数据并导出到Excel文件
在本示例中,我们将实现一个从数据库中读取数据并导出到Excel文件的功能。
- 首先,创建一个新的Java类"User.java",用于表示User对象:
public class User {
private Long id;
private String name;
private Integer age;
private String gender;
// ... getters and setters
}
- 在我们的应用程序中,创建一个UserService类,用于从数据库中读取用户数据:
@Service
public class UserService {
@Autowired
private UserRepository userRepository;
public List<User> findAll() {
return userRepository.findAll();
}
}
- 创建一个新的UserController类,用于处理"http://localhost:8080/export"请求,并从UserService中获取数据,并使用POI库将数据导出到Excel文件中:
@Controller
public class UserController {
@Autowired
private UserService userService;
@GetMapping("/export")
public void export(HttpServletResponse response) throws IOException {
List<User> users = userService.findAll();
XSSFWorkbook workbook = new XSSFWorkbook();
XSSFSheet sheet = workbook.createSheet("Sheet 1");
// create header row
Row headerRow = sheet.createRow(0);
headerRow.createCell(0).setCellValue("Name");
headerRow.createCell(1).setCellValue("Age");
headerRow.createCell(2).setCellValue("Gender");
// create data rows
int rowNum = 1;
for (User user : users) {
Row row = sheet.createRow(rowNum++);
row.createCell(0).setCellValue(user.getName());
row.createCell(1).setCellValue(user.getAge());
row.createCell(2).setCellValue(user.getGender());
}
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
response.setHeader("Content-disposition", "attachment; filename=users.xlsx");
OutputStream outputStream = response.getOutputStream();
workbook.write(outputStream);
outputStream.flush();
outputStream.close();
workbook.close();
}
}
示例2:实现将多张表的数据导出到同一个Excel文件
在这个示例中,我们将展示如何将多张表的数据导出到同一个Excel文件。
- 在我们的应用程序中创建一个ProductService类,用于从数据库中读取产品数据:
@Service
public class ProductService {
@Autowired
private ProductRepository productRepository;
public List<Product> findAll() {
return productRepository.findAll();
}
}
- 创建一个新的ProductController类,用于处理"http://localhost:8080/export"请求,并从ProductService中获取数据,并使用POI库将数据导出到Excel文件中:
@Controller
public class ProductController {
@Autowired
private ProductService productService;
@GetMapping("/export")
public void export(HttpServletResponse response) throws IOException {
List<Product> products = productService.findAll();
XSSFWorkbook workbook = new XSSFWorkbook();
for (Product product : products) {
String sheetName = "Product #" + product.getId();
XSSFSheet sheet = workbook.createSheet(sheetName);
Row headerRow = sheet.createRow(0);
headerRow.createCell(0).setCellValue("Name");
headerRow.createCell(1).setCellValue("Price");
Row dataRow = sheet.createRow(1);
dataRow.createCell(0).setCellValue(product.getName());
dataRow.createCell(1).setCellValue(product.getPrice());
}
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
response.setHeader("Content-disposition", "attachment; filename=products.xlsx");
OutputStream outputStream = response.getOutputStream();
workbook.write(outputStream);
outputStream.flush();
outputStream.close();
workbook.close();
}
}
在本示例中,我们使用了XSSFWorkbook来创建Excel文件,使用XSSFSheet来创建Excel工作表。根据不同的产品,我们创建了一个新的工作表,将数据导出到其中。
结语
通过本篇文章的学习,我们可以学习到如何在Java SpringMVC框架中开发,实现将数据导出到Excel文件格式的功能。其中,我们使用了Apache POI库来创建Excel文件,并向其中添加数据。在实际的开发中,需要根据具体的场景和需求,对代码进行修改和优化。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java SpringMVC框架开发之数据导出Excel文件格式实例详解 - Python技术站