springboot使用EasyExcel导出数据

springboot使用EasyExcel导出数据

简介:本文主要描述使用EasyExcel导出数据的简单流程,事实上企业需求一般都比较简单,就是表单数据输出到Excel即可,如果数据量大的话,为了避免占用内存过高或者OOM,使用多次读数据多次写入的方法,下面就简单介绍下两种情景的实现。

1. 导入依赖

<!-- Easy Excel -->
<dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>3.2.1</version>
</dependency>

2. 建立对应实体类

例如我要导出的Excel数据格式为

image-20231214213222344.png
首先创建实体类:

@Getter
@Setter
@ToString
public class UserInfoForExcel {@ExcelProperty("ID")		// 标注字段对应Excel列行头private String userId;@ExcelProperty("账号")private String account;@ExcelProperty("邮箱")private String email;@ExcelProperty("昵称")private String nickname;@ExcelProperty("年龄")private Integer age;@ExcelProperty("生日")@DateTimeFormat("yyyy-MM-dd")private Date birthday;
}

3. 创建处理方法

假如流程为 前端发送get请求,后端controller接收提交给service处理,service从dao中获取数据后生成excel表,然后将excel的路径返回给前端(一般需求肯定是URL或者URI,此处只做演示,不做URL处理,直接返回路径)

