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…...

CTF show Web 红包题第六弹
提示 1.不是SQL注入 2.需要找关键源码 思路 进入页面发现是一个登录框,很难让人不联想到SQL注入,但提示都说了不是SQL注入,所以就不往这方面想了 先查看一下网页源码,发现一段JavaScript代码,有一个关键类ctfs…...
2024年赣州旅游投资集团社会招聘笔试真
2024年赣州旅游投资集团社会招聘笔试真 题 ( 满 分 1 0 0 分 时 间 1 2 0 分 钟 ) 一、单选题(每题只有一个正确答案,答错、不答或多答均不得分) 1.纪要的特点不包括()。 A.概括重点 B.指导传达 C. 客观纪实 D.有言必录 【答案】: D 2.1864年,()预言了电磁波的存在,并指出…...
Golang dig框架与GraphQL的完美结合
将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用,可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器,能够帮助开发者更好地管理复杂的依赖关系,而 GraphQL 则是一种用于 API 的查询语言,能够提…...

ESP32 I2S音频总线学习笔记(四): INMP441采集音频并实时播放
简介 前面两期文章我们介绍了I2S的读取和写入,一个是通过INMP441麦克风模块采集音频,一个是通过PCM5102A模块播放音频,那如果我们将两者结合起来,将麦克风采集到的音频通过PCM5102A播放,是不是就可以做一个扩音器了呢…...
TRS收益互换:跨境资本流动的金融创新工具与系统化解决方案
一、TRS收益互换的本质与业务逻辑 (一)概念解析 TRS(Total Return Swap)收益互换是一种金融衍生工具,指交易双方约定在未来一定期限内,基于特定资产或指数的表现进行现金流交换的协议。其核心特征包括&am…...
Spring Boot面试题精选汇总
🤟致敬读者 🟩感谢阅读🟦笑口常开🟪生日快乐⬛早点睡觉 📘博主相关 🟧博主信息🟨博客首页🟫专栏推荐🟥活动信息 文章目录 Spring Boot面试题精选汇总⚙️ **一、核心概…...

从 GreenPlum 到镜舟数据库:杭银消费金融湖仓一体转型实践
作者:吴岐诗,杭银消费金融大数据应用开发工程师 本文整理自杭银消费金融大数据应用开发工程师在StarRocks Summit Asia 2024的分享 引言:融合数据湖与数仓的创新之路 在数字金融时代,数据已成为金融机构的核心竞争力。杭银消费金…...
Vite中定义@软链接
在webpack中可以直接通过符号表示src路径,但是vite中默认不可以。 如何实现: vite中提供了resolve.alias:通过别名在指向一个具体的路径 在vite.config.js中 import { join } from pathexport default defineConfig({plugins: [vue()],//…...

从“安全密码”到测试体系:Gitee Test 赋能关键领域软件质量保障
关键领域软件测试的"安全密码":Gitee Test如何破解行业痛点 在数字化浪潮席卷全球的今天,软件系统已成为国家关键领域的"神经中枢"。从国防军工到能源电力,从金融交易到交通管控,这些关乎国计民生的关键领域…...

消息队列系统设计与实践全解析
文章目录 🚀 消息队列系统设计与实践全解析🔍 一、消息队列选型1.1 业务场景匹配矩阵1.2 吞吐量/延迟/可靠性权衡💡 权衡决策框架 1.3 运维复杂度评估🔧 运维成本降低策略 🏗️ 二、典型架构设计2.1 分布式事务最终一致…...