使用Spring Boot和EasyExcel導出Excel文件,并在前端使用Axios進行請求

在現代企業應用中,Excel文件的導出是一項常見且重要的功能。Spring Boot作為Java開發中的熱門框架,結合EasyExcel這樣的高效庫,能夠輕松實現Excel的導出功能。而在前端,使用Axios進行HTTP請求,可以方便地與后端進行數據交互,實現文件的下載。本文將詳細介紹如何在Spring Boot中使用EasyExcel導出Excel文件,并在前端通過Axios進行請求。


一、引言

Excel文件導出功能在企業應用中廣泛應用于數據報告、統計分析等場景。傳統的POI庫雖然功能強大,但在處理大數據量時效率較低。EasyExcel作為阿里巴巴開源的一款高性能Excel處理庫,能夠顯著提升導出效率。而Spring Boot提供了簡潔的配置和開發體驗,結合EasyExcel,可以快速實現高效穩定的Excel導出功能。前端使用Axios進行HTTP請求,能夠輕松實現文件的下載,提升用戶體驗。


二、環境準備

在開始開發之前,請確保以下環境和工具已經準備就緒:

  • 開發工具:IntelliJ IDEA或Eclipse
  • Java開發環境:JDK 8及以上
  • Spring Boot:版本2.5.0及以上
  • EasyExcel:版本2.2.10及以上
  • 前端框架:Vue.js或其他JavaScript框架
  • Axios:用于發送HTTP請求

此外,建議讀者具備基本的Spring Boot和前端開發經驗,以便更好地理解后續內容。


三、后端實現

1. 導入依賴

在Spring Boot項目中,首先需要在pom.xml文件中添加EasyExcel和相關依賴:

<dependencies><!-- Spring Boot Starter Web --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- EasyExcel --><dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>2.2.10</version></dependency><!-- 其他依賴 --><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency>
</dependencies>

2. 配置類

創建一個配置類,確保EasyExcel的相關組件被正確加載:

import com.alibaba.excel.ExcelWriter;
import com.alibaba.excel.metadata.BaseRowModel;
import com.alibaba.excel.util.FileUtils;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;@Configuration
public class ExcelConfig {@Beanpublic ExcelWriter excelWriter() {return new ExcelWriter();}@Beanpublic FileUtils fileUtils() {return new FileUtils();}
}

3. 服務接口

編寫一個服務接口,定義導出Excel的方法:

import com.alibaba.excel.ExcelWriter;
import com.alibaba.excel.metadata.BaseRowModel;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;import java.io.IOException;
import java.io.OutputStream;
import java.util.List;@Service
public class ExcelExportService {@Autowiredprivate ExcelWriter excelWriter;public void exportExcel(OutputStream outputStream, List<? extends BaseRowModel> data) throws IOException {excelWriter.write(data, outputStream);}
}

4. 控制層

創建一個RESTful API,處理前端的導出請求,并調用服務層的方法生成Excel文件:

