EasyExcel生成多sheet页的excel
一、controller层
@ApiOperation(value = "明细查询导出")
@PostMapping(value = "/SummaryDetailExport")
public void summaryDetailExport(@RequestBody SearchDTO dto, HttpServletResponse response) throws IOException {reportService.deptPackagingSummaryDetailExport(dto, response);
}
二、serviceimpl
@Overridepublic void deptPackagingSummaryDetailExport(SearchDTO dto, HttpServletResponse response) throws IOException {// 这里必须指定需要头,table 会继承sheet的配置,sheet配置了不需要,table 默认也是不需要List<DeptSummaryReq> exportVos = configPackageTaskMapper.DeptPackagingSummary(dto);DecimalFormat df = new DecimalFormat("#.00");response.setContentType("application/vnd.ms-excel;charset=utf-8");response.setCharacterEncoding("utf-8");response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode("科室打包明细查询" + ".xlsx", "UTF-8"));ServletOutputStream outputStream = response.getOutputStream();ExcelWriter excelWriter = EasyExcel.write(outputStream).build();//在根据科室id去查询有哪些包,以及价格for (int i = 0; i < exportVos.size(); i++) {dto.setDeptId(exportVos.get(i).getDeptId());List<DeptSummaryReq> detail = configPackageTaskMapper.queryDeptPackagingDetailBydeptId(dto);for (DeptSummaryReq regDetail : detail) {if (regDetail.getPrice() == null) {regDetail.setAmount(0.00);regDetail.setPrice(0.00);} else {regDetail.setAmount(BigDecimal.valueOf(regDetail.getPrice()).multiply(BigDecimal.valueOf(regDetail.getPackageCount())).doubleValue());}}DeptSummaryReq regDetail1 = new DeptSummaryReq();regDetail1.setPackageCode(dto.getStartTime() + " " + dto.getEndTime() + " 打印时间:" + DateUtil.now());DeptSummaryReq regDetail2 = new DeptSummaryReq();if (dto.getPackageType() == null) {List<String> typeName = recoverPackagesMapper.queryPackageType();regDetail2.setPackageCode("包类型:" + String.join(",", typeName));} else {regDetail2.setPackageCode("包类型:" + String.join(",", dto.getPackageName()));}DeptSummaryReq regDetail = new DeptSummaryReq();regDetail.setPackageCode("科室数量合计: " + detail.stream().mapToInt(DeptSummaryReq::getPackageCount).sum()+ " 科室金额合计: ¥" + Double.valueOf(df.format(detail.stream().mapToDouble(DeptSummaryReq::getAmount).sum())));detail.add(regDetail);detail.add(regDetail1);detail.add(regDetail2);//创建合并策略//这里我们上面手动给我们的list添加了3条数据//这3天数据是需要合并单元格显示的,所以我们这里需要new 3个OnceAbsoluteMergeStrategy// 前面2个数字代表的是行,后面两个代表从那一列开始,到那一列结束//比如我们要展示五个字段,那么就是0,4;从0开始到4就一共5列OnceAbsoluteMergeStrategy onceAbsoluteMergeStrategy = new OnceAbsoluteMergeStrategy(detail.size() + 1, detail.size() + 1, 0, 4);OnceAbsoluteMergeStrategy onceAbsoluteMergeStrategy1 = new OnceAbsoluteMergeStrategy(detail.size(), detail.size(), 0, 4);OnceAbsoluteMergeStrategy onceAbsoluteMergeStrategy2 = new OnceAbsoluteMergeStrategy(detail.size() - 1, detail.size() - 1, 0, 4);//创建一个sheetWriteSheet writeSheet = EasyExcel.writerSheet(i, exportVos.get(i).getDeptName()).head(DeptPackagingSummaryDetailExcel.class)//.registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()).registerWriteHandler(ExcelUtil.writeCenterStyle()).registerWriteHandler(onceAbsoluteMergeStrategy).registerWriteHandler(onceAbsoluteMergeStrategy1).registerWriteHandler(onceAbsoluteMergeStrategy2).build();//将sheet写入excelwriterexcelWriter.write(detail, writeSheet);}if (excelWriter != null) {excelWriter.finish();}}
三、entity
DeptSummaryReq
import com.alibaba.excel.annotation.ExcelIgnore;
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.write.style.ColumnWidth;
import com.alibaba.excel.annotation.write.style.ContentStyle;
import com.alibaba.excel.annotation.write.style.HeadRowHeight;
import com.alibaba.excel.annotation.write.style.HeadStyle;
import com.alibaba.excel.enums.poi.HorizontalAlignmentEnum;
import com.cloud.common.core.annotation.ExcelParam;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.*;import java.math.BigDecimal;
import java.util.Date;
import java.util.List;@Data
@ColumnWidth(25)//设置列宽
@HeadRowHeight(20)//设置行高
@EqualsAndHashCode
@HeadStyle(horizontalAlignment = HorizontalAlignmentEnum.CENTER)//表头样式
@ContentStyle(horizontalAlignment = HorizontalAlignmentEnum.CENTER)//内容样式
@ApiModel(value="DeptSummaryReq", description="导出出参")
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class DeptSummaryReq {private static final long serialVersionUID=1L;@ApiModelProperty(value = "包编码")@ExcelProperty({"明细报表", "包编码"})private String packageCode;@ApiModelProperty(value = "包名称")@ExcelProperty({"明细报表", "包名称"})private String packageName;@ApiModelProperty(name = "数量")@ExcelProperty({"明细报表", "数量"})private int packageCount;@ApiModelProperty(name = "单价")@ExcelProperty({"明细报表", "单价"})private Double price;@ApiModelProperty(name = "金额")@ExcelProperty({"明细报表", "金额"})private Double amount;@ApiModelProperty(name = "科室id")@ExcelIgnoreprivate Integer deptId;@ApiModelProperty(name = "科室名称")@ExcelIgnoreprivate String deptName;}
四、效果

相关文章:
EasyExcel生成多sheet页的excel
一、controller层 ApiOperation(value "明细查询导出") PostMapping(value "/SummaryDetailExport") public void summaryDetailExport(RequestBody SearchDTO dto, HttpServletResponse response) throws IOException {reportService.deptPackagingSum…...
家用小型洗衣机哪款性价比高?内衣洗衣机品牌推荐
近日,国内著名的电子商务平台公布了“内衣洗衣机产业趋势”的研究报告。该报告指出,由于消费者对生活质量的要求越来越高,内衣洗衣机的行业也有了长足的发展,特别是在今年以来,内衣洗衣机的销售额同比上涨了830%&#…...
为何Go爬虫依然远没有Python爬虫流行
目录 一、Go与Python的比较 1、语言生态 2、易用性 3、库支持 二、Go爬虫的优势 1、性能与并发性 2、跨平台性 3、内存占用 三、Go爬虫的潜力与未来发展 1、社区支持与库完善 2、跨平台移动应用开发 3、大数据处理与实时分析 四、代码示例 五、结论 在当今的互联…...
【华为OD题库-057】MELON的难题-java
题目 MELON有一堆精美的雨花石(数量为n,重量各异),准备送给S和W。MELON希望送给俩人的雨花石重星一致,请你设计一个程序帮MELON确认是否能将雨花石平均分配。 输入描述 第1行输入为雨花石个数:n,0<n <31. 第2行输入为空格分…...
OGG实现Oracle19C到postgreSQL14的实时同步
📢📢📢📣📣📣 哈喽!大家好,我是【IT邦德】,江湖人称jeames007,10余年DBA及大数据工作经验 一位上进心十足的【大数据领域博主】!😜&am…...
windows 你的电脑不能投影到其他屏幕,请尝试重新安装驱动程序
注意 千万不要去下载什么驱动精灵,太垃圾不好用还一堆附带的软件。按以下步骤进行解决: 解决方法 可能是显卡驱动的问题,我的笔记本按照如下步骤重启一下驱动后解决了,步骤如下: 右键点击桌面的开始菜单,选择”设备…...
2023-简单点-树莓派中的硬件通讯
树莓派中的通讯方式 串口通讯什么是串口通讯?串口通讯的特点 tips并行通讯?基于网络的通讯?socket通讯 串口通讯 什么是串口通讯? 串行通信每次传输一个位元数据,并在连续进行单次过程的基础上进行通信。根据数据的传送方向&am…...
游戏反Frida注入检测方案
在游戏安全对抗过程中,有不少外挂的实现基于对游戏内存模块进行修改,这类外挂通常会使用内存修改器,除此之外,还有一种门槛相对更高、也更难检测的「注入挂」。 据FairGuard游戏安全数据统计,在游戏面临的众多安全风险…...
观海微电子---AF、AG、AR 的差别和作用
一、名称解释及原理 1.AF ---- Anti-fingerprint,中文为抗指纹。一般 SiO2AF 材料(DON,M4、道康宁 AF 材料),一般采用真空蒸发镀膜法。 原理:AF 防污防指纹玻璃是根据荷叶原理,在玻璃外表面涂制…...
颠覆性语音识别:单词级时间戳和说话人分离
vbenjs/vue-vben-admin[1] Stars: 19.7k License: MIT Vue Vben Admin 是一个免费开源的中后台模板,使用最新的 vue3、vite4 和 TypeScript 等主流技术进行开发。该项目提供了现成的中后台前端解决方案,并可用于学习参考。 使用先进的前端技术如 Vue3/…...
吉利展厅 | 透明OLED拼接2x2:科技与艺术的完美融合
产品:4块55寸OLED透明拼接屏 项目地点:南宁 项目时间:2023年11月 应用场景:吉利展厅 在2023年11月的南宁,吉利展厅以其独特的展示设计吸引了众多参观者的目光。其中最引人注目的亮点是展厅中央一个由四块55寸OLED透…...
qnx修改tcp和udp缓冲区默认大小
拷贝/home/test/qnx/qos223/target/qnx7/aarch64le/sbin/sysctl进系统中 https://www.qnx.com/developers/docs/7.1/#com.qnx.doc.neutrino.utilities/topic/s/sysctl.html kern.sbmax 默认262144,这个限制住了发送、接收缓冲器大小 ./sysctl -w kern.sbmax10000…...
vscode的eslint检查代码格式不严谨的快速修复
问题: 原因:复制的代码,esLint检查代码格式不正确。或者写的代码位置不严谨,总是提示 解决 设置在Ctrl S保存时自动格式化代码 1、vscode设置 2、点击右上角,切换json模式 3、添加设置 "editor.codeActionsOn…...
OpenAI GPT-4 Turbo发布:开创AI新时代
🎥 屿小夏 : 个人主页 🔥个人专栏 : IT杂谈 🌄 莫道桑榆晚,为霞尚满天! 文章目录 📑前言一. GPT-4 Turbo的突破1.1上下文长度和控制手段的加强:1.2多模态支持:…...
基于c 实现 FIFO
功能: 1、读和写长度不限制 2、数据操作 和 指针操作分开(如先操作数据,再操作指针) 适用场景: 单向通信模式,一方写、一方读,可用于任务间单向通信(无需锁) 如&…...
tortoisegit 报错:server refused to start a shell/command
原因:阿里云的云效不支持TortoiseGit 使用 TortoiseGitPlink,请修改为 OpenSSH。 官网修改教程:TortoiseGit 工具相关报错如何处理? 基本流程: 选择设置(Settings),选择通用&#x…...
电商平台API接口指南,京东商品详情接口,京东详情页接口,宝贝详情页接口,商品属性接口,商品信息查询,商品详细信息接口,h5实时详情页数据展示
京东商品详情API接口是京东开放平台提供的一种API接口,通过该接口,可以获取到京东商品的详细信息,如商品名称、价格、图片和描述等信息。 使用方法如下: 注册并获取API密钥:首先需要在京东开放平台上注册并获取API密…...
什么是迁移学习
1 迁移学习概述 迁移学习(Transfer Learning)是机器学习中的一种方法,它允许模型将从一个任务中学到的知识应用到另一个相关的任务中。这种方法在数据稀缺的情况下尤为有用,因为它减少了对大量标记数据的需求。迁移学习已成为深度…...
万宾科技水环境综合治理监测系统的融合与应用
随着社会经济的快速发展,我国的水环境污染问题日益凸显,这不仅对生态环境造成了严重破坏,也严重威胁到人民群众的健康和生活质量。为了解决这一问题,城市生命线与水环境综合治理监测系统应运而生,二者的结合将为水环境…...
【EI会议征稿】第三届图像,信号处理与模式识别国际学术会议(ISPP 2024)
第三届图像,信号处理与模式识别国际学术会议(ISPP 2024) 2024 3rd International Conference on Image, Signal Processing and Pattern Recognition(ISPP 2024) 第三届图像,信号处理与模式识别国际学术会议…...
利用ngx_stream_return_module构建简易 TCP/UDP 响应网关
一、模块概述 ngx_stream_return_module 提供了一个极简的指令: return <value>;在收到客户端连接后,立即将 <value> 写回并关闭连接。<value> 支持内嵌文本和内置变量(如 $time_iso8601、$remote_addr 等)&a…...
质量体系的重要
质量体系是为确保产品、服务或过程质量满足规定要求,由相互关联的要素构成的有机整体。其核心内容可归纳为以下五个方面: 🏛️ 一、组织架构与职责 质量体系明确组织内各部门、岗位的职责与权限,形成层级清晰的管理网络…...
在四层代理中还原真实客户端ngx_stream_realip_module
一、模块原理与价值 PROXY Protocol 回溯 第三方负载均衡(如 HAProxy、AWS NLB、阿里 SLB)发起上游连接时,将真实客户端 IP/Port 写入 PROXY Protocol v1/v2 头。Stream 层接收到头部后,ngx_stream_realip_module 从中提取原始信息…...
华为OD机试-食堂供餐-二分法
import java.util.Arrays; import java.util.Scanner;public class DemoTest3 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseint a in.nextIn…...
Web 架构之 CDN 加速原理与落地实践
文章目录 一、思维导图二、正文内容(一)CDN 基础概念1. 定义2. 组成部分 (二)CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 (三)CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 …...
如何在网页里填写 PDF 表格?
有时候,你可能希望用户能在你的网站上填写 PDF 表单。然而,这件事并不简单,因为 PDF 并不是一种原生的网页格式。虽然浏览器可以显示 PDF 文件,但原生并不支持编辑或填写它们。更糟的是,如果你想收集表单数据ÿ…...
Kafka入门-生产者
生产者 生产者发送流程: 延迟时间为0ms时,也就意味着每当有数据就会直接发送 异步发送API 异步发送和同步发送的不同在于:异步发送不需要等待结果,同步发送必须等待结果才能进行下一步发送。 普通异步发送 首先导入所需的k…...
深度学习水论文:mamba+图像增强
🧀当前视觉领域对高效长序列建模需求激增,对Mamba图像增强这方向的研究自然也逐渐火热。原因在于其高效长程建模,以及动态计算优势,在图像质量提升和细节恢复方面有难以替代的作用。 🧀因此短时间内,就有不…...
虚拟电厂发展三大趋势:市场化、技术主导、车网互联
市场化:从政策驱动到多元盈利 政策全面赋能 2025年4月,国家发改委、能源局发布《关于加快推进虚拟电厂发展的指导意见》,首次明确虚拟电厂为“独立市场主体”,提出硬性目标:2027年全国调节能力≥2000万千瓦࿰…...
Selenium常用函数介绍
目录 一,元素定位 1.1 cssSeector 1.2 xpath 二,操作测试对象 三,窗口 3.1 案例 3.2 窗口切换 3.3 窗口大小 3.4 屏幕截图 3.5 关闭窗口 四,弹窗 五,等待 六,导航 七,文件上传 …...
