VSTO(C#)Excel开发4:打印设置
初级代码游戏的专栏介绍与文章目录-CSDN博客
我的github:codetoys,所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。
这些代码大部分以Linux为目标但部分代码是纯C++的,可以在任何平台上使用。
源码指引:github源码指引_初级代码游戏的博客-CSDN博客
前一篇:VSTO(C#)Excel开发3:Range对象 处理列宽和行高-CSDN博客
前一篇我们已经知道了如何设置列宽和行高,那么如何将控制打印呢?
目录
一、打印设置 页面设置 PageSetup
1.1 打印区域PageSetup.PrintArea
1.2 纸张大小PageSetup.PaperSize
1.3 纸张方向PageSetup.Orientation
1.4 页边距 PageSetup.TopMargin等
1.5 页数 PageSetup.Pages.Count
1.6 缩放 PageSetup.Zoom
1.7 缩放到一页 PageSetup.FitToPagesWide
1.8 打印预览Worksheet.PrintPreview()
二、示例代码
三、困惑 如何知道打印区域的大小呢 标准字符宽度又是多少呢

一、打印设置 页面设置 PageSetup
与打印和页面有关的设置在Worksheet对象的PageSetup属性里,PageSetup里包含了常用的纸张大小、横向纵向、页边距等设置。
1.1 打印区域PageSetup.PrintArea
是一个Range,没有设置的话默认打印所有表格。
1.2 纸张大小PageSetup.PaperSize
这是预定义的值,枚举值xlPaperSize,很容易查到文档:

1.3 纸张方向PageSetup.Orientation
也是个枚举:

1.4 页边距 PageSetup.TopMargin等
四个边距,Top是上边距……
单位是磅。各种单位混用真是很晕啊。
1.5 页数 PageSetup.Pages.Count
这是一共有多少页。Pages是Page的集合,但Page没什么属性和方法。我以为会有这一页上打印哪些单元格呢,但是并没有。
1.6 缩放 PageSetup.Zoom
1.7 缩放到一页 PageSetup.FitToPagesWide
缩放和缩放到一页是冲突的功能啊,要先设置缩放为false缩放到一页才能生效。
1.8 打印预览Worksheet.PrintPreview()
调出打印预览可以用Worksheet.PrintPreview()。
二、示例代码
还是之前的按钮二,改了代码,新建一个按钮也行,没所谓的。
private void button2_Click(object sender, RibbonControlEventArgs e){string str = "开始操作。。。。。。\n";try{Worksheet worksheet = Globals.ThisAddIn.Application.ActiveSheet;Range usedRange = worksheet.UsedRange;str += " UsedRange:" + usedRange.Address + "\n";str += " UsedRange.Column:" + usedRange.Column + "\n";str += " UsedRange.Columns.Count:" + usedRange.Columns.Count + "\n";str += " UsedRange.Row:" + usedRange.Row + "\n";str += " UsedRange.Rows.Count:" + usedRange.Rows.Count + "\n";str += " PrintArea:" + worksheet.PageSetup.PrintArea + "\n";str += " PaperSize:" + worksheet.PageSetup.PaperSize.ToString() + "\n";str += " ChartSize:" + worksheet.PageSetup.ChartSize + "\n";str += " Orientation:" + worksheet.PageSetup.Orientation.ToString() + "\n";str += " TopMargin:" + worksheet.PageSetup.TopMargin + "\n";str += " BottomMargin:" + worksheet.PageSetup.BottomMargin + "\n";str += " LeftMargin:" + worksheet.PageSetup.LeftMargin + "\n";str += " RightMargin:" + worksheet.PageSetup.RightMargin + "\n";str += " Pages:" + worksheet.PageSetup.Pages.Count + "\n";//worksheet.PageSetup.Zoom = false;//设置为false才能Fit//worksheet.PageSetup.FitToPagesWide = 1;double originalTotalWidth = 0;double originalTotalHeigh = 0;for (int i = 0; i < usedRange.Columns.Count; ++i){Range colum = worksheet.Columns[usedRange.Column + i];originalTotalWidth+=colum.ColumnWidth;}for (int i = 0; i < usedRange.Rows.Count; ++i){Range row = worksheet.Rows[usedRange.Row + i];originalTotalHeigh+=row.RowHeight;}str += " originalTotalWidth:" + originalTotalWidth + "\n";str += " originalTotalHeigh:" + originalTotalHeigh + "\n";str += "操作成功完成\n";}catch (Exception ex){MessageBox.Show(ex.ToString());}MessageBox.Show(str);}
就把上面讲的属性显示了一下,最后一段计算了总的宽度和高度。
可以先按一下button1,再按一下button2,输出:

对照代码一看就明白了。(高度少打一个字母t啊,不好意思)
三、困惑 如何知道打印区域的大小呢 标准字符宽度又是多少呢
纸张尺寸是标准的,可以查,单位是厘米,页边距是磅,列宽是标准字符宽度,行高是像素,这也太随意了。
标准字符宽度又是个和字体相关的值,没有简单的方法获取。
好吧,就这样,毕竟我的目标只是打印到一页,即使没有这些值也有办法。
下一篇VSTO(C#)Excel开发5:调整表格到一页-CSDN博客
(这里是文档结束)
相关文章:
VSTO(C#)Excel开发4:打印设置
初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github:codetoys,所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C的,可以在任何平台上使用。 源码指引:github源…...
设计模式Python版 模板方法模式(上)
文章目录 前言一、模板方法模式二、模板方法模式示例 前言 GOF设计模式分三大类: 创建型模式:关注对象的创建过程,包括单例模式、简单工厂模式、工厂方法模式、抽象工厂模式、原型模式和建造者模式。结构型模式:关注类和对象之间…...
源IP泄露后如何涅槃重生?高可用架构与自动化防御体系设计
一、架构层解决方案 1. 高防代理架构设计 推荐架构: 用户 → CDN(缓存静态资源) → 高防IP(流量清洗) → 源站集群(真实IP隐藏) ↑ Web应用防火墙(WAF) 实施要点&a…...
transformer bert 多头自注意力
输入的(a1,a2,a3,a4)是最终嵌入,是一个(512,768)的矩阵;而a1是一个token,尺寸是768 a1通过wq权重矩阵,经过全连接变换得到查询向量q1;a2通过Wk权重矩阵得到键向量k2;q和k点乘就是值…...
python-leetcode-定长子串中元音的最大数目
1456. 定长子串中元音的最大数目 - 力扣(LeetCode) 可以使用 滑动窗口 方法来解决这个问题。步骤如下: 初始化:计算前 k 个字符中元音字母的个数,作为初始窗口的值。滑动窗口:遍历字符串,每次右…...
Spring Boot + MyBatis-Plus 项目目录结构
以下是一个标准的 Spring Boot MyBatis-Plus 项目目录结构及文件命名规范,包含每个目录和文件的作用说明,适用于中大型项目开发: 项目根目录结构 src/ ├── main/ │ ├── java/ # Java 源代码 │ │ └── com/…...
Python之变量及简单的数据类型
本文来源于《Python从入门到实践》,自己整理以供工作参考 基本内容 print("Hello Python World!")message "Hello Python world!" print(message)message "Helllo Python Crash Course world!" print(message)name "ada lov…...
力扣 Hot 100 刷题记录 - 翻转二叉树
力扣 Hot 100 刷题记录 - 翻转二叉树 题目描述 翻转二叉树 是力扣 Hot 100 中的一道经典题目,题目要求如下: 给你一棵二叉树的根节点 root,翻转这棵二叉树,并返回其根节点。 示例 1: 输入:root [4,2,7…...
力扣215.数组中的第K个最大元素--堆排序法(java)
为了找到数组中第K个最大的元素,我们可以使用堆排序的方法。堆排序的核心是构建一个最大堆,并通过多次交换堆顶元素来找到前K个最大的元素。具体步骤如下: 方法思路 构建最大堆:将输入数组转换为最大堆,使得每个父节…...
MySQL增删改查操作 -- CRUD
个人主页:顾漂亮 目录 1.CRUD简介 2.Create新增 使用示例: 注意点: 3.Retrieve检索 使用示例: 注意点: 4.where条件查询 前置知识:-- 运算符 比较运算符 使用示例: 注意点…...
【算法day9】回文数-给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。
回文数 给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。 回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。 例如,121 是回文&#…...
RSA混合加密RSA混合加密
RSA混合加密是一种结合非对称加密(RSA)和对称加密(AES)的技术,通过两者的优势互补,实现高效且安全的数据传输。以下是详细解释和示例: RSA混合加密的核心原理 非对称加密(RSA&#x…...
蛋白质功能预测论文阅读记录2025(DPFunc、ProtCLIP)
前言 最近研究到瓶颈了,怎么优化都提升不了,遂开始看点最新的论文。 DPFunc 2025.1.2 Nature Communication 中南大学 论文地址:DPFunc: accurately predicting protein function via deep learning with domain-guided structure inform…...
Linux网络套接字编程——UDP服务器
Linux网络套接字编程——创建并绑定-CSDN博客 前面已经介绍了网络套接字的创建和绑定,这篇文章会通过UDP套接字实现一个UDP服务器。 先介绍将使用的接口。 recvfrom ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags,struct sockaddr *src_addr,…...
主流向量数据库对比
在 AI 的 RAG(检索增强生成)研发领域,向量数据库是存储和查询向量嵌入的核心工具,用于支持高效的语义搜索和信息检索。向量嵌入是文本或其他非结构化数据的数值表示,RAG 系统通过这些嵌入从知识库中检索相关信息&#…...
54.HarmonyOS NEXT 登录模块开发教程(八):测试与调试技巧
温馨提示:本篇博客的详细代码已发布到 git : https://gitcode.com/nutpi/HarmonyosNext 可以下载运行哦! HarmonyOS NEXT 登录模块开发教程(八):测试与调试技巧 文章目录 HarmonyOS NEXT 登录模块开发教程(…...
Vue3中 ref 与 reactive区别
ref 用途: ref 通常用于创建一个响应式的基本类型数据(如 string、number、boolean 等),但它也可以用于对象或数组 返回值: ref 返回一个带有 .value 属性的对象,访问或修改数据需要通过 .value 进行 使用场景: …...
结构型——装饰器模式
装饰器模式 装饰器是指能动态地为对象添加额外的功能的一种结构型设计模式。 特点 不修改原有代码的情况下,动态地扩展一个对象的功能。支持多个装饰器叠加使用透明性,装饰后的对象与原对象保持一致,客户端无需感知装饰过程 结构模式与实…...
在Simulink中将Excel数据导入可变负载模块的方法介绍
文章目录 数据准备与格式要求Excel数据格式MATLAB预处理数据导入方法使用From Spreadsheet模块(直接导入Excel)通过MATLAB工作区中转(From Workspace模块)使用1-D Lookup Table模块(非线性负载映射)Signal Builder模块(变载工况导入)可变负载模块配置注意事项与调试在S…...
分布式事务的产生背景及理论指导
分布式事务的产生背景 在现代互联网和企业级系统架构中,随着业务需求的增长,单体架构逐渐向微服务架构、分布式架构演进。传统单体架构下,事务管理相对简单,可以依赖数据库的本地事务(如 MySQL 的 ACID 事务ÿ…...
动手学强化学习-记录
3.5 蒙特卡洛方法 统计每一个状态s出现的总次数和总回报,用大数定律,总回报/总次数≈状态s的期望回报 第4章 动态规划算法 策略迭代中的策略评估使用贝尔曼期望方程来得到一个策略的状态价值函数,这是一个动 态规划的过程;而价值迭代直接使用贝尔曼最…...
RocketMQ性能优化篇
在分布式消息系统中,RocketMQ以其高性能、高可靠性和高可扩展性而被广泛应用。然而,为了充分发挥其性能优势,需要进行一系列的性能测试和优化。本文将从性能测试方法和优化实践两个方面,详细介绍如何对RocketMQ进行性能优化。通过…...
C语言为例谈数据依赖性
数据依赖性(Data Dependency)是指程序中后续操作的计算结果或内存访问依赖于前面操作的结果。在存在数据依赖的情况下,编译器或处理器会保证这些操作的执行顺序,因此不需要显式地使用内存屏障(Memory Barrierÿ…...
阿里云操作系统控制台评测:国产AI+运维 一站式运维管理平台
阿里云操作系统控制台评测:国产AI运维 一站式运维管理平台 引言 随着云计算技术的飞速发展,企业在云端的运维管理面临更高的要求。阿里云操作系统控制台作为一款集运维管理、智能助手和系统诊断等多功能于一体的工具,正逐步成为企业高效管理…...
C++中的const与类型转换艺术
目录 强制转换 static_cast const_cast reinterpret_cast dynamic_cast const关键字 修饰内置类型* 修饰指针类型* 类比 数组指针 指针数组 函数指针 指针函数 强制转换 C语言中的强制转换在C代码中依然可以使用,这种C风格的转换格式非常简单 TYPE a …...
网络安全演练有哪些形式
OPENVAS使用 1、确定指定IP是否能ping通 2、创建扫描目标 3、创建扫描任务(scan management →newtask) 4、开始任务start 5、查看扫描细节 6、查看扫描结果,包含漏洞详细信息,亦可到处PDF文件 7、导出扫描结果报告 8、为…...
c++常用的算术生成算法
注意: 算术生成算法属于小型算法,使用时包含的头文件为 #include <numeric> 算法简介: accumulate //计算容器元素累加总和fill //向容器中添加元素 1. accumulate 功能描述: 计算区间内 容器元素…...
2011. 执行操作后的变量值
执行操作后的变量值 题目描述尝试做法推荐做法 题目描述 存在一种仅支持 4 种操作和 1 个变量 X 的编程语言: X 和 X 使变量 X 的值 加 1 –X 和 X-- 使变量 X 的值 减 1 最初,X 的值是 0 给你一个字符串数组 operations ,这是由操作组成的…...
特辣的海藻!10
基础知识点 1.清除换行符 scan.nextInt()要加scan.nextLine()清楚换行符。 2.Map.Entry<K, V> Map.Entry是Map接口的嵌套接口,表示一个键值对(Key-Value) 常用方法: entry.getKey():获取键 …...
SpringBoot动态加载JAR包实战:实现插件化架构的终极指南
在需要热插拔业务模块、支持灰度发布的系统中,动态加载外部JAR包是提升系统扩展性的核心技术。本文将手把手实现3种动态加载方案,包含可直接运行的SpringBoot代码,并深入分析类加载机制与内存泄漏预防策略。 一、动态加载的应用场景 电商…...
