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…...
SpringBoot-17-MyBatis动态SQL标签之常用标签
文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…...
铭豹扩展坞 USB转网口 突然无法识别解决方法
当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…...
日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻
在如今就业市场竞争日益激烈的背景下,越来越多的求职者将目光投向了日本及中日双语岗位。但是,一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧?面对生疏的日语交流环境,即便提前恶补了…...
全球首个30米分辨率湿地数据集(2000—2022)
数据简介 今天我们分享的数据是全球30米分辨率湿地数据集,包含8种湿地亚类,该数据以0.5X0.5的瓦片存储,我们整理了所有属于中国的瓦片名称与其对应省份,方便大家研究使用。 该数据集作为全球首个30米分辨率、覆盖2000–2022年时间…...
家政维修平台实战20:权限设计
目录 1 获取工人信息2 搭建工人入口3 权限判断总结 目前我们已经搭建好了基础的用户体系,主要是分成几个表,用户表我们是记录用户的基础信息,包括手机、昵称、头像。而工人和员工各有各的表。那么就有一个问题,不同的角色…...
大模型多显卡多服务器并行计算方法与实践指南
一、分布式训练概述 大规模语言模型的训练通常需要分布式计算技术,以解决单机资源不足的问题。分布式训练主要分为两种模式: 数据并行:将数据分片到不同设备,每个设备拥有完整的模型副本 模型并行:将模型分割到不同设备,每个设备处理部分模型计算 现代大模型训练通常结合…...
EtherNet/IP转DeviceNet协议网关详解
一,设备主要功能 疆鸿智能JH-DVN-EIP本产品是自主研发的一款EtherNet/IP从站功能的通讯网关。该产品主要功能是连接DeviceNet总线和EtherNet/IP网络,本网关连接到EtherNet/IP总线中做为从站使用,连接到DeviceNet总线中做为从站使用。 在自动…...
ios苹果系统,js 滑动屏幕、锚定无效
现象:window.addEventListener监听touch无效,划不动屏幕,但是代码逻辑都有执行到。 scrollIntoView也无效。 原因:这是因为 iOS 的触摸事件处理机制和 touch-action: none 的设置有关。ios有太多得交互动作,从而会影响…...
A2A JS SDK 完整教程:快速入门指南
目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库ÿ…...
(一)单例模式
一、前言 单例模式属于六大创建型模式,即在软件设计过程中,主要关注创建对象的结果,并不关心创建对象的过程及细节。创建型设计模式将类对象的实例化过程进行抽象化接口设计,从而隐藏了类对象的实例是如何被创建的,封装了软件系统使用的具体对象类型。 六大创建型模式包括…...
