SpringBoot开发——整合Apache POI轻松生成精美的Excel报表
文章目录
- 1、准备工作
- 2、编写代码
- 2.1 创建实体类
- 2.2 创建Excel生成服务
- 2.3 创建控制器
- 3、测试
- 4、结论
在许多企业应用程序中,导出数据到Excel表格是一项常见的需求。Spring Boot提供了许多库来简化这个过程,其中包括Apache POI和Spring Boot的相关模块。在本文中,我们将使用这些工具来生成一个复杂的Excel表格。
1、准备工作
首先,确保你的项目中已经引入了Spring Boot及相关依赖。在pom.xml中添加以下依赖:
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>4.1.2</version>
</dependency>
<dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>4.1.2</version>
</dependency>
2、编写代码
2.1 创建实体类
首先,我们创建一个代表数据的实体类,例如Employee:
public class Employee {private Long id;private String name;private String department;private double salary;// 省略构造函数和getter/setter方法
}
2.2 创建Excel生成服务
接下来,我们创建一个服务类来生成Excel表格。这个服务类将使用Apache POI库来操作Excel文件。
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.stereotype.Service;import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.List;@Service
public class ExcelService {public byte[] generateExcel(List<Employee> employees) throws IOException {try (Workbook workbook = new XSSFWorkbook()) {Sheet sheet = workbook.createSheet("Employee Data");// 创建表头Row headerRow = sheet.createRow(0);String[] columns = {"ID", "Name", "Department", "Salary"};for (int i = 0; i < columns.length; i++) {Cell cell = headerRow.createCell(i);cell.setCellValue(columns[i]);}// 填充数据int rowNum = 1;for (Employee employee : employees) {Row row = sheet.createRow(rowNum++);row.createCell(0).setCellValue(employee.getId());row.createCell(1).setCellValue(employee.getName());row.createCell(2).setCellValue(employee.getDepartment());row.createCell(3).setCellValue(employee.getSalary());}// 将工作簿转换为字节数组ByteArrayOutputStream outputStream = new ByteArrayOutputStream();workbook.write(outputStream);return outputStream.toByteArray();}}
}
2.3 创建控制器
最后,我们创建一个控制器来处理HTTP请求,并调用Excel生成服务来生成Excel文件。
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;import java.io.IOException;
import java.util.ArrayList;
import java.util.List;@RestController
public class ExcelController {@Autowiredprivate ExcelService excelService;@GetMapping("/export")public ResponseEntity<byte[]> exportExcel() throws IOException {List<Employee> employees = getEmployees(); // 假设这里是从数据库或其他数据源获取数据的方法byte[] excelBytes = excelService.generateExcel(employees);HttpHeaders headers = new HttpHeaders();headers.setContentType(MediaType.parseMediaType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"));headers.setContentDispositionFormData("attachment", "employees.xlsx");return new ResponseEntity<>(excelBytes, headers, HttpStatus.OK);}// 辅助方法,用于生成模拟数据private List<Employee> getEmployees() {List<Employee> employees = new ArrayList<>();employees.add(new Employee(1L, "John Doe", "IT", 5000));employees.add(new Employee(2L, "Jane Smith", "HR", 6000));// 添加更多员工...return employees;}
}
3、测试
现在,启动Spring Boot应用程序,并访问/export端点,将会下载一个名为employees.xlsx的Excel文件,其中包含了我们模拟的员工数据。
4、结论
通过本文,我们学习了如何使用Spring Boot和Apache POI来生成复杂的Excel表格。我们创建了一个服务类来处理Excel生成逻辑,并创建了一个控制器来处理HTTP请求,并提供生成的Excel文件的下载链接。这个例子可以作为在实际项目中导出数据到Excel的起点,你可以根据自己的需求进行扩展和定制。
相关文章:
SpringBoot开发——整合Apache POI轻松生成精美的Excel报表
文章目录 1、准备工作2、编写代码2.1 创建实体类2.2 创建Excel生成服务2.3 创建控制器 3、测试4、结论 在许多企业应用程序中,导出数据到Excel表格是一项常见的需求。Spring Boot提供了许多库来简化这个过程,其中包括Apache POI和Spring Boot的相关模块。…...
海信智能电视的使用心得
买了海信智能电视(型号:32E2F)有一段时间了,要使用这个智能电视还真能考验你的智商。海信电视有很多优点,它的屏幕比较靓丽,色彩好看,遥控器不用对着屏幕就能操作。但也有不少缺点。 1. 海信智能电视会强迫自动更新操作系统&…...
【YashanDB知识库】客户端字符集与数据库字符集兼容问题
本文转自YashanDB官网,具体内容请见https://www.yashandb.com/newsinfo/7352675.html?templateId1718516 问题现象 客户端yasql配置字符集为GBK,服务端yasdb配置字符集为UTF8,之后执行语句: 会发现: 期望是两个都…...
Session和Cookie是什么?有什么区别?分布式Session问题又是什么?
Session和Cookie是什么?有什么区别?分布式Session问题又是什么? Cookie:是服务器发送到浏览器并保存在本地的数据。在浏览器下一次向同一服务器再次发送请求时,将Cookie也发送给服务器,并以此来判定这个请…...
项目实战:Qt+OSG爆破动力学仿真三维引擎测试工具v1.1.0(加载.K模型,子弹轨迹模拟动画,支持windows、linux、国产麒麟系统)
若该文为原创文章,转载请注明出处 本文章博客地址:https://hpzwl.blog.csdn.net/article/details/142454993 长沙红胖子Qt(长沙创微智科)博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV、Op…...
CSS开发全攻略
目录 一、CSS基础入门(一)CSS概述1.CSS的定义与作用2.CSS的历史与发展3.CSS的核心概念(1)选择器(Selector)(2)声明(Declaration)(3)规…...
OpenCV运动分析和目标跟踪(3)计算图像序列的加权平均值函数accumulateWeighted()的使用
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 更新一个运行平均值。 该函数计算输入图像 src 和累积器 dst 的加权和,使得 dst 成为帧序列的运行平均值: dst ( x , y…...
vue3中echarts柱状图横轴文字太多放不下怎么解决
问题:在做数据展示的时候,使用的是echarts,遇到了个问题,就是数据过多,但是设置的x轴的文字名称又太长,往往左边第一个或右边最后一个的名称展示不全,只有半个。 从网上找到了几种办法ÿ…...
Web 开发安全与最佳实践:MVC、会话管理与常见攻击防御
1. 引言 随着 Web 应用的普及,安全问题变得尤为重要。从小型个人网站到复杂的企业级系统,安全漏洞可能导致数据泄露、服务中断甚至经济损失。因此,在 Web 开发中,采用良好的架构设计、会话管理和安全防护机制至关重要。本文将探讨…...
Segformer双显卡推理速度测试
1、4080单显卡和双显卡同步并行推理平均耗时分别为360ms、600ms;双显卡速度明显比单显卡的速度快 2、两个相机间隔500ms的并行推理耗时,单双显卡推理平均耗时为340ms 3、4080双显卡和4070双显卡同步并行推理平均耗时分别为360ms、380ms;4080比4070的速度快20ms...
使用在线电子模拟器 Wokwi 运行 ESP32 示例(Arduino IDE、ESP32C3)
文章目录 Wokwi安装客户端(Mac/Linux)创建 Token ESP32C3 示例demo.ino创建模拟器运行模拟器 Wokwi Wokwi 是一款在线电子模拟器。您可以使用它来模拟 Arduino、ESP32、STM32 以及许多其他流行的主板、部件和传感器。 Github: https://gith…...
vue3+element-plus icons图标选择组件封装
一、最终效果 二、参数配置 1、代码示例 <t-select-icon v-model"selectVlaue" />2、配置参数(Attributes)继承 el-input Attributes 参数说明类型默认值v-model绑定值string-prefixIcon输入框前缀iconstringSearchisShowSearch是否显…...
Spring validation校验框架
第1步:导入依赖 <!-- 校验框架--> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validation</artifactId> </dependency> 第2步:为需要校验的参数&…...
UBUNTU20.04安装CH384串口卡驱动
继续上文:统信UOS安装CH384串口卡驱动-CSDN博客 统信UOS系统成功安装CH384串口驱动后,继续在ubuntu20.04下安装驱动,发现一直报错,原因是内核驱动不一致。 解决办法: 1. 下载最新的驱动。CH35XCH384驱动源文件资源-C…...
JWT(JSON Web Tokens) 详细介绍
文章目录 什么是JWT?JWT的组成部分JWT的使用场景优点缺点 Java中如何实现JWT编解码引入JJWT依赖编码JWT解码JWT使用示例 什么是JWT? JWT(JSON Web Tokens)是一种用于双方之间安全传输信息的简洁的、URL安全的令牌标准。JWT可以传递信息,这…...
数据结构练习题————(二叉树)——考前必备合集!
今天在牛客网和力扣上带来了数据结构中二叉树的进阶练习题 1.二叉搜索树与双向链表———二叉搜索树与双向链表_牛客题霸_牛客网 (nowcoder.com) 2.二叉树遍历————二叉树遍历_牛客题霸_牛客网 (nowcoder.com) 3.二叉树的层序遍历————102. 二叉树的层序遍历 - 力扣&am…...
一天认识一个硬件之鼠标
今天来给大家分享一下鼠标的相关内容,先来分享一下什么是鼠标: 鼠标是一种计算机输入设备,用于控制屏幕上的光标移动和进行各种操作。它最早由道格拉斯恩格尔巴特在1963年发明,并在1968年12月9日制成了世界上第一个鼠标。介绍完了…...
Django 请求配置
http请求配置 请求流程 urls.py配置 from first_app import viewsurlpatterns [path(admin/, admin.site.urls),path(test/,views.first_test), ] views.py配置 from django.shortcuts import render,HttpResponse# Create your views here. def first_test(request):prin…...
轮播图组件更加完善版
依然是基于微博语法开发,使用时请注意标签替换 优化了滑动的效果,默认的索引,滑动距离等, 使用方式和以前一样没变,主要修改了组件内部 <template><wbx-view class"" style"width: 100vw;heig…...
cpu路、核、线程
路:主板插口实际插入的 CPU 个数,也可以理解为主板上支持的CPU的数量。每个CPU插槽可以插入一个物理处理器芯片。例如,一台服务器可能有2路或4路插槽,这意味着它最多可以安装2个或4个物理处理器。 核:单块 CPU 上面能…...
FPGA设计中的组合逻辑环:为什么你的Verilog代码会引发警告?
FPGA设计中的组合逻辑环:为什么你的Verilog代码会引发警告? 在数字电路设计的浩瀚海洋中,组合逻辑环(Combinational Loop)就像是一个潜伏的暗礁,看似无害却可能让你的整个设计"触礁沉没"。作为一…...
ChatGLM3-6B-128K在客服系统中的应用:智能回复生成
ChatGLM3-6B-128K在客服系统中的应用:智能回复生成 1. 引言 想象一下,一个繁忙的电商客服中心,每天要处理成千上万的客户咨询。传统的人工客服需要不断重复回答相似的问题,不仅效率低下,还容易因为疲劳而出错。现在&…...
XUnity.AutoTranslator游戏翻译解决方案:从入门到精通的实战指南
XUnity.AutoTranslator游戏翻译解决方案:从入门到精通的实战指南 【免费下载链接】XUnity.AutoTranslator 项目地址: https://gitcode.com/gh_mirrors/xu/XUnity.AutoTranslator 你是否曾因语言障碍错失优秀的Unity游戏体验?面对满屏外文界面感到…...
【调优】OpenClaw从零开始群聊安全配置
未来已来,只需一句指令,养龙虾专栏导航,持续更新ing… 想象一下,你正在指挥一场精密的交响乐,每一个乐器(群组)都需要在正确的时间发出声音,既不能杂乱无章,也不能产生噪音。 对群组最核心的思考是:如何在“智能”与“安全”之间找到完美的平衡点? 答案就是“分层治…...
Dify工作流集成StructBERT:构建自定义文本智能处理应用
Dify工作流集成StructBERT:构建自定义文本智能处理应用 最近在做一个智能客服系统的升级项目,客户那边提了个挺实际的需求:每天有大量工单进来,希望系统能先自动判断一下问题类型,比如是“账号问题”、“支付故障”还…...
终极LrcHelper歌词下载指南:5分钟学会网易云音乐双语歌词获取与设备适配
终极LrcHelper歌词下载指南:5分钟学会网易云音乐双语歌词获取与设备适配 【免费下载链接】LrcHelper 从网易云音乐下载带翻译的歌词 Walkman 适配 项目地址: https://gitcode.com/gh_mirrors/lr/LrcHelper 还在为找不到高质量双语歌词而烦恼吗?想…...
手把手教学:用SiameseAOE从海量文本中提取“属性-观点”对
手把手教学:用SiameseAOE从海量文本中提取"属性-观点"对 1. 为什么需要属性观点抽取? 在日常工作中,我们经常遇到这样的场景:面对成千上万条用户评论、社交媒体反馈或调查问卷,如何快速找出有价值的信息&a…...
避坑指南:vsftpd服务重启后仍报530?检查这5个隐藏配置项
避坑指南:vsftpd服务重启后仍报530?检查这5个隐藏配置项 当你已经按照常规流程检查了vsftpd服务状态、用户列表和基础配置文件,却依然遭遇"530 Permission denied"的顽固错误时,问题往往隐藏在那些容易被忽略的配置细节…...
QT实战:用QScrollArea+QListWidget复刻迅雷设置界面(附完整源码)
QT实战:用QScrollAreaQListWidget复刻迅雷设置界面(附完整源码) 在桌面应用开发中,设置界面的设计往往考验着开发者对布局和交互逻辑的掌控能力。迅雷作为一款经典的下载工具,其设置界面以清晰的导航结构和流畅的滚动体…...
智能预处理预览功能详解:Anything to RealCharacters 2.5D引擎稳定性保障机制
智能预处理预览功能详解:Anything to RealCharacters 2.5D引擎稳定性保障机制 1. 项目概述 Anything to RealCharacters 2.5D转真人引擎是一款专为RTX 4090显卡优化的图像转换系统,能够将卡通、二次元、2.5D风格的图像高质量转换为写实真人照片。该系统…...
