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

news2024/11/23 18:50:05

文章目录


在这里插入图片描述

🎉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外卖订购系统
  • 【数据结构学习】从零起步:学习数据结构的完整路径

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

mysql 性能排查

mysql 下常见遇到的问题有&#xff0c;mysql连接池耗尽&#xff0c;死锁、慢查、未提交的事务。等等我们可能需要看&#xff1b;我们想要查看的可能有 1.当前连接池连接了哪些客户端&#xff0c;进行了哪些操作 2.当前造成死锁的语句有哪些&#xff0c;是哪个客户端上的&#x…

2023网络安全产业图谱

1. 前言 2023年7月10日&#xff0c;嘶吼安全产业研究院联合国家网络安全产业园区&#xff08;通州园&#xff09;正式发布《嘶吼2023网络安全产业图谱》。 嘶吼安全产业研究院根据当前网络安全发展规划与趋势发布《嘶吼2023网络安全产业图谱》调研&#xff0c;旨在进一步了解…

2020年6月16日 Go生态洞察:泛型的下一步

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…

选择跨网数据摆渡系统时,你最关注的功能是哪些?

为什么要选择跨网数据摆渡系统呢&#xff1f;因为做了网络隔离后&#xff0c;要有数据交互。那为什么要做网络隔离呢&#xff1f;主要还是安全方面的考虑&#xff0c;一般有以下几个原因&#xff1a; 1、数据安全保护&#xff1a;对于一些重要数据&#xff0c;比如代码数据、隐…

leetCode 39.组合总和 + 回溯算法 + 剪枝 + 图解 + 笔记

39. 组合总和 - 力扣&#xff08;LeetCode&#xff09; 给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target &#xff0c;找出 candidates 中可以使数字和为目标数 target 的 所有 不同组合 &#xff0c;并以列表形式返回。你可以按 任意顺序 返回这些组合 can…

IDEA 配置 gradle6.8.3 解决导入gradle项目下载太慢问题

由于平时用的是springboot 2.7 这里下载gradle-6.8.3 Gradle官网地址&#xff1a;https://services.gradle.org/distributions/ 1.下载gradle后&#xff0c;配置环境变量 GRADLE_HOME {gradle 文件路径} GRADLE_USER_HOME {jar下载路径&#xff0c;可以放maven jar保存路径…

RabbitMQ高级特性2 、TTL、死信队列和延迟队列

MQ高级特性 1.削峰 设置 消费者 测试 添加多条消息 拉取消息 每隔20秒拉取一次 一次拉取五条 然后在20秒内一条一条消费 TTL Time To Live&#xff08;存活时间/过期时间&#xff09;。 当消息到达存活时间后&#xff0c;还没有被消费&#xff0c;会被自动清除。 RabbitMQ…

浏览器触发下载Excel文件-Java实现

目录 1:引入maven 2:代码实现 3.导出通讯录信息到Excel文件 4.生成并下载Excel文件部分解释 1:引入maven 添加依赖:首先,在你的项目中添加EasyExcel库的依赖。你可以在项目的构建文件(如Maven的pom.xml)中添加以下依赖项:<dependency><groupId>com.alib…

医疗影像数据集—CT、X光、骨折、阿尔茨海默病MRI、肺部、肿瘤疾病等图像数据集

最近收集了一大波关于CT、X光等医疗方面的数据集包含骨折、阿尔茨海默病MRI、肺部疾病等类型的医疗影像数据&#xff0c;废话不多说&#xff0c;给大家逐一介绍&#xff01;&#xff01; 1、彩色预处理阿尔茨海默病MRI(磁共振成像)图像数据集 彩色预处理阿尔茨海默病MRI(磁共…

平凯星辰携手教育部教育管理信息中心,助力普惠教育数字化

