亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

SpringBoot使用Apache?POI實現導入導出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 可以方便地實現 Excel 文件的導入(讀?。┖蛯С觯▽懭耄┕δ?。

1.1 Apache POI 的特點

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

1.2 Apache POI 的優(yōu)點

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

1.3 Apache POI 的缺點

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

2. 實現 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 定義數據模型

定義與 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 = "用戶數據.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("用戶數據");

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

        // 寫入數據
        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é)數組
        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);
            }

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

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

    private void processUserData(List<UserData> userList) {
        // 這里可以添加將數據保存到數據庫的邏輯
        // 例如使用 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.點擊“上傳”按鈕,選擇包含用戶數據的 Excel 文件進行導入。

結果如下:

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

3. 總結

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

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

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

相關文章

  • Mybatis的TypeHandler加解密數據實現

    Mybatis的TypeHandler加解密數據實現

    在我們數據庫中有些時候會保存一些用戶的敏感信息,所以就需要對這些數據進行加密,那么本文就介紹了Mybatis的TypeHandler加解密數據實現,感興趣的可以了解一下
    2021-06-06
  • Java反射獲取實例的速度對比分析

    Java反射獲取實例的速度對比分析

    這篇文章主要介紹了Java反射獲取實例的速度對比分析,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-09-09
  • 解決MyEclipse10.7部署報錯拋空指針異常問題的方法

    解決MyEclipse10.7部署報錯拋空指針異常問題的方法

    這篇文章主要介紹了解決MyEclipse10.7部署報錯拋空指針異常問題的方法,需要的朋友可以參考下
    2015-12-12
  • java 獲取中文拼音首字母及全拼的實踐

    java 獲取中文拼音首字母及全拼的實踐

    本文主要介紹了java 獲取中文拼音首字母及全拼的實踐,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-08-08
  • log4j2異步打印性能提升方式

    log4j2異步打印性能提升方式

    這篇文章主要介紹了log4j2異步打印性能提升方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • java判讀數組中是否有重復值的示例

    java判讀數組中是否有重復值的示例

    這篇文章主要介紹了java判讀數組中是否有重復值的示例,需要的朋友可以參考下
    2014-04-04
  • java GUI實現學生圖書管理簡單實例

    java GUI實現學生圖書管理簡單實例

    這篇文章主要為大家詳細介紹了java GUI實現學生圖書管理簡單示例,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • Java讀寫鎖ReadWriteLock的創(chuàng)建使用及測試分析示例詳解

    Java讀寫鎖ReadWriteLock的創(chuàng)建使用及測試分析示例詳解

    這篇文章主要為大家介紹了Java讀寫鎖ReadWriteLock的創(chuàng)建使用及測試分析示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-01-01
  • 如何基于java實現解壓ZIP TAR等文件

    如何基于java實現解壓ZIP TAR等文件

    這篇文章主要介紹了如何基于java實現解壓ZIP TAR等文件,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-07-07
  • Spring boot的上傳圖片功能實例詳解

    Spring boot的上傳圖片功能實例詳解

    Spring Boot是由Pivotal團隊提供的全新框架,其設計目的是用來簡化新Spring應用的初始搭建以及開發(fā)過程。這篇文章主要介紹了Spring boot 上傳圖片,需要的朋友可以參考下
    2018-03-03

最新評論