import com.alibaba.excel.ExcelWriter;
import com.alibaba.excel.metadata.BaseRowModel;
import org.springframework.beans.factory.annotation.Autowired;
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.IOException;
import java.io.OutputStream;
import java.util.List;@RestController
@RequestMapping("/api/excel")
public class ExcelExportController {@Autowiredprivate ExcelExportService excelExportService;@GetMapping("/export")public ResponseEntity<?> exportExcel() {try {// 獲取數據List<MyDataModel> data = getData();// 響應流OutputStream outputStream = response.getOutputStream();// 導出ExcelexcelExportService.exportExcel(outputStream, data);return ResponseEntity.status(HttpStatus.OK).build();} catch (IOException e) {e.printStackTrace();return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).build();}}private List<MyDataModel> getData() {// 從數據庫或其他數據源獲取數據return data;}
}

四、前端實現

1. 引入Axios

在前端項目中,安裝并引入Axios:

npm install axios

然后在JavaScript文件中引入:

import axios from 'axios';

2. 組件開發

創建一個按鈕或其他交互元素,觸發導出功能:

<template><button @click="exportExcel">導出Excel</button>
</template><script>
import axios from 'axios';export default {methods: {exportExcel() {axios.get('/api/excel/export', {responseType: 'blob'}).then(response => {const blob = new Blob([response.data], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' });const url = window.URL.createObjectURL(blob);const a = document.createElement('a');a.href = url;a.download = 'data.xlsx';a.click();window.URL.revokeObjectURL(url);}).catch(error => {console.error('導出失敗:', error);});}}
}
</script>

3. 處理響應

前端接收到后端返回的Excel文件流后,使用Blob和FileSaver.js將其下載到本地:

axios.get('/api/excel/export', {responseType: 'blob'
}).then(response => {const blob = new Blob([response.data], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' });const url = window.URL.createObjectURL(blob);const a = document.createElement('a');a.href = url;a.download = 'data.xlsx';a.click();window.URL.revokeObjectURL(url);
}).catch(error => {console.error('導出失敗:', error);
});

五、注意事項

  1. 跨域問題

    • 確保前端和后端的CORS配置正確,允許前端域訪問后端API。
  2. 性能優化

    • 處理大數據量時,可以分頁導出或使用流式處理,避免內存溢出。
  3. 異常處理

    • 在前端和后端分別添加異常處理邏輯,提升用戶體驗和系統穩定性。

六、總結

通過本文的介紹,讀者可以掌握如何在Spring Boot中使用EasyExcel實現Excel文件的導出功能,并在前端使用Axios進行請求,完成文件的下載。EasyExcel的高性能和Spring Boot的簡潔配置,使得這一過程變得高效且易于維護。希望本文能夠幫助讀者在實際項目中快速實現Excel導出功能,并提升整體應用的用戶體驗。


七、附錄

完整代碼示例

后端代碼:

// ExcelConfig.java
@Configuration
public class ExcelConfig {@Beanpublic ExcelWriter excelWriter() {return new ExcelWriter();}@Beanpublic FileUtils fileUtils() {return new FileUtils();}
}// ExcelExportService.java
@Service
public class ExcelExportService {@Autowiredprivate ExcelWriter excelWriter;public void exportExcel(OutputStream outputStream, List<? extends BaseRowModel> data) throws IOException {excelWriter.write(data, outputStream);}
}// ExcelExportController.java
@RestController
@RequestMapping("/api/excel")
public class ExcelExportController {@Autowiredprivate ExcelExportService excelExportService;@GetMapping("/export")public ResponseEntity<?> exportExcel() {try {List<MyDataModel> data = getData();OutputStream outputStream = response.getOutputStream();excelExportService.exportExcel(outputStream, data);return ResponseEntity.status(HttpStatus.OK).build();} catch (IOException e) {e.printStackTrace();return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).build();}}private List<MyDataModel> getData() {// 從數據庫或其他數據源獲取數據return data;}
}

前端代碼:

// 導出Excel的方法
exportExcel() {axios.get('/api/excel/export', {responseType: 'blob'}).then(response => {const blob = new Blob([response.data], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' });const url = window.URL.createObjectURL(blob);const a = document.createElement('a');a.href = url;a.download = 'data.xlsx';a.click();window.URL.revokeObjectURL(url);}).catch(error => {console.error('導出失敗:', error);});
}

相關資源

  • EasyExcel官方文檔:https://github.com/alibaba/easyexcel
  • Spring Boot官方文檔:https://spring.io/guides
  • Axios官方文檔:https://axios-http.com/

通過以上資源,讀者可以進一步學習和探索相關技術,提升自己的開發能力。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/94484.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/94484.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/94484.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

圖論水題5

cf796D 題意 n個點n-1條邊&#xff0c;k個特殊點以及整數d&#xff0c;要求刪除最多的邊保證每個點都可以在d步之內到達一個特殊點&#xff0c;輸入保證每個點都可以在d步內到達特殊點 思路 考慮什么時候可以刪除一條邊&#xff0c;即這條邊連接的兩個點可以在d步內到達兩個不同…

像WPS Office 一樣處理pdf頁面尺寸

1. 修改頁面尺寸import os import shutil import fitz # PyMuPDFdef cm_to_px(cm):# 厘米轉換成像素"""doc fitz.open(input_file)page0 doc[0]width_px page0.mediabox.widthheight page0.mediabox.heightprint(fwidth_px&#xff1a;{width_px} height&a…

Linux 基礎開發工具

在 Linux 環境下進行開發&#xff0c;熟練掌握基礎工具是提升效率、解決問題的核心前提。無論是軟件安裝、代碼編輯&#xff0c;還是編譯調試、版本管理&#xff0c;一套 “趁手” 的工具鏈能讓開發過程事半功倍。本文將從 Linux 開發最核心的七大工具模塊入手&#xff0c;一步…

TapData vs Kafka ETL Pipeline:競爭?共存?——企業實時數據策略的正確打開方式

【引言】企業實時數據流轉&#xff0c;迎來“集成計算”新范式 企業 IT 架構的演進&#xff0c;從最初的數據孤島&#xff0c;到集中式數據倉庫&#xff0c;再到如今的實時數據驅動架構。在這一過程中&#xff0c;數據的集成&#xff08;數據源→目標&#xff09;與數據的計算&…

十九、云原生分布式存儲 CubeFS

十九、云原生分布式存儲 CubeFS 文章目錄十九、云原生分布式存儲 CubeFS1、分布式存儲初識1.1 分布式存儲主要特性1.2 為什么要在K8s上落地存儲平臺1.3 云原生存儲平臺CubeFS介紹1.4 分布式存儲平臺落地架構1.4.1 混合部署1.4.2 獨立部署-基礎設施集群1.5 資源分配建議1.6 硬件…

如何拯救一家瀕臨破產的科技公司?

從谷底爬起&#xff1a;Medium 的生死重生之路 2022年的 Medium&#xff0c;正墜入一個深不見底的深淵。 每月虧損260萬美元&#xff0c;訂閱用戶持續流失——這不是增長&#xff0c;而是在消耗資本。更致命的是內容質量&#xff1a;平臺充斥著“快速致富學”等空洞內容&#x…

數據結構-算法(一)

一、已知無向圖的鄰接矩陣&#xff0c;求無向圖的鄰接表。 &#xff08;1&#xff09;提示&#xff1a;無向圖如下圖(a)所示&#xff0c;已知鄰接矩陣如圖(b)所示&#xff0c;求對應的鄰接表(c)。&#xff08;2&#xff09;請定義void adjMatrix_2_adjList(int b[4][4], AdjLis…

2025年嵌入式通信電源系統品牌有哪些?

現在科技跑得飛快&#xff0c;嵌入式通信電源系統可是越來越吃香了&#xff0c;尤其是在5G、物聯網、智能家居這些熱門地方。這玩意兒不光能讓設備穩穩當當干活兒&#xff0c;還特省電、賊聰明&#xff0c;優勢杠杠的&#xff01;既然大家伙兒都這么需要它&#xff0c;那到了20…

Ubuntu24.04環境下causal_conv1d和mamba_ssm安裝

環境&#xff1a;WSL的Ubuntu24.041.創建conda環境&#xff0c;其中python版本為3.10.132.當前conda環境依次執行下面命令&#xff1a;conda install cudatoolkit11.8 -c nvidia pip install torch2.1.1 torchvision0.16.1 torchaudio2.1.1 -f https://mirrors.aliyun.com/pyto…

Python爬蟲實戰: 爬蟲常用到的技術及方案詳解

爬蟲是獲取網絡數據的重要工具,Python因其豐富的庫生態系統而成為爬蟲開發的首選語言。下面我將詳細介紹Python爬蟲的常用技術和方案。 一、基礎技術棧 1. 請求庫 Requests - 同步HTTP請求庫 import requests# 基本GET請求 response = requests.get(https://httpbin.org/g…

k8s——持久化存儲 PVC

目錄 k8s持久化存儲&#xff1a; PVC 1 k8s PV是什么&#xff1f; 2 k8s PVC是什么&#xff1f; 3 k8s PVC和PV工作原理 4 創建pod&#xff0c;使用pvc作為持久化存儲卷 ?三種回收策略詳解? 1、創建nfs共享目錄 2、如何編寫pv的資源清單文件 3、創建pv 更新資源清單文…

【系統架構設計師】數據庫設計(一):數據庫技術的發展、數據模型、數據庫管理系統、數據庫三級模式

數據庫技術是研究數據庫的結構、存儲、設計、管理和應用的一門軟件學科。 數據庫系統本質上是一個用計算機存儲信息的系統。 數據庫管理系統是位于用戶與操作系統之間的一層數據管理軟件&#xff0c;其基本目標是提供一個可以方便、有效地存取數據庫信息的環境。 數據庫就是信息…

深入理解 Structured Outputs:基于 JSON Schema 的結構化輸出實踐指南

深入理解 Structured Outputs&#xff1a;基于 JSON Schema 的結構化輸出實踐指南 目錄 引言Structured Outputs 概述應用場景與優勢核心用法&#xff1a;結構化響應的獲取功能對比&#xff1a;Structured Outputs 與 JSON 模式典型應用示例鏈式思維&#xff08;Chain of Tho…

大模型應用編排工具Dify之插件探索

1.前言 ? dify 1.x版本以后插件功能豐富了很多&#xff0c;推出的插件市場上有各式各樣的插件&#xff0c;比如 連接數據庫、連接大模型、搜索和 mcp服務等。其中&#xff0c;有一個比較大的改動&#xff0c;模型供應商不再內置&#xff0c;而是通過插件的形式提供。因此&…

ubuntu2204安裝搜狗拼音輸入法

安裝必要的軟件包 sudo apt update sudo apt install fcitx5 fcitx5-chinese-addons fcitx5-config-qt fcitx5-configtool -y安裝搜狗拼音 下載最新 .deb 包&#xff08;官方地址&#xff1a;https://pinyin.sogou.com/linux/&#xff09;&#xff0c;安裝&#xff1a; sudo dp…

三,設計模式-抽象工廠模式

目的 在 工廠模式 中&#xff0c;當需要創建新的產品時&#xff0c;則額外需要創建新的工廠&#xff0c;這種模式是對產品制造方法的抽象化&#xff0c;如果產品種類變多&#xff0c;則工廠數目變多&#xff0c;則代碼規模會越來越大&#xff0c;且不同的產品類的生成依賴不同…

Vue3響應式編程核心:ref與reactive全方位對比

在Vue3的Composition API中&#xff0c;ref和reactive是構建響應式數據的核心工具。許多開發者對它們的選擇存在困惑&#xff1a;何時用ref的.value&#xff1f;何時用reactive的直接訪問&#xff1f;為何解構會丟失響應性&#xff1f;本文從原理、場景到實戰陷阱&#xff0c;為…

Redis實戰-緩存的解決方案(一)

1.什么是緩存緩存就是數據交換的緩存區&#xff0c;是存儲數據的臨時區域&#xff0c;讀寫性能高。瀏覽器會有緩存&#xff0c;tomcat服務器也會有緩存&#xff0c;數據庫也會有緩存&#xff0c;CPU也會有緩存&#xff0c;磁盤也會有緩存&#xff0c;所以說緩存是無處不在的并且…

CI/CD企業案例詳解

7.持續集成持續交付企業示例 為了讓容器構建鏡像可以持續集成并自動上傳到harbor倉庫&#xff0c;業務主機通過持續交付自動從倉庫中下載鏡像最近版本并實現業務更新7.1 在jenkins中添加registry節點 7.1.1 在業務節點中安裝docker和java環境并配置其可以從倉庫中下載鏡像 # 新…