近日&#xff0c;企业级开源分布式数据库厂商平凯星辰与教育部教育管理信息中心达成合作&#xff0c;TiDB 分布式数据库为全国中小学管理服务平台提供全栈服务。双方将携手深入探索领先的数据库技术在教育行业的新场景与新应用&#xff0c;既夯实教育数字化底座&#xff0c;助力…

“抓机遇,促发展”2024亚洲国际人工智能展览会(世亚智博会)

随着人工智能技术的飞速发展&#xff0c;我们正在见证一个全新的时代。2024年即将到来&#xff0c;这一年是人工智能创新将重塑传统界限的一年。从全球领先的科技大国到各类企业&#xff0c;人工智能技术正在以前所未有的速度融入我们的日常生活&#xff0c;推动行业走向未来&a…

34 - 记一次线上SQL死锁事故:如何避免死锁?

之前我参与过一个项目&#xff0c;在项目初期&#xff0c;我们是没有将读写表分离的&#xff0c;而是基于一个主库完成读写操作。在业务量逐渐增大的时候&#xff0c;我们偶尔会收到系统的异常报警信息&#xff0c;DBA 通知我们数据库出现了死锁异常。 按理说业务开始是比较简…

好用的json处理工具He3 JSON

官网地址&#xff1a;https://he3app.com/zh/ json格式化 https://portal.he3app.com/home/extension/json-to-pretty 其他 https://portal.he3app.com/home/category

笔记-PC端wireshark采集FPGA数据的操作

wireshark采集FPGA的数据 目录 一、准备工作二、操作步骤 一、准备工作 1、软件&#xff1a;wireshark 2、平台&#xff1a;PC&#xff08;本人是win11&#xff09;、带有以太网功能的zynq平台 3、网线: 用网线连接zynq板子和PC的以太口端口 二、操作步骤 1、打开任务管理器…

【算法】滑动窗口题单——1.定长滑动窗口⭐

文章目录 1456. 定长子串中元音的最大数目2269. 找到一个数字的 K 美丽值1984. 学生分数的最小差值&#xff08;排序&#xff09;643. 子数组最大平均数 I1343. 大小为 K 且平均值大于等于阈值的子数组数目2090. 半径为 k 的子数组平均值2379. 得到 K 个黑块的最少涂色次数1052…

【问题系列】消费者与MQ连接断开问题解决方案(一)

1. 问题描述 当使用RabbitMQ作为中间件&#xff0c;而消费者为服务时&#xff0c;可能会出现以下情况&#xff1a;在长时间没有消息传递后&#xff0c;消费者与RabbitMQ之间出现连接断开&#xff0c;导致无法处理新消息。解决这一问题的方法是重启Python消费者服务&#xff0c;…

okhttp系列-拦截器的执行顺序

1.将拦截器添加到ArrayList final class RealCall implements Call {Response getResponseWithInterceptorChain() throws IOException {//将Interceptor添加到ArrayListList<Interceptor> interceptors new ArrayList<>();interceptors.addAll(client.intercept…

Android控件全解手册 - 任意View缩放平移工具-源码

Unity3D特效百例案例项目实战源码Android-Unity实战问题汇总游戏脚本-辅助自动化Android控件全解手册再战Android系列Scratch编程案例软考全系列Unity3D学习专栏蓝桥系列ChatGPT和AIGC &#x1f449;关于作者 专注于Android/Unity和各种游戏开发技巧&#xff0c;以及各种资源分…

数学建模-基于BL回归模型和决策树模型对早产危险因素的探究和预测

整体求解过程概述(摘要) 近年来&#xff0c;全球早产率总体呈上升趋势&#xff0c;在我国&#xff0c;早产儿以每年 20 万的数目逐年递增&#xff0c;目前早产已经成为重大的公共卫生问题之一。据研究,早产是威胁胎儿及新生儿健康的重要因素&#xff0c;可能会造成死亡或智力体…

每日一题:LeetCode-202.面试题 08.06. 汉诺塔问题

每日一题系列&#xff08;day 07&#xff09; 前言&#xff1a; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f50e…