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

发布于:2025-03-16 ⋅ 阅读:(20) ⋅ 点赞:(0)

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

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

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

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


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

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

目录

一、字体Font

二、Style

三、处理字号Range.Font.Size

四、一些技术点

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

4.2 代码获取打印区域

 4.3 判断缩放状态

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。

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

		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。

		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的代码比较复杂:

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


(这里是文档结束)