SpringMVC框架使用 Apache POI實(shí)現(xiàn)導(dǎo)出Excel
在企業(yè)級(jí)應(yīng)用開(kāi)發(fā)中,數(shù)據(jù)的導(dǎo)入導(dǎo)出是一項(xiàng)常見(jiàn)的需求。Excel 作為最常用的數(shù)據(jù)處理工具之一,經(jīng)常被用來(lái)存儲(chǔ)和展示數(shù)據(jù)。本文將介紹如何在 SpringMVC 框架中使用 Apache POI 庫(kù)來(lái)實(shí)現(xiàn) Excel 文件的導(dǎo)出功能。
1.引入
1.1 添加依賴
首先,在項(xiàng)目的 ??pom.xml?? 文件中添加 Apache POI 的依賴:
<dependencies> <!-- 其他依賴 --> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>5.2.3</version> </dependency> </dependencies>
1.2 創(chuàng)建 Maven 項(xiàng)目
確保你的項(xiàng)目是一個(gè) Maven 項(xiàng)目,并且已經(jīng)配置好了 SpringMVC 框架。
2. 創(chuàng)建控制器
接下來(lái),我們創(chuàng)建一個(gè)控制器來(lái)處理導(dǎo)出 Excel 的請(qǐng)求。
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 { // 設(shè)置響應(yīng)頭 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"); // 創(chuàng)建工作簿 Workbook workbook = new XSSFWorkbook(); // 創(chuàng)建工作表 Sheet sheet = workbook.createSheet("用戶信息"); // 創(chuàng)建標(biāo)題行 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)); } // 填充數(shù)據(jù) 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?? 配置文件中已經(jīng)配置了 DispatcherServlet 和相關(guān)組件。
<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. 測(cè)試導(dǎo)出功能
啟動(dòng)你的應(yīng)用服務(wù)器,訪問(wèn)以下 URL 來(lái)測(cè)試導(dǎo)出功能:
http://localhost:8080/your-app/excel/export
如果一切正常,你應(yīng)該會(huì)看到瀏覽器提示你下載一個(gè)名為“用戶信息.xlsx”的 Excel 文件。
5. 方法補(bǔ)充
下面是一個(gè)使用 Spring MVC 和 Apache POI 導(dǎo)出 Excel 文件的示例代碼。這個(gè)示例假設(shè)你已經(jīng)有一個(gè) Spring Boot 項(xiàng)目,并且需要從數(shù)據(jù)庫(kù)中獲取數(shù)據(jù)并將其導(dǎo)出為 Excel 文件。
1. 添加依賴
首先,在你的 `pom.xml` 文件中添加 Apache POI 的依賴:
<dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>5.2.3</version> </dependency>
2. 創(chuàng)建實(shí)體類(lèi)
假設(shè)你有一個(gè) ??User?? 實(shí)體類(lèi),表示用戶信息:
public class User { private Long id; private String name; private String email; private int age; // Getters and Setters }
3. 創(chuàng)建服務(wù)類(lèi)
創(chuàng)建一個(gè)服務(wù)類(lèi)來(lái)處理數(shù)據(jù)的獲取和 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 { // 假設(shè)這里有一個(gè)方法從數(shù)據(jù)庫(kù)中獲取用戶列表 public List<User> getUsers() { // 這里可以調(diào)用 DAO 或 Repository 來(lái)獲取數(shù)據(jù) 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"); // 創(chuàng)建表頭 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"); // 填充數(shù)據(jù) 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. 創(chuàng)建控制器
創(chuàng)建一個(gè)控制器來(lái)處理 HTTP 請(qǐng)求并返回 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(); // 設(shè)置響應(yīng)頭 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. 配置應(yīng)用
確保你的 ??application.properties?? 或 ??application.yml?? 文件中沒(méi)有沖突的配置。
6. 測(cè)試
啟動(dòng)你的 Spring Boot 應(yīng)用,然后訪問(wèn) ??http://localhost:8080/api/users/export-excel??,你應(yīng)該會(huì)下載到一個(gè)名為 ??users.xlsx?? 的 Excel 文件,其中包含用戶數(shù)據(jù)。
以上代碼展示了如何在 Spring MVC 中使用 Apache POI 導(dǎo)出 Excel 文件。你可以根據(jù)實(shí)際需求調(diào)整數(shù)據(jù)源和服務(wù)邏輯。在使用Spring MVC框架結(jié)合Apache POI庫(kù)來(lái)實(shí)現(xiàn)Excel文件的導(dǎo)出功能時(shí),通常需要以下幾個(gè)步驟:
添加依賴:確保項(xiàng)目中已經(jīng)引入了Spring MVC和Apache POI的相關(guān)依賴。
創(chuàng)建Excel處理類(lèi):編寫(xiě)一個(gè)類(lèi)來(lái)處理Excel文件的生成邏輯。
控制器層:在Spring MVC的控制器中調(diào)用上述類(lèi)的方法,并設(shè)置響應(yīng)頭以觸發(fā)文件下載。
1. 添加依賴
首先,在你的??pom.xml??文件中添加Apache POI的依賴:
<dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>5.2.2</version> </dependency>
2. 創(chuàng)建Excel處理類(lèi)
接下來(lái),創(chuàng)建一個(gè)類(lèi)來(lái)處理Excel文件的生成。例如,創(chuàng)建一個(gè)名為??ExcelExporter??的類(lèi):
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 { // 創(chuàng)建一個(gè)新的工作簿 Workbook workbook = new XSSFWorkbook(); // 創(chuàng)建一個(gè)工作表 Sheet sheet = workbook.createSheet("Data"); // 創(chuàng)建標(biāo)題行 Row headerRow = sheet.createRow(0); int columnCount = 0; for (String key : data.get(0).keySet()) { Cell cell = headerRow.createCell(columnCount++); cell.setCellValue(key); } // 填充數(shù)據(jù) 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); } // 可以根據(jù)需要添加更多的類(lèi)型處理 } } // 設(shè)置響應(yīng)頭 response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); response.setHeader("Content-Disposition", "attachment; filename=data.xlsx"); // 寫(xiě)入響應(yīng)輸出流 workbook.write(response.getOutputStream()); workbook.close(); } }
3. 控制器層
在Spring MVC的控制器中,調(diào)用??ExcelExporter??的??export??方法,并設(shè)置響應(yīng)頭以觸發(fā)文件下載:
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<>(); // 示例數(shù)據(jù) 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); } }
總結(jié)
通過(guò)上述步驟,你可以在Spring MVC應(yīng)用中實(shí)現(xiàn)Excel文件的導(dǎo)出功能。這個(gè)過(guò)程包括添加必要的依賴、創(chuàng)建處理Excel文件的類(lèi)以及在控制器中調(diào)用該類(lèi)的方法并設(shè)置響應(yīng)頭以觸發(fā)文件下載。
以上就是SpringMVC框架使用 Apache POI實(shí)現(xiàn)導(dǎo)出Excel的詳細(xì)內(nèi)容,更多關(guān)于SpringMVC POI導(dǎo)出Excel的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
- Springboot使用POI進(jìn)行excel文件的導(dǎo)出與下載方式
- SpringBoot整合POI導(dǎo)出通用Excel的方法示例
- Springboot POI導(dǎo)出Excel(瀏覽器)
- 詳解poi+springmvc+springjdbc導(dǎo)入導(dǎo)出excel實(shí)例
- Java SpringMVC框架開(kāi)發(fā)之?dāng)?shù)據(jù)導(dǎo)出Excel文件格式實(shí)例詳解
- vue+springmvc導(dǎo)出excel數(shù)據(jù)的實(shí)現(xiàn)代碼
- SpringMvc導(dǎo)出Excel實(shí)例代碼
相關(guān)文章
Spring Boot JDBC 連接數(shù)據(jù)庫(kù)示例
本篇文章主要介紹了Spring Boot JDBC 連接數(shù)據(jù)庫(kù)示例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-02-02SpringBoot+MyBatis整合ClickHouse實(shí)踐記錄
本文介紹了如何使用SpringBoot、MyBatis和ClickHouse整合,包括添加依賴、配置數(shù)據(jù)源、創(chuàng)建實(shí)體類(lèi)、Mapper接口、服務(wù)層和控制器的步驟,通過(guò)這些步驟,可以使Java應(yīng)用程序高效地與ClickHouse數(shù)據(jù)庫(kù)進(jìn)行交互,感興趣的朋友跟隨小編一起看看吧2024-12-12Python自定義計(jì)算時(shí)間過(guò)濾器實(shí)現(xiàn)過(guò)程解析
這篇文章主要介紹了Python自定義計(jì)算時(shí)間過(guò)濾器實(shí)現(xiàn)過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-01-01java實(shí)現(xiàn)單鏈表倒轉(zhuǎn)的方法
這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)單鏈表倒轉(zhuǎn)的方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-05-05java中判斷字段真實(shí)長(zhǎng)度的實(shí)例(中文2個(gè)字符,英文1個(gè)字符)
下面小編就為大家?guī)?lái)一篇java中判斷字段真實(shí)長(zhǎng)度的實(shí)例(中文2個(gè)字符,英文1個(gè)字符)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-01-01詳解Java并發(fā)編程基礎(chǔ)之volatile
volatile作為Java多線程中輕量級(jí)的同步措施,保證了多線程環(huán)境中“共享變量”的可見(jiàn)性。這里的可見(jiàn)性簡(jiǎn)單而言可以理解為當(dāng)一個(gè)線程修改了一個(gè)共享變量的時(shí)候,另外的線程能夠讀到這個(gè)修改的值。本文將詳解介紹Java并發(fā)編程基礎(chǔ)之volatile2021-06-06Java加載資源文件時(shí)的路徑問(wèn)題的解決辦法
今天偶然看到一篇關(guān)于tomcat加載servlet的文章,不由得想起了java加載資源文件的路徑問(wèn)題,資源文件可以使xml,properties,圖片等,可以是任何文件2013-04-04java中instanceof 關(guān)鍵字作用和實(shí)際用途詳解
這篇文章主要介紹了java中instanceof 關(guān)鍵字作用和實(shí)際用途,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-04-04