excel表导出
dto:查询条件所在的类
@GetMapping(value ="/downloadProject")@ApiOperation("导出台账数据")@AnonymousAccesspublic void queryDownload(Dto dto, HttpServletResponse response) throws IOException, ParseException {service.queryDownload(byPageDto, response);}
service方法
@Transactionalpublic void queryDownload(Dto dto, HttpServletResponse response) throws IOException, ParseException {String tempPath = System.getProperty("java.io.tmpdir") + IdUtil.fastSimpleUUID() + ".xlsx";File file = new File(tempPath);MyExcelWriter writer = MyExcelWriter.getBigWriter();//重构字体格式等Font font = writer.createFont();font.setFontHeightInPoints((short) 15);font.setBold(true);CellStyle headCellStyle = writer.getHeadCellStyle();headCellStyle.setFont(font);//表头样式 参数:都是从0开始算 首行 尾行 首列 尾列 内容 是否使用样式writer.merge(32, "表名称");writer.merge(1, 3, 0, 0, "第一列", true);writer.merge(1, 3, 1, 1, "第二列", true);writer.merge(1, 3, 2, 2, "第三列", true);writer.merge(1, 3, 3, 3, "第四列", true);writer.merge(1, 1, 4, 8, "第五列", true);writer.merge(2, 3, 4, 4, "第六列", true);writer.merge(2, 3, 5, 5, "第七列", true);writer.merge(2, 3, 6, 6, "第八列", true);writer.merge(2, 3, 7, 7, "第九列", true);writer.merge(2, 3, 8, 8, "第十列", true);writer.merge(1, 1, 9, 13, "第十一列", true);writer.merge(2, 3, 9, 9, "第十二列", true);writer.merge(2, 3, 10, 10, "第十三列", true);writer.merge(2, 3, 11, 11, "第十四列", true);writer.merge(2, 3, 12, 12, "第十五列", true);writer.merge(2, 3, 13, 13, "第十六列", true);writer.merge(1, 3, 14, 14, "第十七列", true);writer.merge(1, 3, 15, 15, "第十八列", true);writer.merge(1, 3, 16, 16, "第十九列", true);writer.merge(1, 3, 17, 17, "第二十列", true);writer.merge(1, 1, 18, 19, "第二十一列", true);writer.merge(2, 3, 18, 18, "第二十二列", true);writer.merge(2, 3, 19, 19, "第二十三列", true);writer.merge(1, 1, 20, 26, "第二十四列", true);writer.merge(2, 3, 20, 20, "第二十五列", true);writer.merge(2, 3, 21, 21, "第二十六列", true);writer.merge(2, 3, 22, 22, "第二十七列", true);writer.merge(2, 2, 23, 26, "第二十八列", true);writer.writeCellValue(23, 3, "第二十九列"); //单个没法合并,用这种方法定义writer.writeCellValue(24, 3, "第三十列"); //单个没法合并,用这种方法定义writer.writeCellValue(25, 3, "第三十一列"); //单个没法合并,用这种方法定义writer.writeCellValue(26, 3, "第三十二列"); //单个没法合并,用这种方法定义writer.merge(1, 3, 27, 27, "第三十三列", true);writer.merge(1, 3, 28, 28, "第三十四列", true);writer.merge(1, 3, 29, 29, "第三十五列", true);writer.merge(1, 3, 30, 30, "第三十六列", true);writer.merge(1, 3, 31, 31, "第三十七列", true);writer.merge(1, 3, 32, 32, "第三十八列", true);//使用writeCellValue方法无法和merge一样传递参数true进行和表头同一样式,通过下面方法可以实现writer.getCell(23, 3).setCellStyle(headCellStyle);writer.getCell(24, 3).setCellStyle(headCellStyle);writer.getCell(25, 3).setCellStyle(headCellStyle);writer.getCell(26, 3).setCellStyle(headCellStyle);// 调整列宽writer.autoSizeColumnAll();Query query = getQuery(dto);List<Map<String, Object>> resultList = query.getResultList();List<List<Object>> rows = new ArrayList<>();SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");int i = 0; //显示在台账上的序号Integer j = 0; //判断是不是同一个numberfor (Map<String, Object> objectMap : resultList) {List<Object> list = new ArrayList<>();//例: list.add(objectMap.get("name") == null ? "" : objectMap.get("name").toString());list.add(i); list.add(objectMap.get("字段名") == null ? "" : objectMap.get("字段名").toString().substring(0, 7)); list.add(objectMap.get("字段名") == null ? "" : objectMap.get("字段名").toString()); list.add(objectMap.get("字段名") == null ? "" : objectMap.get("字段名").toString()); list.add(objectMap.get("字段名") == null ? "" : objectMap.get("字段名").toString()); list.add(objectMap.get("字段名") == null ? "" : objectMap.get("字段名").toString()); list.add(objectMap.get("字段名") == null ? "" : objectMap.get("字段名").toString()); list.add(objectMap.get("字段名") == null ? "" : objectMap.get("字段名").toString()); list.add(objectMap.get("字段名") == null ? "" : objectMap.get("字段名").toString()); list.add(objectMap.get("字段名") == null ? "" : objectMap.get("字段名").toString()); list.add(objectMap.get("字段名") == null ? "" : objectMap.get("字段名").toString()); list.add(objectMap.get("字段名") == null ? "" : objectMap.get("字段名").toString()); list.add(objectMap.get("字段名") == null ? "" : objectMap.get("字段名").toString()); list.add(objectMap.get("字段名") == null ? "" : objectMap.get("字段名").toString()); list.add(objectMap.get("字段名") == null ? "" : objectMap.get("字段名").toString()); ....rows.add(list);}//数据从第几行开始渲染writer.setCurrentRow(4);writer.write(rows, false);response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8");response.setHeader("Content-Disposition", "attachment;filename=file.xlsx");ServletOutputStream out = response.getOutputStream();file.deleteOnExit();writer.flush(out, true);IoUtil.close(out);}
相关文章:
excel表导出
dto:查询条件所在的类 GetMapping(value "/downloadProject")ApiOperation("导出台账数据")AnonymousAccesspublic void queryDownload(Dto dto, HttpServletResponse response) throws IOException, ParseException {service.queryDownload(byPageDto, re…...
YOLOv8 快速入门
前言 本文是 YOLOv8 入门指南(大佬请绕过),将会详细讲解安装,配置,训练,验证,预测等过程 YOLOv8 官网:ultralytics/ultralytics: NEW - YOLOv8 🚀 in PyTorch > ONN…...
HJ48 从单向链表中删除指定值的节点
Powered by:NEFU AB-IN Link 文章目录 HJ48 从单向链表中删除指定值的节点题意思路代码 HJ48 从单向链表中删除指定值的节点 题意 输入一个单向链表和一个节点的值,从单向链表中删除等于该值的节点,删除后如果链表中无节点则返回空指针。 思路 单向链表…...
Java缓存理解
CPU占用:如果你有某些应用需要消耗大量的cpu去计算,比如正则表达式,如果你使用正则表达式比较频繁,而其又占用了很多CPU的话,那你就应该使用缓存将正则表达式的结果给缓存下来。 数据库IO性能:如果发现有大…...
MHA高可用及故障切换
一、什么是 MHA MHA(MasterHigh Availability)是一套优秀的MySQL高可用环境下故障切换和主从复制的软件。 MHA 的出现就是解决MySQL 单点的问题。 MySQL故障切换过程中,MHA能做到0-30秒内自动完成故障切换操作。 MHA能在故障切换的过程中最大…...
1000元订金?华为折叠屏手机MateX5今日开始预订,售价尚未公布
华为最新款折叠屏手机Mate X5今日在华为商城开始预订,吸引了众多消费者的关注。预订时需交纳1000元的订金,而具体售价尚未公布。据华为商城配置表显示,Mate X5预计将搭载Mate 60系列同款麒麟9000S处理器,或可能搭载麒麟9100处理器…...
Golang编写客户端SDK,并开源发布包到GitHub,供其他项目import使用
目录 编写客户端SDK,并开源发布包到GitHub1. 创建 GitHub 仓库2. 构建项目,编写代码Go 代码示例:项目目录结构展示: 3. 提交代码到 GitHub仓库4. 发布版本5. 现在其他人可以引用使用你的模块包了 编写客户端SDK,并开源…...
手写Mybatis:第10章-使用策略模式,调用参数处理器
文章目录 一、目标:参数处理器二、设计:参数处理器三、实现:参数处理器3.1 工程结构3.2 参数处理器关系图3.3 入参数校准3.4 参数策略处理器3.4.1 JDBC枚举类型修改3.4.2 类型处理器接口3.4.3 模板模式:类型处理器抽象基类3.4.4 类…...
pair 是 C++ 标准库中的一个模板类,用于存储两个对象的组合
pair 是 C 标准库中的一个模板类,用于存储两个对象的组合。它位于 <utility> 头文件中。 pair 类的定义如下: template <class T1, class T2> struct pair {T1 first;T2 second;pair();pair(const T1& x, const T2& y);template&l…...
More Effective C++学习笔记(5)
目录 条款25:将构造函数和非成员函数虚化条款26:限制某个类所能产生的对象数量条款27:要求(或禁止)对象产生于heap(堆)之中条款28:智能指针条款29:引用计数条款30&#x…...
SpringMVC之CRUD(直接让你迅速完成部署)
一、项目创建 首先创建一个基于maven的项目部署,如果有些插件没有的话可以参考mybatis入门Idea搭建 二、配置依赖导入 依赖导入 1、pom.xml 需要根据自己的文件来进行导入,并不是原本照着导入 <project xmlns"http://maven.apache.org/POM/4.0.0…...
Github Copilot连接不上服务器
现象 报错:[ERROR] [default] [2023-09-08T15:47:01.542Z] GitHub Copilot could not connect to server. Extension activation failed: “connect ETIMEDOUT 20.205.243.168:443” 原因 DNS解析api.github.com的地址到20.205.243.168,但实际上这个地…...
(数字图像处理MATLAB+Python)第十二章图像编码-第三、四节:有损编码和JPEG
文章目录 一:有损编码(1)预测编码A:概述B:DM编码C:最优预测器 (2)变换编码A:概述B:实现变换编码的主要问题 二:JPEG 一:有损编码 &am…...
基于SpringBoot + Vue的项目整合WebSocket的入门教程
1、WebSocket简介 WebSocket是一种网络通信协议,可以在单个TCP连接上进行全双工通信。它于2011年被IETF定为标准RFC 6455,并由RFC7936进行补充规范。在WebSocket API中,浏览器和服务器只需要完成一次握手,两者之间就可以创建持久性…...
AI智能机器人的语音识别是如何实现的 ?
什么是智能语音识别系统?语音识别实际就是将人类说话的内容和意思转化为计算机可读的输入,例如按键、二进制编码或者字符序列等。与说话人的识别不同,后者主要是识别和确认发出语音的人并非其中所包含的内容。语音识别的目的就是让机器人听懂…...
RabbitMQ: 死信队列
一、在客户端创建方式 1.创建死信交换机 2.创建类生产者队列 3.创建死信队列 其实就是一个普通的队列,绑定号私信交换机,不给ttl,给上匹配的路由,等待交换机发送消息。 二、springboot实现创建类生产者队列 1.在消费者里的…...
232 - Crossword Answers (UVA)
这道题因为我把puzzle打成了Puzzle,卡了我很久…………真的太无语了。 题目链接如下: Online Judge 我的代码如下: #include <cstdio> #include <cctype> #include <set> const int maxx 10;int r, c, kase, cnt, tem…...
MySQL表结构设计规范
一、表设计 1. 命名规范 表名由小写英文字母和下划线组成表必须填写描述信息表名中的英文单词应该使用单数形式临时表以 tmp 为前缀,以日期为后缀备份表以 bak 为前缀,以日期为后缀使用hash、md5 进行散表,表名后缀使用16进制 2. 设计规范…...
如何利用ProcessOn 做资产管理流程图
资产管理 是一家公司最重要的管理活动。好的资产管理可以让资源最优化利用,实现资产价值的最大化。可以帮助组织管理和降低风险。同时当需要决策的时候,对资产数据进行分析和评估,也可以帮助做出更明智的决策,如优化资产配置、更新…...
geopandas 笔记:geometry上的操作汇总
如无特殊说明,数据主要来自:GeoDataFrame 应用:公园分布映射至subzone_UQI-LIUWJ的博客-CSDN博客 0 读入数据 subzone gpd.read_file(ura-mp19-subzone-no-sea-pl.geojson) subzone subzone_tstsubzone[0:5] subzone_tst subzone_tst.plot…...
调用支付宝接口响应40004 SYSTEM_ERROR问题排查
在对接支付宝API的时候,遇到了一些问题,记录一下排查过程。 Body:{"datadigital_fincloud_generalsaas_face_certify_initialize_response":{"msg":"Business Failed","code":"40004","sub_msg…...
【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)
服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...
CentOS下的分布式内存计算Spark环境部署
一、Spark 核心架构与应用场景 1.1 分布式计算引擎的核心优势 Spark 是基于内存的分布式计算框架,相比 MapReduce 具有以下核心优势: 内存计算:数据可常驻内存,迭代计算性能提升 10-100 倍(文档段落:3-79…...
高危文件识别的常用算法:原理、应用与企业场景
高危文件识别的常用算法:原理、应用与企业场景 高危文件识别旨在检测可能导致安全威胁的文件,如包含恶意代码、敏感数据或欺诈内容的文档,在企业协同办公环境中(如Teams、Google Workspace)尤为重要。结合大模型技术&…...
涂鸦T5AI手搓语音、emoji、otto机器人从入门到实战
“🤖手搓TuyaAI语音指令 😍秒变表情包大师,让萌系Otto机器人🔥玩出智能新花样!开整!” 🤖 Otto机器人 → 直接点明主体 手搓TuyaAI语音 → 强调 自主编程/自定义 语音控制(TuyaAI…...
Caliper 配置文件解析:config.yaml
Caliper 是一个区块链性能基准测试工具,用于评估不同区块链平台的性能。下面我将详细解释你提供的 fisco-bcos.json 文件结构,并说明它与 config.yaml 文件的关系。 fisco-bcos.json 文件解析 这个文件是针对 FISCO-BCOS 区块链网络的 Caliper 配置文件,主要包含以下几个部…...
Redis数据倾斜问题解决
Redis 数据倾斜问题解析与解决方案 什么是 Redis 数据倾斜 Redis 数据倾斜指的是在 Redis 集群中,部分节点存储的数据量或访问量远高于其他节点,导致这些节点负载过高,影响整体性能。 数据倾斜的主要表现 部分节点内存使用率远高于其他节…...
return this;返回的是谁
一个审批系统的示例来演示责任链模式的实现。假设公司需要处理不同金额的采购申请,不同级别的经理有不同的审批权限: // 抽象处理者:审批者 abstract class Approver {protected Approver successor; // 下一个处理者// 设置下一个处理者pub…...
Git常用命令完全指南:从入门到精通
Git常用命令完全指南:从入门到精通 一、基础配置命令 1. 用户信息配置 # 设置全局用户名 git config --global user.name "你的名字"# 设置全局邮箱 git config --global user.email "你的邮箱example.com"# 查看所有配置 git config --list…...
第7篇:中间件全链路监控与 SQL 性能分析实践
7.1 章节导读 在构建数据库中间件的过程中,可观测性 和 性能分析 是保障系统稳定性与可维护性的核心能力。 特别是在复杂分布式场景中,必须做到: 🔍 追踪每一条 SQL 的生命周期(从入口到数据库执行)&#…...
