欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SpringMVC框架使用 Apache POI實(shí)現(xiàn)導(dǎo)出Excel

 更新時(shí)間:2025年04月23日 08:21:28   作者:牛肉胡辣湯  
Excel 作為最常用的數(shù)據(jù)處理工具之一,經(jīng)常被用來(lái)存儲(chǔ)和展示數(shù)據(jù),本文將介紹如何在 SpringMVC 框架中使用 Apache POI 庫(kù)來(lái)實(shí)現(xiàn) Excel 文件的導(dǎo)出功能,有需要的可以參考一下

在企業(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)文章!

相關(guān)文章

  • Spring Boot JDBC 連接數(shù)據(jù)庫(kù)示例

    Spring Boot JDBC 連接數(shù)據(jù)庫(kù)示例

    本篇文章主要介紹了Spring Boot JDBC 連接數(shù)據(jù)庫(kù)示例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-02-02
  • 一篇文章帶你入門(mén)Java基本概念

    一篇文章帶你入門(mén)Java基本概念

    本文主要介紹了Java編程的基本概念基本概念,可以幫助我們更加深刻的所要講解的Java命令,具有很好的參考價(jià)值。下面跟著小編一起來(lái)看下吧,希望能給你帶來(lái)幫助
    2021-08-08
  • Java實(shí)現(xiàn)HDFS文件上傳下載

    Java實(shí)現(xiàn)HDFS文件上傳下載

    這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)HDFS文件上傳下載,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • SpringBoot+MyBatis整合ClickHouse實(shí)踐記錄

    SpringBoot+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-12
  • Python自定義計(jì)算時(shí)間過(guò)濾器實(shí)現(xiàn)過(guò)程解析

    Python自定義計(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-01
  • java實(shí)現(xiàn)單鏈表倒轉(zhuǎn)的方法

    java實(shí)現(xiàn)單鏈表倒轉(zhuǎn)的方法

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)單鏈表倒轉(zhuǎn)的方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • java中判斷字段真實(shí)長(zhǎng)度的實(shí)例(中文2個(gè)字符,英文1個(gè)字符)

    java中判斷字段真實(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

    詳解Java并發(fā)編程基礎(chǔ)之volatile

    volatile作為Java多線程中輕量級(jí)的同步措施,保證了多線程環(huán)境中“共享變量”的可見(jiàn)性。這里的可見(jiàn)性簡(jiǎn)單而言可以理解為當(dāng)一個(gè)線程修改了一個(gè)共享變量的時(shí)候,另外的線程能夠讀到這個(gè)修改的值。本文將詳解介紹Java并發(fā)編程基礎(chǔ)之volatile
    2021-06-06
  • Java加載資源文件時(shí)的路徑問(wèn)題的解決辦法

    Java加載資源文件時(shí)的路徑問(wèn)題的解決辦法

    今天偶然看到一篇關(guān)于tomcat加載servlet的文章,不由得想起了java加載資源文件的路徑問(wèn)題,資源文件可以使xml,properties,圖片等,可以是任何文件
    2013-04-04
  • java中instanceof 關(guān)鍵字作用和實(shí)際用途詳解

    java中instanceof 關(guān)鍵字作用和實(shí)際用途詳解

    這篇文章主要介紹了java中instanceof 關(guān)鍵字作用和實(shí)際用途,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-04-04

最新評(píng)論