SpringBoot整合EasyExcel实现复杂Excel表格的导入导出功能

文章目录


在这里插入图片描述

🎉SpringBoot整合EasyExcel实现复杂Excel表格的导入&导出功能


  • ☆* o(≧▽≦)o *☆嗨~我是IT·陈寒🍹
  • ✨博客主页:IT·陈寒的博客
  • 🎈该系列文章专栏:架构设计
  • 📜其他专栏:Java学习路线 Java面试技巧 Java实战项目 AIGC人工智能 数据结构学习
  • 🍹文章作者技术和水平有限,如果文中出现错误,希望大家能指正🙏
  • 📜 欢迎大家关注! ❤️

引言

在实际的软件开发中,数据的导入和导出是非常常见的需求,特别是对于复杂的Excel表格,常规的处理方式可能显得繁琐而效率低下。SpringBoot作为一种现代化的Java开发框架,EasyExcel则是一款优秀的Excel操作工具,两者的结合可以大大简化开发过程,提高效率。本文将介绍如何使用SpringBoot整合EasyExcel来实现复杂Excel表格的导入和导出功能。

在这里插入图片描述

一、环境准备

在开始之前,请确保你的开发环境中已经准备好了以下工具和库:

  1. JDK 8及以上版本
  2. Maven
  3. SpringBoot
  4. EasyExcel

你可以通过Maven引入EasyExcel的依赖:

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>easyexcel</artifactId>
    <version>2.2.10</version>
</dependency>

二、导入Excel数据

首先,我们将重点介绍如何使用SpringBoot整合EasyExcel来实现复杂Excel表格的导入功能。

1. 创建实体类

假设我们要导入的Excel表格数据如下:

姓名年龄地址电话
张三25北京市朝阳区13888888888
李四30上海市浦东区13999999999
王五28广州市天河区13666666666

我们需要创建一个对应的Java实体类,例如:

public class User {
    private String name;
    private Integer age;
    private String address;
    private String phone;
    
    // 省略getter和setter方法
}

2. 编写Excel导入的Controller

@RestController
@RequestMapping("/excel")
public class ExcelController {

    @PostMapping("/import")
    public String importExcel(@RequestParam("file") MultipartFile file) {
        try {
            List<User> userList = EasyExcel.read(file.getInputStream(), User.class, new UserDataListener()).sheet().doReadSync();
            // 处理导入的数据,可以保存到数据库或进行其他操作
            // ...

            return "导入成功";
        } catch (Exception e) {
            e.printStackTrace();
            return "导入失败:" + e.getMessage();
        }
    }
}

在上面的例子中,UserDataListener是一个实现了AnalysisEventListener接口的监听器,用于监听Excel数据的读取过程。

public class UserDataListener extends AnalysisEventListener<User> {

    private List<User> userList = new ArrayList<>();

    @Override
    public void invoke(User user, AnalysisContext context) {
        userList.add(user);
    }

    @Override
    public void doAfterAllAnalysed(AnalysisContext context) {
        // 数据读取完毕后的操作,可以在这里对数据进行进一步处理
        // ...
    }
}

3. 编写前端页面

在前端页面中,我们需要一个文件上传的表单,例如使用HTML的<form>标签和<input type="file">标签:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Excel导入</title>
</head>
<body>

<form action="/excel/import" method="post" enctype="multipart/form-data">
    <input type="file" name="file" accept=".xlsx, .xls">
    <button type="submit">导入Excel</button>
</form>

</body>
</html>

4. 启动SpringBoot应用

通过以上步骤,我们已经完成了Excel导入功能的开发。启动SpringBoot应用,并访问前端页面,选择要导入的Excel文件,点击导入按钮即可完成数据导入。

三、导出Excel数据

下面,我们将介绍如何使用SpringBoot整合EasyExcel来实现复杂Excel表格的导出功能。

1. 编写导出的Controller

@RestController
@RequestMapping("/excel")
public class ExcelController {

    @Autowired
    private ExcelService excelService;

