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博客


(这里是文档结束)

相关推荐
向宇it13 分钟前
【unity游戏开发——网络】使用Unity+PurrNet+Heathens+Steam,在 Unity 中通过 Steam与你的朋友建立联系
网络·游戏·unity·c#·游戏引擎·steam
WebRuntime37 分钟前
问世间,exe是何物?直教AI沉默、Web寡言(1)
javascript·c#·.net·web
稀饭过霍1 小时前
【.NET 10.0】使用FluentValidation
c#·mvc·.net
HUST1 小时前
C 语言 第七讲:数组和函数实践:扫雷游戏
c语言·开发语言·数据结构·vscode·算法·游戏·c#
开开心心_Every1 小时前
无广告干扰:简单好用文字LOGO设计工具
xml·java·网络·数据库·华为od·华为云·excel
youngee112 小时前
hot100-49前缀树
开发语言·c#
Dillon Dong2 小时前
从C到SIMULINK: 字节/字偏移 + 位偏移实现故障与故障字保存操作
c语言·开发语言·c#
m5655bj2 小时前
如何通过 C# 将 Markdown 转换为 PDF 文档
开发语言·pdf·c#
张人玉3 小时前
WPF HTTPS 通信示例使用说明
数据库·网络协议·http·c#·wpf
2501_930707783 小时前
使用C#代码向 Word 文档添加文档属性
开发语言·c#·word