如何利用POI导出报表
一、报表格式

二、依赖坐标
<dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>3.16</version>
</dependency>
<dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>3.16</version>
</dependency>
三、 controller层代码
/*
* 导出运营表
* */@GetMapping("/export")@ApiOperation("导出运营数据报表")public void export(HttpServletResponse response) throws Exception {reportService.exportBusinessData(response);}
四、导出报表
@Override
public void exportBusinessData(HttpServletResponse response) {//查询30天的数据LocalDateTime endTime = LocalDateTime.now();LocalDateTime startTime = endTime.minusDays(30).toLocalDate().atStartOfDay();BusinessDataVO businessDataVO = workspaceService.businessData(startTime, endTime);log.info("businessDataVO,{}", businessDataVO.toString());//查询每一天的List<BusinessDataVO> list = new ArrayList<>();while (startTime.isBefore(endTime)) {LocalDateTime end = startTime.plusHours(24).minusSeconds(1);BusinessDataVO dayVO = workspaceService.businessData(startTime, end);list.add(dayVO);log.info("startTime{},dayVO{}", startTime, dayVO);startTime = startTime.plusDays(1);}try {//读取excel模板InputStream in = this.getClass().getClassLoader().getResourceAsStream("templates/运营数据报表模板.xlsx");XSSFWorkbook workbook = new XSSFWorkbook(in);//填充模板XSSFSheet sheet = workbook.getSheetAt(0);//填充总的30天的XSSFRow row3 = sheet.getRow(3);XSSFRow row4 = sheet.getRow(4);row3.getCell(2).setCellValue(businessDataVO.getTurnover() + "");row3.getCell(4).setCellValue(businessDataVO.getOrderCompletionRate() + "");row3.getCell(6).setCellValue(businessDataVO.getNewUsers() + "");row4.getCell(2).setCellValue(businessDataVO.getValidOrderCount() + "");row4.getCell(4).setCellValue(businessDataVO.getUnitPrice() + "");//填充每一天的int i = 0;startTime = endTime.minusDays(30).toLocalDate().atStartOfDay();for (BusinessDataVO dayVO : list) {XSSFRow row = sheet.getRow(7 + i);if (row == null) {row = sheet.createRow(7 + i);}row.getCell(1).setCellValue(startTime.toLocalDate().toString());row.getCell(2).setCellValue(dayVO.getTurnover() + "");row.getCell(3).setCellValue(dayVO.getValidOrderCount() + "");row.getCell(4).setCellValue(dayVO.getOrderCompletionRate() + "");row.getCell(5).setCellValue(dayVO.getUnitPrice() + "");row.getCell(6).setCellValue(dayVO.getNewUsers() + "");i++;startTime = startTime.plusDays(1);}//写入到response的输出流ServletOutputStream outputStream = response.getOutputStream();workbook.write(outputStream);//关流outputStream.close();workbook.close();} catch (Exception e) {log.error(e.getMessage(), e);throw new BaseException("文件下载异常");}
}
相关文章:
如何利用POI导出报表
一、报表格式 二、依赖坐标 <dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>3.16</version> </dependency> <dependency><groupId>org.apache.poi</groupId><art…...
自动部署SSL证书到阿里云腾讯云CDN
项目地址:https://github.com/yxzlwz/ssl_update 项目简介 目前,自动申请和管理免费SSL证书的项目有很多,如个人正在使用的 acme.sh。然而在申请后,如果我们的需求不仅限于服务器本地的使用,证书的部署也是一件麻烦事…...
【系统性】 循序渐进学C++
循序渐进学C 第一阶段:基础 一、环境配置 1.1.第一个程序(基本格式) #include <iosteam> using namespace std;int main(){cout<<"hello world"<<endl;system("pause"); } 模板 #include &…...
rust - 一个日志缓存记录的通用实现
本文给出了一个通用的设计模式,通过建造者模式实例化记录对象,可自定义格式化器将实例化后的记录对象写入到指定的缓存对象中。 定义记录对象 use chrono::prelude::*; use std::{cell::RefCell, ffi::OsStr, fmt, io, io::Write, path::Path, rc::Rc,…...
elasticsearch(RestHighLevelClient API操作)(黑马)
操作全是换汤不换药,创建一个request,然后使用client发送就可以了 一、增加索引库数据 Testvoid testAddDocument() throws IOException {//从数据库查出数据Writer writer writerService.getById(199);//将查出来的数据处理成json字符串String json …...
用尾插的思想实现移除链表中的元素
目录 一、介绍尾插 1.链表为空 2.链表不为空 二、题目介绍 三、思路 四、代码 五、代码解析 1. 2. 3. 4. 5. 6. 六、注意点 1. 2. 一、介绍尾插 整体思路为 1.链表为空 void SLPushBack(SLTNode** pphead, SLTDataType x) {SLTNode* newnode BuyLTNode(x); …...
【Kubernetes】k8s删除master节点后重新加入集群
目录 前言一、思路二、实战1.安装etcdctl指令2.重置旧节点的k8s3.旧节点的的 etcd 从 etcd 集群删除4.在 master03 上,创建存放证书目录5.把其他控制节点的证书拷贝到 master01 上6.把 master03 加入到集群7.验证 master03 是否加入到 k8s 集群,检查业务…...
HCIP—OSPF虚链路实验
OSPF虚链路—Vlink 作用:专门解决OSPF不规则区域所诞生的技术,是一种虚拟的,逻辑的链路。实现非骨干区域和骨干区域在逻辑上直接连接。注意虚链路条件:只能穿越一个区域,通常对虚链路进行认证功能的配置。虚链路认证也…...
RAxML-NG安装与使用-raxml-ng-v1.2.0(bioinfomatics tools-013)
01 背景 1.1 ML树 ML树,或最大似然树,是一种在进化生物学中用来推断物种之间进化关系的方法。最大似然(Maximum Likelihood, ML)是一种统计框架,用于估计模型参数,使得观察到的数据在该模型参数下的概率最…...
Tomcat内存马
Tomcat内存马 前言 描述Servlet3.0后允许动态注册组件 这一技术的实现有赖于官方对Servlet3.0的升级,Servlet在3.0版本之后能够支持动态注册组件。 而Tomcat直到7.x才支持Servlet3.0,因此通过动态添加恶意组件注入内存马的方式适合Tomcat7.x及以上。…...
pytorch之诗词生成3--utils
先上代码: import numpy as np import settingsdef generate_random_poetry(tokenizer, model, s):"""随机生成一首诗:param tokenizer: 分词器:param model: 用于生成古诗的模型:param s: 用于生成古诗的起始字符串,默认为空串:return: …...
OpenAI的ChatGPT企业版专注于安全性、可扩展性和定制化。
OpenAI的ChatGPT企业版:安全、可扩展性和定制化的重点 OpenAI的ChatGPT在商业世界引起了巨大反响,而最近推出的ChatGPT企业版更是证明了其在企业界的日益重要地位。企业版ChatGPT拥有企业级安全、无限GPT-4访问、更长的上下文窗口以及一系列定制选项等增…...
JS06-class对象
class对象 className 修改样式 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content&quo…...
深度学习1650ti在win10安装pytorch复盘
深度学习1650ti在win10安装pytorch复盘 前言1. 安装anaconda2. 检查更新显卡驱动3. 根据pytorch选择CUDA版本4. 安装CUDA5. 安装cuDNN6. conda安装pytorch结语 前言 建议有条件的,可以在安装过程中,开启梯子。例如cuDNN安装时登录 or 注册,会…...
Node.js与webpack(三)
上一节:Node.js与Webpack笔记(二)-CSDN博客 从0来一遍(webpack项目) 将之前的webpack 的纯开发配置,重新创建空白项目,重新做一遍,捋一遍思路防止加入生产模式时候弄混 1.创建文件夹…...
测试覆盖率那些事
在测试过程中,会出现测试覆盖不全的情况,特别是工期紧张的情况下,测试的时间被项目的周期一压再压,测试覆盖概率不全就会伴随而来。 网上冲浪,了解一下覆盖率的文章,其中一篇感觉写的很不错,将…...
Etcd 介绍与使用(入门篇)
etcd 介绍 etcd 简介 etc (基于 Go 语言实现)在 Linux 系统中是配置文件目录名;etcd 就是配置服务; etcd 诞生于 CoreOS 公司,最初用于解决集群管理系统中 os 升级时的分布式并发控制、配置文件的存储与分发等问题。基…...
Docker 安装 LogStash
关于LogStash Logstash,作为Elastic Stack家族中的核心成员之一,是一个功能强大的开源数据收集引擎。它专长于从各种来源动态地获取、解析、转换和丰富数据,并将这些结构化或非结构化的数据高效地传输到诸如Elasticsearch等存储系统中进行集…...
Selenium笔记
Selenium笔记 Selenium笔记 Selenium笔记element not interactable页面刷新 element not interactable "element not interactable"是Selenium在执行与网页元素交互操作(如点击、输入等)时抛出的一个常见错误。这个错误意味着虽然找到了对应的…...
ChatGPT :确定性AI源自于确定性数据
ChatGPT 幻觉 大模型实际应用落地过程中,会遇到幻觉(Hallucination)问题。对于语言模型而言,当生成的文本语法正确流畅,但不遵循原文(Faithfulness),或不符合事实(Factua…...
Windows HEIC缩略图解决方案:让iPhone照片在资源管理器中重获新生
Windows HEIC缩略图解决方案:让iPhone照片在资源管理器中重获新生 【免费下载链接】windows-heic-thumbnails Enable Windows Explorer to display thumbnails for HEIC/HEIF files 项目地址: https://gitcode.com/gh_mirrors/wi/windows-heic-thumbnails 想…...
Unity VFX Graph实战:从Compute Shader依赖看GPU粒子特效的性能与平台适配(以HDRP项目为例)
Unity VFX Graph深度解析:GPU粒子特效的性能优化与跨平台实战指南在游戏开发领域,粒子特效一直是营造沉浸感的关键要素。当传统CPU驱动的粒子系统遇到性能瓶颈时,Unity的Visual Effect Graph(VFX Graph)凭借其GPU加速能…...
从自然语言到可视化洞察:ChartGPT如何用AI重构数据图表生成范式
从自然语言到可视化洞察:ChartGPT如何用AI重构数据图表生成范式 【免费下载链接】chart-gpt AI tool to build charts based on text input 项目地址: https://gitcode.com/gh_mirrors/ch/chart-gpt 在数据驱动的决策时代,业务人员与技术团队之间…...
为什么你的Windows快捷键突然失效?3分钟找出罪魁祸首
为什么你的Windows快捷键突然失效?3分钟找出罪魁祸首 【免费下载链接】hotkey-detective A small program for investigating stolen key combinations under Windows 7 and later. 项目地址: https://gitcode.com/gh_mirrors/ho/hotkey-detective 你是否经历…...
OpenAI与博通合作自研芯片,融资卡壳微软,AI军备赛进入信用背书阶段
OpenAI与Broadcom的合作及问题去年10月,OpenAI和Broadcom联合宣布战略合作,将共同部署10GW的定制AI加速器,OpenAI负责设计芯片和系统,Broadcom参与开发并负责部署,2026年下半年开始上架,2029年底前全部到位…...
Gofile下载器深度解析:Python自动化文件获取架构设计与性能优化
Gofile下载器深度解析:Python自动化文件获取架构设计与性能优化 【免费下载链接】gofile-downloader Download files from https://gofile.io 项目地址: https://gitcode.com/gh_mirrors/go/gofile-downloader Gofile下载器是一个基于Python的高效自动化文件…...
百度网盘下载速度太慢?Python脚本帮你获取高速直链
百度网盘下载速度太慢?Python脚本帮你获取高速直链 【免费下载链接】baidu-wangpan-parse 获取百度网盘分享文件的下载地址 项目地址: https://gitcode.com/gh_mirrors/ba/baidu-wangpan-parse 还在为百度网盘几十KB的下载速度而苦恼吗?想要摆脱客…...
Unity 2019.4 接入MAX聚合广告SDK避坑全记录:从Applovin配置到Google Admob广告单元关联
Unity 2019.4集成MAX聚合广告SDK实战指南:从配置到优化的完整解决方案在移动游戏开发领域,广告变现一直是开发者收入的重要来源。对于使用Unity 2019.4版本的开发者来说,如何高效集成MAX聚合广告SDK并关联Google Admob广告单元,是…...
仿真数据与真实数据:机器人训练的数据策略选择
仿真数据与真实数据:机器人训练的数据策略选择摘要:仿真数据和真实数据各有优劣,如何选择和配比直接影响训练效果和项目成本。本文从数据特性、适用场景、配比策略三个维度给出系统分析,并提供Sim-to-Real迁移的工程化方案。关键词…...
Masson染色原理、步骤、判读及常见问题
Masson染色是组织病理检测中经典的三色染色技术,由法国医生Claude L. Masson研发,是病理实验中区分胶原纤维与其他软组织成分的手段。在慢性炎症、机化及瘢痕形成过程中,胶原纤维会随着病理进展而出现。早期在H-E染色切片中,这些纤…...
