SpringMVC框架使用 Apache POI实现导出Excel
作者:牛肉胡辣汤
在企业级应用开发中,数据的导入导出是一项常见的需求。Excel 作为最常用的数据处理工具之一,经常被用来存储和展示数据。本文将介绍如何在 SpringMVC 框架中使用 Apache POI 库来实现 Excel 文件的导出功能。
1.引入
1.1 添加依赖
首先,在项目的 pom.xml 文件中添加 Apache POI 的依赖:
<dependencies> <!-- 其他依赖 --> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>5.2.3</version> </dependency> </dependencies>
1.2 创建 Maven 项目
确保你的项目是一个 Maven 项目,并且已经配置好了 SpringMVC 框架。
2. 创建控制器
接下来,我们创建一个控制器来处理导出 Excel 的请求。
package com.example.controller; import org.apache.poi.ss.usermodel.*; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.net.URLEncoder; import java.util.Arrays; import java.util.List; @Controller @RequestMapping("/excel") public class ExcelController { @GetMapping("/export") public void exportExcel(HttpServletResponse response) throws IOException { // 设置响应头 response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); response.setCharacterEncoding("utf-8"); String fileName = URLEncoder.encode("用户信息", "UTF-8").replaceAll("\\+", "%20"); response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx"); // 创建工作簿 Workbook workbook = new XSSFWorkbook(); // 创建工作表 Sheet sheet = workbook.createSheet("用户信息"); // 创建标题行 Row headerRow = sheet.createRow(0); List<String> headers = Arrays.asList("ID", "姓名", "年龄", "邮箱"); for (int i = 0; i < headers.size(); i++) { Cell cell = headerRow.createCell(i); cell.setCellValue(headers.get(i)); } // 填充数据 List<User> users = getUsers(); int rowNum = 1; for (User user : users) { Row row = sheet.createRow(rowNum++); row.createCell(0).setCellValue(user.getId()); row.createCell(1).setCellValue(user.getName()); row.createCell(2).setCellValue(user.getAge()); row.createCell(3).setCellValue(user.getEmail()); } // 输出 Excel 文件 workbook.write(response.getOutputStream()); workbook.close(); } private List<User> getUsers() { return Arrays.asList( new User(1, "张三", 28, "zhangsan@example.com"), new User(2, "李四", 30, "lisi@example.com"), new User(3, "王五", 25, "wangwu@example.com") ); } } class User { private int id; private String name; private int age; private String email; public User(int id, String name, int age, String email) { this.id = id; this.name = name; this.age = age; this.email = email; } public int getId() { return id; } public String getName() { return name; } public int getAge() { return age; } public String getEmail() { return email; } }
3. 配置 SpringMVC
确保你的 web.xml 或 SpringMVC 配置文件中已经配置了 DispatcherServlet 和相关组件。
<servlet> <servlet-name>dispatcher</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/spring/appServlet/servlet-context.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>dispatcher</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping>
4. 测试导出功能
启动你的应用服务器,访问以下 URL 来测试导出功能:
http://localhost:8080/your-app/excel/export
如果一切正常,你应该会看到浏览器提示你下载一个名为“用户信息.xlsx”的 Excel 文件。
5. 方法补充
下面是一个使用 Spring MVC 和 Apache POI 导出 Excel 文件的示例代码。这个示例假设你已经有一个 Spring Boot 项目,并且需要从数据库中获取数据并将其导出为 Excel 文件。
1. 添加依赖
首先,在你的 `pom.xml` 文件中添加 Apache POI 的依赖:
<dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>5.2.3</version> </dependency>
2. 创建实体类
假设你有一个 User 实体类,表示用户信息:
public class User { private Long id; private String name; private String email; private int age; // Getters and Setters }
3. 创建服务类
创建一个服务类来处理数据的获取和 Excel 文件的生成:
import org.apache.poi.ss.usermodel.*; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.springframework.stereotype.Service; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.util.List; @Service public class UserService { // 假设这里有一个方法从数据库中获取用户列表 public List<User> getUsers() { // 这里可以调用 DAO 或 Repository 来获取数据 return List.of( new User(1L, "张三", "zhangsan@example.com", 28), new User(2L, "李四", "lisi@example.com", 30) ); } public ByteArrayInputStream exportUsersToExcel() throws IOException { List<User> users = getUsers(); try (Workbook workbook = new XSSFWorkbook(); ByteArrayOutputStream out = new ByteArrayOutputStream()) { Sheet sheet = workbook.createSheet("Users"); // 创建表头 Row headerRow = sheet.createRow(0); headerRow.createCell(0).setCellValue("ID"); headerRow.createCell(1).setCellValue("Name"); headerRow.createCell(2).setCellValue("Email"); headerRow.createCell(3).setCellValue("Age"); // 填充数据 int rowNum = 1; for (User user : users) { Row row = sheet.createRow(rowNum++); row.createCell(0).setCellValue(user.getId()); row.createCell(1).setCellValue(user.getName()); row.createCell(2).setCellValue(user.getEmail()); row.createCell(3).setCellValue(user.getAge()); } workbook.write(out); return new ByteArrayInputStream(out.toByteArray()); } } }
4. 创建控制器
创建一个控制器来处理 HTTP 请求并返回 Excel 文件:
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpStatus; 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.ByteArrayInputStream; import java.io.IOException; @RestController @RequestMapping("/api/users") public class UserController { @Autowired private UserService userService; @GetMapping("/export-excel") public ResponseEntity<ByteArrayResource> exportUsersToExcel() throws IOException { ByteArrayInputStream bis = userService.exportUsersToExcel(); // 设置响应头 HttpHeaders headers = new HttpHeaders(); headers.add("Content-Disposition", "attachment; filename=users.xlsx"); return ResponseEntity .ok() .headers(headers) .contentLength(bis.available()) .body(new ByteArrayResource(bis.readAllBytes())); } }
5. 配置应用
确保你的 application.properties 或 application.yml 文件中没有冲突的配置。
6. 测试
启动你的 Spring Boot 应用,然后访问 http://localhost:8080/api/users/export-excel,你应该会下载到一个名为 users.xlsx 的 Excel 文件,其中包含用户数据。
以上代码展示了如何在 Spring MVC 中使用 Apache POI 导出 Excel 文件。你可以根据实际需求调整数据源和服务逻辑。在使用Spring MVC框架结合Apache POI库来实现Excel文件的导出功能时,通常需要以下几个步骤:
添加依赖:确保项目中已经引入了Spring MVC和Apache POI的相关依赖。
创建Excel处理类:编写一个类来处理Excel文件的生成逻辑。
控制器层:在Spring MVC的控制器中调用上述类的方法,并设置响应头以触发文件下载。
1. 添加依赖
首先,在你的pom.xml文件中添加Apache POI的依赖:
<dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>5.2.2</version> </dependency>
2. 创建Excel处理类
接下来,创建一个类来处理Excel文件的生成。例如,创建一个名为ExcelExporter的类:
import org.apache.poi.ss.usermodel.*; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.List; import java.util.Map; public class ExcelExporter { public void export(List<Map<String, Object>> data, HttpServletResponse response) throws IOException { // 创建一个新的工作簿 Workbook workbook = new XSSFWorkbook(); // 创建一个工作表 Sheet sheet = workbook.createSheet("Data"); // 创建标题行 Row headerRow = sheet.createRow(0); int columnCount = 0; for (String key : data.get(0).keySet()) { Cell cell = headerRow.createCell(columnCount++); cell.setCellValue(key); } // 填充数据 int rowCount = 1; for (Map<String, Object> record : data) { Row row = sheet.createRow(rowCount++); columnCount = 0; for (String key : record.keySet()) { Cell cell = row.createCell(columnCount++); Object value = record.get(key); if (value instanceof String) { cell.setCellValue((String) value); } else if (value instanceof Integer) { cell.setCellValue((Integer) value); } else if (value instanceof Double) { cell.setCellValue((Double) value); } // 可以根据需要添加更多的类型处理 } } // 设置响应头 response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); response.setHeader("Content-Disposition", "attachment; filename=data.xlsx"); // 写入响应输出流 workbook.write(response.getOutputStream()); workbook.close(); } }
3. 控制器层
在Spring MVC的控制器中,调用ExcelExporter的export方法,并设置响应头以触发文件下载:
import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; @Controller public class ExcelController { @GetMapping("/export") public void export(HttpServletResponse response) throws IOException { List<Map<String, Object>> data = new ArrayList<>(); // 示例数据 Map<String, Object> record1 = new HashMap<>(); record1.put("Name", "John Doe"); record1.put("Age", 30); record1.put("Email", "john.doe@example.com"); Map<String, Object> record2 = new HashMap<>(); record2.put("Name", "Jane Smith"); record2.put("Age", 25); record2.put("Email", "jane.smith@example.com"); data.add(record1); data.add(record2); ExcelExporter exporter = new ExcelExporter(); exporter.export(data, response); } }
总结
通过上述步骤,你可以在Spring MVC应用中实现Excel文件的导出功能。这个过程包括添加必要的依赖、创建处理Excel文件的类以及在控制器中调用该类的方法并设置响应头以触发文件下载。
以上就是SpringMVC框架使用 Apache POI实现导出Excel的详细内容,更多关于SpringMVC POI导出Excel的资料请关注脚本之家其它相关文章!