最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot使用Apache?POI實現(xiàn)導入導出Excel文件

 更新時間:2025年01月08日 10:09:42   作者:孤蓬&聽雨  
Apache?POI?是一個強大的?Java?庫,用于處理?Microsoft?Office?文檔,下面我們來看看SpringBoot如何使用Apache?POI導入導出Excel文件功能吧

1. Apache POI 簡介

Apache POI 是一個強大的 Java 庫,用于處理 Microsoft Office 文檔,包括 Excel 文件(.xls 和 .xlsx)。在 Java Spring Boot 項目中,利用 Apache POI 可以方便地實現(xiàn) Excel 文件的導入(讀?。┖蛯С觯▽懭耄┕δ?。

1.1 Apache POI 的特點

特性詳細說明
支持多種 Office 文檔格式包括 Excel(.xls 和 .xlsx)、Word、PowerPoint 等
功能全面支持 Excel 的各種復雜功能,如公式、圖表、樣式、單元格格式、數(shù)據(jù)驗證、宏等
豐富的 API提供了 HSSF(用于 .xls)、XSSF(用于 .xlsx)和 SXSSF(用于大數(shù)據(jù)量的 .xlsx)等不同的實現(xiàn)類,支持對 Excel 文件的細粒度控制
社區(qū)活躍作為 Apache 基金會項目,擁有活躍的社區(qū)和豐富的文檔資源,便于開發(fā)者獲取幫助和解決問題
靈活性高提供了豐富的配置選項和 API,開發(fā)者可以根據(jù)需要進行高度定制,滿足復雜的業(yè)務需求
支持讀寫操作不僅支持讀取 Excel 文件,還支持創(chuàng)建和修改 Excel 文件,包括添加、刪除、修改單元格內容和格式

1.2 Apache POI 的優(yōu)點

優(yōu)點詳細說明
功能強大能夠處理 Excel 的各種高級功能,適用于需要全面操作 Excel 文件的場景
廣泛支持支持多種 Office 文檔格式,適用于不同的應用場景,如數(shù)據(jù)導入導出、報表生成等
靈活性高提供了豐富的 API 和配置選項,開發(fā)者可以根據(jù)具體需求進行定制,實現(xiàn)復雜的業(yè)務邏輯
社區(qū)支持作為開源項目,擁有活躍的社區(qū)和豐富的文檔資源,便于開發(fā)者獲取幫助和解決問題
兼容性良好與多種 Java 版本和框架兼容,能夠很好地集成到現(xiàn)有的 Java 項目中

1.3 Apache POI 的缺點

缺點詳細說明
內存消耗大處理大型 Excel 文件時,內存消耗較大,容易導致內存溢出(OutOfMemoryError)。特別是使用 HSSF 和 XSSF 時,這個問題尤為明顯
性能較低相比于一些輕量級的庫(如 EasyExcel),Apache POI 在處理大規(guī)模數(shù)據(jù)時的性能較低,處理時間較長
復雜性較高由于功能全面,API 較為復雜,學習曲線較陡,開發(fā)者需要花費更多時間學習和掌握
文件體積較大生成的 Excel 文件體積可能較大,特別是在包含大量數(shù)據(jù)或復雜格式時,可能會影響文件傳輸和存儲效率
部分功能不夠完善盡管功能全面,但在某些高級功能(如某些復雜的圖表類型、宏支持等)上可能不如 Microsoft Office 本身的功能完善

2. 實現(xiàn) Excel 導入與導出

2.1 引用項目依賴

在 pom.xml 中添加 Apache POI 的依賴:

<dependencies>
    <!-- Spring Boot Starter Web -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <!-- Apache POI 依賴 -->
    <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi-ooxml</artifactId>
        <version>5.2.3</version>
    </dependency>

    <!-- Lombok (可選,用于簡化代碼) -->
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <optional>true</optional>
    </dependency>

    <!-- 其他依賴 -->
</dependencies>

2.2 定義數(shù)據(jù)模型

定義與 Excel 列對應的 Java 類:

package com.example.exceldemo;

import lombok.Data;

@Data
public class UserData {

    private Integer id;

    private String name;

    private Integer age;

    private String email;
}

2.3 Excel 導入導出Controller類

創(chuàng)建 ExcelController 類,包含導出和導入接口:

package com.example.exceldemo;

import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

@RestController
public class ExcelController {

    @GetMapping("/export")
    public ResponseEntity<byte[]> exportExcel() {
        String fileName = "用戶數(shù)據(jù).xlsx";
        List<UserData> userList = generateUserData();

        byte[] bytes = exportToExcel(userList);

        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
        headers.setContentDispositionFormData("attachment", fileName);

        return ResponseEntity.ok()
                .headers(headers)
                .body(bytes);
    }

    private List<UserData> generateUserData() {
        List<UserData> list = new ArrayList<>();
        for (int i = 1; i <= 100; i++) {
            UserData user = new UserData();
            user.setId(i);
            user.setName("用戶" + i);
            user.setAge(20 + i % 30);
            user.setEmail("user" + i + "@example.com");
            list.add(user);
        }
        return list;
    }

    private byte[] exportToExcel(List<UserData> userList) {
        Workbook workbook = new XSSFWorkbook();
        Sheet sheet = workbook.createSheet("用戶數(shù)據(jù)");

        // 創(chuàng)建表頭
        Row header = sheet.createRow(0);
        header.createCell(0).setCellValue("編號");
        header.createCell(1).setCellValue("姓名");
        header.createCell(2).setCellValue("年齡");
        header.createCell(3).setCellValue("郵箱");

        // 寫入數(shù)據(jù)
        for (int i = 0; i < userList.size(); i++) {
            Row row = sheet.createRow(i + 1);
            UserData user = userList.get(i);
            row.createCell(0).setCellValue(user.getId());
            row.createCell(1).setCellValue(user.getName());
            row.createCell(2).setCellValue(user.getAge());
            row.createCell(3).setCellValue(user.getEmail());
        }

        // 寫入到字節(jié)數(shù)組
        ByteArrayOutputStream out = new ByteArrayOutputStream();
        try {
            workbook.write(out);
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                workbook.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

        return out.toByteArray();
    }

    @PostMapping("/import")
    public String importExcel(@RequestParam("file") MultipartFile file) {
        try (InputStream inputStream = file.getInputStream()) {
            List<UserData> userList = new ArrayList<>();
            Workbook workbook = new XSSFWorkbook(inputStream);
            Sheet sheet = workbook.getSheetAt(0);
            Iterator<Row> iterator = sheet.iterator();

            // 跳過表頭
            if (iterator.hasNext()) {
                iterator.next();
            }

            while (iterator.hasNext()) {
                Row row = iterator.next();
                UserData user = new UserData();
                user.setId((int) row.getCell(0).getNumericCellValue());
                user.setName(row.getCell(1).getStringCellValue());
                user.setAge((int) row.getCell(2).getNumericCellValue());
                user.setEmail(row.getCell(3).getStringCellValue());
                userList.add(user);
            }

            // 處理導入的數(shù)據(jù),例如保存到數(shù)據(jù)庫
            processUserData(userList);

            return "導入成功,共導入 " + userList.size() + " 條數(shù)據(jù)";
        } catch (IOException e) {
            e.printStackTrace();
            return "導入失敗: " + e.getMessage();
        }
    }

    private void processUserData(List<UserData> userList) {
        // 這里可以添加將數(shù)據(jù)保存到數(shù)據(jù)庫的邏輯
        // 例如使用 JPA 或 MyBatis 等持久層框架
        userList.forEach(user -> {
            // 模擬保存操作
            System.out.println("保存用戶: " + user);
        });
    }
}

2.4 前端部分(可選)

為了測試導入功能,可以創(chuàng)建一個簡單的 HTML 表單:

<!DOCTYPE html>
<html>
<head>
    <title>Excel 導入</title>
</head>
<body>
    <h1>導入 Excel 文件</h1>
    <form method="POST" enctype="multipart/form-data" action="/import">
        <input type="file" name="file" accept=".xlsx, .xls" />
        <button type="submit">上傳</button>
    </form>
</body>
</html>

將這個 HTML 文件放在 src/main/resources/static 目錄下,例如 src/main/resources/static/import.html,然后訪問 http://localhost:8080/import.html 即可看到上傳表單。

2.5 運行項目

1.啟動 Spring Boot 應用。

2.訪問 http://localhost:8080/import.html。

3.點擊“上傳”按鈕,選擇包含用戶數(shù)據(jù)的 Excel 文件進行導入。

結果如下:

4.訪問 http://localhost:8080/export,將下載一個包含示例用戶數(shù)據(jù)的 Excel 文件。

3. 總結

Apache POI 是一個功能強大的 Java 庫,適用于在 Spring Boot 項目中處理 Excel 文件的導入與導出。通過使用 Apache POI,開發(fā)者可以方便地實現(xiàn)對 Excel 文件的讀寫操作,包括處理復雜的 Excel 功能。然而,Apache POI 在處理大型文件時內存消耗較大,性能相對較低,因此在處理大規(guī)模數(shù)據(jù)時需要謹慎。

在本文中,我們詳細介紹了如何使用 Apache POI 在 Spring Boot 中實現(xiàn) Excel 文件的導入與導出,包括數(shù)據(jù)模型的定義、控制器接口的實現(xiàn)以及前后端交互的實現(xiàn)。通過本文的示例代碼,大家可以快速上手并在實際項目中應用這些技術。

以上就是SpringBoot使用Apache POI實現(xiàn)導入導出Excel文件的詳細內容,更多關于SpringBoot Apache POI導入導出Excel的資料請關注腳本之家其它相關文章!

相關文章

  • Java使用TCP實現(xiàn)在線聊天的示例代碼

    Java使用TCP實現(xiàn)在線聊天的示例代碼

    這篇文章主要介紹了Java使用TCP實現(xiàn)在線聊天的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-01-01
  • JPA之多對多查詢死循環(huán)嵌套問題及解決方案

    JPA之多對多查詢死循環(huán)嵌套問題及解決方案

    這篇文章主要介紹了JPA之多對多查詢死循環(huán)嵌套問題及解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • Jsoup獲取全國地區(qū)數(shù)據(jù)屬性值(省市縣鎮(zhèn)村)

    Jsoup獲取全國地區(qū)數(shù)據(jù)屬性值(省市縣鎮(zhèn)村)

    這篇文章主要介紹了Jsoup獲取全國地區(qū)數(shù)據(jù)屬性值(省市縣鎮(zhèn)村)的相關資料,需要的朋友可以參考下
    2015-10-10
  • Spring XML Schema擴展機制的使用示例

    Spring XML Schema擴展機制的使用示例

    所謂整合,即在Spring的框架下進行擴展,讓框架能無縫的與Spring工程配合使用。Spring設計了良好的擴展的機制,本文將對Spring的擴展方法及原理進行簡單介紹。
    2021-05-05
  • Maven配置文件settings.xml的實現(xiàn)

    Maven配置文件settings.xml的實現(xiàn)

    Maven是一個用于構建和管理Java項目的強大工具,它依賴于設置文件來配置和管理其行為,其中最重要的之一便是settings.xml文件,本文主要介紹了Maven配置文件settings.xml的實現(xiàn),具有一定的參考價值,感興趣的可以了解一下
    2024-01-01
  • SpringCloud微服務多應用腳手架的搭建與部署方式

    SpringCloud微服務多應用腳手架的搭建與部署方式

    這篇文章主要介紹了SpringCloud微服務多應用腳手架的搭建與部署方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • 新手初學Java數(shù)組

    新手初學Java數(shù)組

    數(shù)組是相同類型數(shù)據(jù)的有序集合數(shù)組描述的是相同類型的若干個數(shù)據(jù),按照一定的先后次序排列組合而成。其中,每一個數(shù)據(jù)稱作一個數(shù)組元素,每個數(shù)組元素可以通過一個下標來訪問它們數(shù)組的聲明創(chuàng)建
    2021-07-07
  • java實現(xiàn)固定時段倒計時的示例代碼

    java實現(xiàn)固定時段倒計時的示例代碼

    這篇文章主要為大家詳細介紹了java實現(xiàn)固定時段倒計時,可以在每隔一定時間給出時間倒計時提示,文中的示例代碼講解詳細,需要的可以了解下
    2025-08-08
  • IDEA中SpringBoot項目的yml多環(huán)境配置方式

    IDEA中SpringBoot項目的yml多環(huán)境配置方式

    這篇文章主要介紹了IDEA中SpringBoot項目的yml多環(huán)境配置,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2023-10-10
  • SpringBoot配置Hikari數(shù)據(jù)庫連接池的詳細步驟

    SpringBoot配置Hikari數(shù)據(jù)庫連接池的詳細步驟

    Spring Boot是一個開源的Java框架,它簡化了基于Spring的應用程序的開發(fā)和部署,HikariCP是一個高性能的Java數(shù)據(jù)庫連接池,被廣泛應用于Java開發(fā)領域,它是目前最快和最輕量級的連接池之一,本文介紹了SpringBoot配置Hikari數(shù)據(jù)庫連接池的詳細步驟,需要的朋友可以參考下
    2024-08-08

最新評論

东城区| 巴里| 淄博市| 沙雅县| 和平县| 辉南县| 新河县| 临沧市| 新郑市| 襄汾县| 慈溪市| 遵义县| 共和县| 宜兰市| 崇义县| 屯留县| 垦利县| 佛冈县| 潼关县| 黄骅市| 碌曲县| 泊头市| 司法| 黎城县| 克东县| 邹平县| 疏附县| 都匀市| 平凉市| 西乌| 定结县| 米易县| 阜阳市| 达尔| 油尖旺区| 蒲城县| 文成县| 盐边县| 类乌齐县| 隆安县| 东台市|