使用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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈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环境并配置其可以从仓库中下载镜像 # 新…