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…...
网络六边形受到攻击
大家读完觉得有帮助记得关注和点赞!!! 抽象 现代智能交通系统 (ITS) 的一个关键要求是能够以安全、可靠和匿名的方式从互联车辆和移动设备收集地理参考数据。Nexagon 协议建立在 IETF 定位器/ID 分离协议 (…...
shell脚本--常见案例
1、自动备份文件或目录 2、批量重命名文件 3、查找并删除指定名称的文件: 4、批量删除文件 5、查找并替换文件内容 6、批量创建文件 7、创建文件夹并移动文件 8、在文件夹中查找文件...
通过Wrangler CLI在worker中创建数据库和表
官方使用文档:Getting started Cloudflare D1 docs 创建数据库 在命令行中执行完成之后,会在本地和远程创建数据库: npx wranglerlatest d1 create prod-d1-tutorial 在cf中就可以看到数据库: 现在,您的Cloudfla…...
Qt Widget类解析与代码注释
#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this); }Widget::~Widget() {delete ui; }//解释这串代码,写上注释 当然可以!这段代码是 Qt …...
五年级数学知识边界总结思考-下册
目录 一、背景二、过程1.观察物体小学五年级下册“观察物体”知识点详解:由来、作用与意义**一、知识点核心内容****二、知识点的由来:从生活实践到数学抽象****三、知识的作用:解决实际问题的工具****四、学习的意义:培养核心素养…...
镜像里切换为普通用户
如果你登录远程虚拟机默认就是 root 用户,但你不希望用 root 权限运行 ns-3(这是对的,ns3 工具会拒绝 root),你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案:创建非 roo…...
Nginx server_name 配置说明
Nginx 是一个高性能的反向代理和负载均衡服务器,其核心配置之一是 server 块中的 server_name 指令。server_name 决定了 Nginx 如何根据客户端请求的 Host 头匹配对应的虚拟主机(Virtual Host)。 1. 简介 Nginx 使用 server_name 指令来确定…...
Java-41 深入浅出 Spring - 声明式事务的支持 事务配置 XML模式 XML+注解模式
点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...
稳定币的深度剖析与展望
一、引言 在当今数字化浪潮席卷全球的时代,加密货币作为一种新兴的金融现象,正以前所未有的速度改变着我们对传统货币和金融体系的认知。然而,加密货币市场的高度波动性却成为了其广泛应用和普及的一大障碍。在这样的背景下,稳定…...
关键领域软件测试的突围之路:如何破解安全与效率的平衡难题
在数字化浪潮席卷全球的今天,软件系统已成为国家关键领域的核心战斗力。不同于普通商业软件,这些承载着国家安全使命的软件系统面临着前所未有的质量挑战——如何在确保绝对安全的前提下,实现高效测试与快速迭代?这一命题正考验着…...
