VSTO(C#)Excel开发9:处理格式和字体

初级代码游戏的专栏介绍与文章目录-CSDN博客

我的github:codetoys,所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。

这些代码大部分以Linux为目标但部分代码是纯C++的,可以在任何平台上使用。

源码指引:github源码指引_初级代码游戏的博客-CSDN博客


上一篇VSTO(C#)Excel开发8:打包发布安装卸载-CSDN博客

如果动态生成内容,处理格式是必要的。

目录

一、字体Font

二、Style

三、处理字号Range.Font.Size

四、一些技术点

[4.1 获取打印范围和删除单元格](#4.1 获取打印范围和删除单元格)

[4.2 代码获取打印区域](#4.2 代码获取打印区域)

[4.3 判断缩放状态](#4.3 判断缩放状态)

[4.4 使用Cells](#4.4 使用Cells)


一、字体Font

字体Font对象描述字体,常用的属性如下:

  • Blod 粗体
  • Color 颜色
  • Italic 斜体
  • Shadow 阴影
  • Size 字号
  • Subscript 下标
  • Superscript 上标
  • Underline 下划线

通过Range对象的Font属性就可以设置一个单元格或一批单元格的字体。

二、Style

Range对象还包含一个Style,Style也有个属性叫Font,也可以修改,不过修改Style修改的是风格而不是单元格,对风格的修改将影响到所有使用此风格的内容。

比如对默认风格的修改不仅影响单元格内容,还将影响到列名和行号。

三、处理字号Range.Font.Size

以下代码可以对一个Range设置字号为10:

复制代码
			Range printRange = 。。。。。。;
			printRange.Font.Size = 10;

Range可以是一个单元格也可以是一批单元格,不论原来字号如何,全部设置为10。

以下代码可以增加或减小每个单元格的字号:

cs 复制代码
		private void changeFontSize(int n)
		{
			try
			{
				Worksheet worksheet = Globals.ThisAddIn.Application.ActiveSheet;
				Range printRange = GetPrintRange(worksheet);

				for (int row = 0; row < printRange.Rows.Count; ++row)
				{
					for (int col = 0; col < printRange.Columns.Count; ++col)
					{
						Range cell = worksheet.Cells[printRange.Column + col, printRange.Row + row];
						cell.Font.Size += n;
					}
				}
			}
			catch (Exception ex)
			{
				MessageBox.Show(ex.ToString());
			}
		}

其中GetPrintRange是获取打印区域的函数,与关键功能没有关系。

四、一些技术点

4.1 获取打印范围和删除单元格

默认打印范围是UsedRange,但是我们已经知道删除内容并没有完全删除单元格,如果设置过格式,单元格仍然是存在的。

单元格完全的删除不是用delete键,而是用右键-删除,会有下面的提示:

这样删除的才是完全删除。

如果设置了PageSetup.PrintArea,则打印范围为设置的值,如果表单里面有些辅助的不想打印的单元格(比如用来提供选项列表的),或者不想费事删掉多余的空白单元格,设置打印区域就可以了:

"设置打印区域"就将当前选中的所有单元格设置为打印区域。"取消打印区域"就恢复为默认打印区域。

4.2 代码获取打印区域

代码很简单,PrintArea存在就用PrintArea,没有就用UsedRange。

cs 复制代码
		private Range GetPrintRange(Worksheet worksheet)
		{
			if (null != worksheet.PageSetup.PrintArea && worksheet.PageSetup.PrintArea.Length > 0) return worksheet.get_Range(worksheet.PageSetup.PrintArea);
			else return worksheet.UsedRange;
		}

4.3 判断缩放状态

缩放Zoom是dynamic类型,而且确实是动态的。

如果Zoom为false,则Fit......属性起作用,否则Zoom就是个数字。(咋想的?)

所以判断Zoom的代码比较复杂:

cs 复制代码
				Worksheet worksheet = Globals.ThisAddIn.Application.ActiveSheet;
				if (worksheet.PageSetup.Zoom.GetType() == false.GetType() && worksheet.PageSetup.Zoom == false)//动态类型,可能是数字或bool
				{
					if (MessageBox.Show("当前是自动调整模式,必须以缩放模式调整,将设置为100%缩放模式(无缩放)继续吗?", "当前缩放" + worksheet.PageSetup.Zoom, MessageBoxButtons.OKCancel) != DialogResult.OK)
					{
						return;
					}
					worksheet.PageSetup.Zoom = 100;
				}

Zoom为100对应打印设置的"无缩放",其它值对应"自定义",界面上选择其它选项都会自动把Zoom设置为false:

4.4 使用Cells

之前我们说过Cells.Count会抛出异常,不过Cells[列号,行号]是可以访问单元格的,这是比较方便的,符合我们对二位数组的理解(不过行号列号都是从1开始的)。


下一篇 VSTO(C#)Excel开发10:启动和卸载顺序 事件处理-CSDN博客


(这里是文档结束)

相关推荐
️公子1 小时前
传奇游戏集成系统
游戏·c#
玩泥巴的1 小时前
强的飞起的 Roslyn 编译时代码生成,实现抽象类继承与依赖注入的自动化配置
c#·.net·代码生成·roslyn
mudtools2 小时前
强的飞起的 Roslyn 编译时代码生成,实现抽象类继承与依赖注入的自动化配置
c#·.net
SamDeepThinking2 小时前
基于CompletableFuture的主子任务并行处理架构实战:多渠道账单并发导入性能提升5倍的技术方案
java·后端·excel
️公子2 小时前
无人直播系统-黑客主题
人工智能·c#·visual studio
SamDeepThinking2 小时前
88MB Excel文件导致系统崩溃?看我如何将内存占用降低
java·excel
ChrisitineTX3 小时前
警惕数据“陷阱”:Python 如何自动发现并清洗 Excel 中的异常值?
开发语言·python·excel
wuchunyu0023 小时前
VBA Outlook中定长邮件内容
outlook·vba
wtsolutions4 小时前
Excel to JSON by WTSolutions 4.0.0 版本更新公告
json·excel·wps·插件·转换·加载项·wtsolutions
wtsolutions4 小时前
Excel to JSON by WTSolutions 4.0.0 Update Announcement
json·excel·wps·addin·wtsolutions·conversion