Excel催化剂开源第19波-一些虽简单但不知道时还是很难受的知识点

2021-08-19 15:03:52 浏览数 (1)

通常许多的知识都是在知与不知之间,不一定非要很深奥,特别是Excel这样的应用工具层面,明明已经摆在那里,你不知道时,永远地不知道,知道了,简单学习下就已经实现出最终的功能效果。

在程序猿世界里,也是一样,很多工具类的功能,可以在代码里复用,当不知道时,自己从头造轮子,也是一件吃力不讨好麻烦事。

此篇提供一些简单的知识点,部分有代码段,部分只是操作界面即可得到,供VSTO新手们学习。

查找枚举型的完整命名空间

在录制宏中,得到的代码,虽然绝大部分是很容易改写成VB.Net或C#代码的,但有一个小问题是当录制出来的代码有枚举类型时,在VBA里的枚举是不带命名空间的,在VSTO里,是需要补全此命名空间的,怎样可以补全这些命名空间不报错?

以下为VBA代码,通过录制宏即可得到,将单元格内容居中显示。

代码语言:javascript复制
Sub 宏1()
    With Selection
        .HorizontalAlignment = xlCenter
        .VerticalAlignment = xlCenter
        .WrapText = False
        .Orientation = 0
        .AddIndent = False
        .IndentLevel = 0
        .ShrinkToFit = False
        .ReadingOrder = xlContext
        .MergeCells = False
    End With
End Sub

将其改为VSTO的.Net代码,有xlCenter、xlContext的枚举类型的问题需要补全。 有些时候看VS的参数提示可以得到,但有些是得不到的。

参数提示也不能知道哪个命名空间

参数提示可以知道哪个命名空间

在不能知道时,有个很简单的方法,通过查找对象浏览器即可得到

对象浏览器入口

搜索结果简单识别下即可找到答案

配置信息存储

许多时候需要存储一些配置信息,可以自行新建xml、ini文件等方式存储,但其实有一更简单的方式,直接存储在Setting类上,当调用时,还可以有强类型引用的方式调用,智能提示并有数据类型区分。

整个设置过程中,只需界面的方式设置,同时选择对应的数据类型,同时需要注意范围是用户还是应用程序级的。

用户的话,可以供用户修改,程序级的就是不修改的,固定保存到程序中的,比硬代码写在代码里维护要方便。

Setting界面化设置

同样地数据类型方面,可以有复杂的集合类型,加上自己用分隔符分开,可以满足存放一个多列数据表清单数据。

集合数据类型

修改代码

代码语言:javascript复制
                Properties.Settings.Default.SpotLightColor = colorDialog.Color;
                Properties.Settings.Default.Save();

读取代码

代码语言:javascript复制
  SolidBrush brush = new SolidBrush(Properties.Settings.Default.SpotLightColor);

颜色的转换

在这个ColorTranslator工具类中,有我们日常所要用到的颜色转换现成功能,颜色有以下四种分类 Win32颜色、Html颜色、Ole颜色和标准的.Net颜色。

对于我们OFFICE使用的颜色,就是Ole颜色,对应于VBA接口的Color属性值

一般来说在VSTO的.Net环境下,引用的颜色是标准.Net颜色,需要和OFFICE的颜色进行转换,转换的代码也异常简单,只需调用一个方法即可。

Color转换

日期的转换

同样地,在日期转换上,也直接有OLE的日期格式,这个方法也是后来偶然知道的,在Excel自定义函数里还傻傻地写过一个转换函数。

OLE日期转换1

OLE日期转换2

0 人点赞