service处理方法代码如下

    /*** 从数据库读取所有数据,使用EasyExcel生成表格* @return*/public String handleExcelOutput() {String fileName = "D://data/" + "user_info_" + System.currentTimeMillis() + ".xlsx";UserInfoData userInfoData = new UserInfoData();     // 从数据库获取数据的daoEasyExcel.write(fileName, UserInfoForExcel.class).sheet("模板").doWrite(userInfoData.getUserInfoList());   // 写Excelreturn fileName;}

下面是模拟数据库获取数据操作,可以忽略

@Getter
@Setter
@ToString
public class UserInfoData {/*** 模拟数据库获取数据*/public List<UserInfoForExcel> getUserInfoList() {List<UserInfoForExcel> list = new ArrayList<>();for (int i = 1; i < 18; i++){UserInfoForExcel userInfoForExcel = new UserInfoForExcel();userInfoForExcel.setUserId("00"+i);userInfoForExcel.setAge(16+i);userInfoForExcel.setAccount("account"+i);userInfoForExcel.setNickname("nick "+ i);userInfoForExcel.setEmail("123"+i+"@123.com");try {userInfoForExcel.setBirthday(new SimpleDateFormat("yyyy-MM-dd").parse("1997-06-1"+i));} catch (ParseException e) {// 测试demo,不做处理throw new RuntimeException(e);}list.add(userInfoForExcel);}System.out.println(list);return list;}
}

4. 测试接口

@RestController
@RequestMapping("userinfo")
public class UserInfoController {@AutowiredUserService userService;@GetMapping("output")public String handleExcelOutput() throws ParseException {String s = userService.handleExcelOutput();return s;}
}

5. 测试结果

在设定的文件路径中可以看到生成的Excel表

image-20231214214943113.png

6. 分批写到Excel

上面的例子是将数据一次性读取后写到excel,占用内存过大,可以分多次写入,service方法如下

    /*** 从数据库分页读取数据,使用EasyExcel,分多次写入Excel* @return*/public String handleExcelOutputOnPage() {String fileName = "D://data/" + "user_info_" + System.currentTimeMillis() + ".xlsx";UserInfoData userInfoData = new UserInfoData();     // 从数据库获取数据的dao// 这里 需要指定写用哪个class去写try (ExcelWriter excelWriter = EasyExcel.write(fileName, UserInfoForExcel.class).build()) {WriteSheet writeSheet = EasyExcel.writerSheet("模板").build();// 去调用写入,这里我调用了五次,实际使用时根据数据库分页的总的页数来// 例如数据库中数据位1000条,每次写入100条,则i为Math.ceil(1000/100),向上取整for (int i = 0; i < 5; i++) {// 分页去数据库查询数据 这里可以去数据库查询每一页的数据// 通过设置limit值获取不同页数据List<UserInfoForExcel> userInfoList = userInfoData.getUserInfoList();excelWriter.write(userInfoList, writeSheet);}}return fileName;}

7. 最后

以上就是全文内容,最后还是提醒,这只是最简单的需求和实现方法,事实上EasyExcel还能实现其他有趣的功能,建议去官网看文档

官网地址:https://easyexcel.opensource.alibaba.com/

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

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

相关文章

Android Studio好用的插件推荐

目录 一、插件推荐 二、如何下载 1.点击File—>Settings ​2.点击Plugins然后进行搜索下载 三、Android Studio 模板 一、插件推荐 这个插件可以为您自动生成Parcelable代码。Parcelable是一种用于在Android组件之间传递自定义对象的机制&#xff0c;但手动编写Parcela…

[python]用python获取EXCEL文件内容并保存到DBC

目录 关键词平台说明背景所需库实现过程方法1.1.安装相关库2.代码实现 关键词 python、excel、DBC、openpyxl 平台说明 项目Valuepython版本3.6 背景 在搭建自动化测试平台的时候经常会提取DBC文件中的信息并保存为excel或者其他文件格式&#xff0c;用于自动化测试。本文…

Flowable-源码分析-2启动

引擎启动流程如图 // ProcessEngineFactoryBean.getObjectpublic ProcessEngine getObject() throws Exception {// 如果 processEngine 为空if (processEngine null) {// 初始化表达式管理器initializeExpressionManager();// 初始化事务外部管理initializeTransactionExtern…

Linux---用户相关操作

1. 创建用户 命令说明useradd创建(添加)用户 useradd命令选项: 选项说明-m自动创建用户主目录,主目录的名字就是用户名-g指定用户所属的用户组&#xff0c;默认不指定会自动创建一个同名的用户组 创建用户效果图: 查看所有用户信息的文件效果图: 说明: useradd 命令的使用…

嵌入式中的门电路详讲

NOT门电路 NOT(非门)是数字逻辑电路中的一种基本逻辑门,也称为反相器。它执行的是逻辑非操作,即将输入信号取反。NOT门具有一个输入和一个输出。 A输入,B输出,以下是真值表: A B 0 1 1 0 AND门电路 AND(与门)是数字逻辑电路中的一种基本逻辑门,用于执行逻辑与操作。…

【运维笔记】mvware centos挂载共享文件夹

安装mvware-tools 这里用的centos安装 yum install open-vm-tools 设置共享文件夹 依次点击&#xff1a;选项-共享文件夹-总是启用-添加&#xff0c;安装添加向导操作添加自己想共享的文件夹后。成功后即可在文件夹栏看到自己共享的文件夹 挂载文件夹 临时挂载 启动虚拟机&…

Javaweb考前复习冲刺(不断更新版)

Javaweb考前复习冲刺 第一章&#xff1a; JavaWeb 入门 JavaWeb是指&#xff1a;以Java作为后台语言的项目工程。 javaweb项目创建的过程&#xff1a; 首先集成Tomcat服务器环境新建dynamic web project部署工程运行 路由含义&#xff1a; ​ http://localhost:8080/工程…

Leetcode刷题笔记题解(C++):224. 基本计算器

思路&#xff1a; step 1&#xff1a;使用栈辅助处理优先级&#xff0c;默认符号为加号。 step 2&#xff1a;遍历字符串&#xff0c;遇到数字&#xff0c;则将连续的数字字符部分转化为int型数字。 step 3&#xff1a;遇到左括号&#xff0c;则将括号后的部分送入递归&#x…

一个简单的光线追踪渲染器

前言 本文参照自raytracing in one weekend教程&#xff0c;地址为&#xff1a;https://raytracing.github.io/books/RayTracingInOneWeekend.html 什么是光线追踪&#xff1f; 光线追踪模拟现实中的成像原理&#xff0c;通过模拟一条条直线在场景内反射折射&#xff0c;最终…

秋招上岸记录咕咕咕了。

思考了一下&#xff0c;感觉并没有单独写这样一篇博客的必要。 能够写出来的&#xff0c;一些可能会对人有帮助的东西都做进了视频里面&#xff0c;未来会在blbl发布&#xff0c;目前剪辑正在施工中&#xff08;&#xff1f;&#xff09; 另外就是&#xff0c;那个视频里面使…

作为一个的软件测试工程师,想拿到自己想要的薪资,需要具备哪些能力?

如果只是想成为一名低薪的测试工程师&#xff0c;只要掌握功能测试就可以。 但是如果想成为一名高薪的测试工程师&#xff0c;那就要打造你的不可替代性。 可是&#xff0c;你可能会说&#xff1a;“我现在就是个普通职员啊&#xff0c;我就是个普通人&#xff0c;我目前还没有…

前端js实现将异步封装成promise然后用async await转同步

&#xff08;一&#xff09;需求背景&#xff1a; 哈喽 大家好啊&#xff0c;今天遇到一个问题&#xff0c;需要将异步请求转换成同步 &#xff08;二&#xff09;相关代码&#xff1a; function getInfo() {return new Promise((resolve,reject)> {setTimeout(()> {re…

CSS的基本选择器及高级选择器(附详细示例以及效果图)

Hi i,m JinXiang ⭐ 前言 ⭐ 本篇文章主要介绍HTML中CSS的基础选择及高级选择器&#xff08;详解&#xff09;以及部分理论知识 &#x1f349;欢迎点赞 &#x1f44d; 收藏 ⭐留言评论 &#x1f4dd;私信必回哟&#x1f601; &#x1f349;博主收将持续更新学习记录获&#xf…

JVM学习之运行时数据区

运行时数据区 概述 内存 内存是非常重要的系统资源&#xff0c;是硬盘和CPU的中间桥梁&#xff0c;承载着操作系统和应用程序的实时运行。JVM内存布局规定了Java在运行过程中内存申请&#xff0c;分配&#xff0c;管理的策略&#xff0c;保证了JVM高效稳定运行。不同的JVM对于…

STL容器之string(上)

目录 什么是STL string类 string类常见接口 string类的常见构造函数 string类对象的容器操作 string类对象的访问及遍历操作 string类对象的修改操作 拓展 从本期开始&#xff0c;我们将正式学习C中的STL&#xff0c;美国的麦克阿瑟将军说过&#xff1a;“C不能没有STL就…

mipi dsi协议DBI/DPI接口

MIPI dsi协议中的DBI/DPI接口主要用于主机和display设备之间的数据传输&#xff0c;说的更通俗一点就是DSI RX控制器和实际的显示面板之间的接口&#xff1b;dsi 协议spec中对DBI/DPI有描述&#xff1a; DSI协议中对DBI 接口模式命名为command mode operation&#xff0c;对DP…

【物联网】EMQX(二)——docker快速搭建EMQX 和 MQTTX客户端使用

一、前言 在上一篇文章中&#xff0c;小编向大家介绍了物联网必然会用到的消息服务器EMQ&#xff0c;相信大家也对EMQ有了一定的了解&#xff0c;那么接下来&#xff0c;小编从这篇文章正式开始展开对EMQ的学习教程&#xff0c;本章节来记录一下如何对EMQ进行安装。 二、使用…

QT第一步

文章目录 软件下载软件安装QT的程序组新建项目 软件下载 qt下载网址&#xff1a;https://download.qt.io/archive/qt/   关于版本&#xff1a;     我选择的版本是5.14.2&#xff0c;这个版本是最后的二进制安装包的版本&#xff0c;在往后的版本就需要在线安装了。并且5…

单机架构到分布式架构的演变

目录 1.单机架构 2.应用数据分离架构 3.应用服务集群架构 4.读写分离 / 主从分离架构 5.引入缓存 —— 冷热分离架构 6.垂直分库 7.业务拆分 —— 微服务 8.容器化引入——容器编排架构 总结 1.单机架构 初期&#xff0c;我们需要利用我们精干的技术团队&#xff0c;快…

RocketMQ系统性学习-SpringCloud Alibaba集成RocketMQ以及批量发送消息、消息过滤实战

文章目录 批量发送消息消息过滤 批量发送消息 批量发送消息可以减少网络的 IO 开销&#xff0c;让多个消息通过 1 次网络开销就可以发送&#xff0c;提升数据发送的吞吐量 虽然批量发送消息可以减少网络 IO 开销&#xff0c;但是一次也不能发送太多消息 批量消息直接将多个消…