    @GetMapping("/export")
    public void exportExcel(HttpServletResponse response) {
        try {
            excelService.exportExcel(response);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

2. 编写导出的Service

@Service
public class ExcelService {

    public void exportExcel(HttpServletResponse response) throws IOException {
        // 查询数据库或其他数据源获取导出的数据
        List<User> userList = getUserList();

        // 设置响应头
        response.setContentType("application/vnd.ms-excel");
        response.setCharacterEncoding("utf-8");
        response.setHeader("Content-disposition", "attachment;filename=user.xlsx");

        // 导出Excel
       

 ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream(), User.class).build();
        WriteSheet writeSheet = EasyExcel.writerSheet("用户信息").build();
        excelWriter.write(userList, writeSheet);
        excelWriter.finish();
    }

    private List<User> getUserList() {
        // 模拟从数据库中获取用户数据
        List<User> userList = new ArrayList<>();
        userList.add(new User("张三", 25, "北京市朝阳区", "13888888888"));
        userList.add(new User("李四", 30, "上海市浦东区", "13999999999"));
        userList.add(new User("王五", 28, "广州市天河区", "13666666666"));
        return userList;
    }
}

3. 编写前端页面

在前端页面中,我们可以提供一个导出按钮,通过点击按钮触发导出操作:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Excel导出</title>
</head>
<body>

<a href="/excel/export" target="_blank">导出Excel</a>

</body>
</html>

4. 启动SpringBoot应用

通过以上步骤,我们已经完成了Excel导出功能的开发。启动SpringBoot应用,并访问前端页面,点击导出按钮即可下载导出的Excel文件。

拓展

  1. 异常处理:在实际项目中,需要对异常进行合理的处理。可以通过在Controller中捕获异常,并返回友好的提示信息,提高用户体验。

  2. 模板导出:有时候,我们需要按照一定的模板导出Excel文件,EasyExcel也提供了相关的API来支持模板导出。

  3. 大数据量处理:当需要处理大量数据时,可以考虑使用EasyExcel的分段读取和分段写入功能,以减轻内存压力。

总结

通过本文的介绍,我们学习了如何使用SpringBoot整合EasyExcel来实现复杂Excel表格的导入和导出功能。EasyExcel提供了简洁易用的API,使得开发者可以轻松地完成Excel操作,提高了开发效率。在实际项目中,可以根据需求进一步定制导入导出的逻辑,满足不同场景的要求。希望本文对你在Excel操作方面的开发提供了帮助。


🧸结尾 ❤️ 感谢您的支持和鼓励! 😊🙏
📜您可能感兴趣的内容:

  • 【Java面试技巧】Java面试八股文 - 掌握面试必备知识(目录篇)
  • 【Java学习路线】2023年完整版Java学习路线图
  • 【AIGC人工智能】Chat GPT是什么,初学者怎么使用Chat GPT,需要注意些什么
  • 【Java实战项目】SpringBoot+SSM实战:打造高效便捷的企业级Java外卖订购系统
  • 【数据结构学习】从零起步:学习数据结构的完整路径

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/198232.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

uniapp使用vue3和ts开发小程序获取用户城市定位

这个组件的功能&#xff1a;可以重新定位获取到用户的具体位置&#xff0c;这个是通过getLocation这个api和高德地图的api获取到的&#xff0c;getLocation这个api需要在微信公众平台后台>开发管理> 接口管理里面申请才能使用的&#xff0c;不然无法使用哦&#xff0c;这…

Python自动化办公:PDF文件的加密与解密

在本篇文章中&#xff0c;我们将介绍如何使用PyPDF2库对PDF文件进行加密和解密操作。 包括如何给PDF文件添加密码&#xff0c;以及如何从受密码保护的PDF文件中删除密码。 注&#xff1a;删除密码的操作&#xff0c;前提是需要知道密码哦 1. 安装PyPDF2库 首先&#xff0c;…

STM32之模数转换器ADC

目录 1、ADC介绍 1.什么是ADC&#xff1f; ADC的全称是Analog-to-Digital Converter&#xff0c;指模拟/数字转换器 2.ADC的性能指标 3.ADC特性 12位分辨率 4.ADC通道 5.ADC转换顺序 6.ADC触发方式 7.ADC转化时间 8.ADC转化模式 9.模拟看门狗 实验&#xff1a;使用ADC读…

如何集成一个TypeScript开发环境?

首先要安装个node.js。Node.js (nodejs.org) 然后我们随便建一个文件夹&#xff0c;并且打开它运行到终端 然后再运行命令&#xff1a; npm install typescript -g 成功后 尝试使用 tsc -v 查看版本 接下来再使用命令&#xff1a; tsc --init 我们在.ts文件中尝试输出一些…

Docker智驾开发环境搭建

文章目录 背景1. 什么是容器?2. 什么是Docker?2.1 Docker架构3. 为什么要使用Docker?3.1 Docker容器虚拟化的好处3.2 Docker在开发和运维中的优势4. Docker容器与传统虚拟化的区别4.1 区别4.2 Docker的优势5. Docker的核心概念6. Docker在嵌入式开发中的应用7. docker实践参…

python炒股自动化(1),量化交易接口区别

要实现股票量化程序化自动化&#xff0c;就需要券商提供的API接口&#xff0c;重点是个人账户小散户可以申请开通&#xff0c;上手要简单&#xff0c;接口要足够全面&#xff0c;功能完善&#xff0c;首先&#xff0c;第一步就是要找对渠道和方法&#xff0c;这里我们不讨论量化…

Fuzz进阶教学——人工智能在模糊测试中的应用

【参考文献】白海波.人工智能技术在模糊测试中的应用[J].数字技术与应用,2023,41(08):16-18.DOI:10.19695/j.cnki.cn12-1369.2023.08.05. 目录 摘要 一、模糊测试简介 1、原理 2、工作流程 3、分类 4、应用领域 二、人工智能在模糊测试中的应用 1、人工智能技术 2、人…

AIGC系列之:GroundingDNIO原理解读及在Stable Diffusion中使用

目录 1.前言 2.方法概括 3.算法介绍 3.1图像-文本特征提取与增强 3.2基于文本引导的目标检测 3.3跨模态解码器 3.4文本prompt特征提取 4.应用场景 4.1结合生成模型完成目标区域生成 4.2结合stable diffusion完成图像编辑 4.3结合分割模型完成任意图像分割 1.前言 …

前馈式神经网络与反馈式神经网络的区别,联系,各自的应用范围和场景!!!

文章目录 前言一、前馈式神经网络是什么&#xff1f;二、前馈式神经网络包括&#xff1a;三、反馈式神经网络是什么&#xff1f;四、反馈式神经网络包括&#xff1a;总结 前言 前馈式神经网络和反馈式神经网络是两种主要的神经网络架构&#xff0c;它们在网络结构和应用场景上…

Python接口自动化测试 ---Allure报告使用详解

这一节主要是记录allure的内容以及用法&#xff0c;怎么让他生成一个完整的想要的报告。 allure生成的报告和其他五花八门的报告对比了一下&#xff0c;它的可读性是最好、最直观的。这不仅仅是我想要的效果&#xff0c;也是很多小伙伴想要的结果&#xff0c;毕竟这是给领导看…

使用Prometheus监控Synology(群辉)

1、简介 在现代的IT环境中&#xff0c;对于服务器和网络设备的监控是至关重要的。Synology&#xff08;群辉&#xff09;作为一种流行的网络存储解决方案&#xff0c;为用户提供了高性能和可靠的存储服务。然而&#xff0c;了解Synology设备的运行状况和性能指标对于确保其正常…

有权图的最短路径算法

目录 单源最短路径问题 Dijkstra算法 原理 ​ 获得最短路径长度的Dijkstra代码实现 时间复杂度 算法优化 优先队列优化后的代码实现 时间复杂度 可以具体获得最短路径的Dijkstra代码实现 Bellman-Ford算法 原理 代码实现 Floyed算法 原理 代码实现 单源最短路…

TLS、对称/非对称加密、CA认证

1. SSL与TLS SSL/TLS是一种密码通信框架&#xff0c;他是世界上使用最广泛的密码通信方法。SSL/TLS综合运用了密码学中的对称密码&#xff0c;消息认证码&#xff0c;公钥密码&#xff0c;数字签名&#xff0c;伪随机数生成器等&#xff0c;可以说是密码学中的集大成者。 TLS…

flask web开发学习之初识flask(一)

一、概念 flask是一个使用python编写的轻量级web框架&#xff0c;作者为Armin Ronacher&#xff08;中文名&#xff1a;阿尔敏罗纳彻&#xff09;&#xff0c;它广泛被应用于web开发和API。flask提供了简洁而灵活地方式来构建web应用&#xff0c;它不会强加太多约束&#xff0…

父进程隐藏——ConsoleApplication903项目

首先我发现用calc来做进程隐藏实验是失败的&#xff0c;父进程一直都是svhost.exe 那么我用我自己生成的cs木马beacon903.exe试试 试试explorer.exe 再试试cmd.exe 可以看到成功变成cmd.exe 可以看到我们可以通过这种方式虚假父进程 以上我们是直接获得的pid&#xff0c;那…

Opencv | 直方图均衡化

import cv2 #opencv 读取的格式是BGR import numpy as np import matplotlib.pyplot as plt #Matplotlib是RGB %matplotlib inline def cv_show(img,name):cv2.imshow(name,img)cv2.waitKey()cv2.destroyAllWindows() cv2.calcHist(images,channels,mask,histSize,ranges) - …

Swift下如何使用#if条件编译

一、OC使用条件编译 OC中可以使用宏定义&#xff0c;再使用条件编译 #define USER_CUSTOM使用 #if USER_CUSTOM //其他代码 #endif二、Swift使用条件编译 Swift 不像ObjectC一样&#xff0c;通过定义一个变量&#xff0c;然后使用**#if #endif** 方法。swift需要设置一下才能…

群晖NAS配置之自有服务器frp实现内网穿透

什么是frp frp 是一个专注于内网穿透的高性能的反向代理应用&#xff0c;支持 TCP、UDP、HTTP、HTTPS 等多种协议&#xff0c;且支持 P2P 通信。可以将内网服务以安全、便捷的方式通过具有公网 IP 节点的中转暴露到公网。今天跟大家分享一下frp实现内网穿透 为什么使用 frp &a…

实战Flask+BootstrapTable最简动态表头及数据(ajax方法)

话不多说,有图有源码 1.实现原理:通过ajax从后端获取表头及数据 前端页面内容 <!DOCTYPE html> {% from "common/_macro.html" import static %} <html> <meta charset"utf-8"> <head> <!-- 引入bootstrap样式 --> <l…

解读向量数据库

不论是RAG&#xff0c;还是Agent&#xff0c;几乎每个LLM 驱动的应用程序都可能会用到向量数据库。那么&#xff0c;向量数据库是什么&#xff1f;与传统数据库有何不同&#xff1f; 又如何选择向量数据库呢&#xff1f; 本文是老码农关于向量数据库的学习笔记。 1. 什么是向量…