VSTO新手常见问题

  • 发布时间:2016年10月9日 11:32
  • 作者:杨仕航
  • 分类标签: VSTO
  • 阅读(13495)
  • 评论(0)

最近刚好有个用VSTO写Word插件的项目,顺便更新一些VSTO的文章。

作为第1篇VSTO的文章,讲一些新手刚接触VSTO会遇到的问题。(表示我一开始也遇到)

1、如何加入Ribbon菜单

2、Ribbon菜单独立1个菜单页

3、Ribbon菜单的按钮变大和加图标

4、Ribbon按钮名称文字换行

5、Office对象引用

6、获取Office对象


说明事项

1、另外这里说的都是Office插件,即外接程序。不是文档和模版

2、建议使用的是C#作为VSTO的开发语言。VB.net用起来很别扭,四不像。

3、本文用Word为例,Excel和PPT基本相同操作方法。

4、新建VSTO项目的.NET版本我一般选用4.0。外接程序的版本一般选择2010(可以在Office2007\2010\2013\2016使用)


常见问题:

1、如何加入Ribbon菜单

新建项目之后,资源管理窗口空空的。

一般刚开始接触VSTO会无从下手,不知道下一步该干嘛。

下一步,要创建Ribbon菜单,提供用户交互界面。

右键项目,添加-->新建项,插入可视化功能区。

注意编程习惯,给Ribbon命名。这样就可以插入一个Ribbon菜单,做为用户交互界面。

新建的Ribbon菜单默认有一个Tab控件和Group控件。顺便说明一下这些Ribbon控件的层次关系。

Ribbon --> Tab --> Group --> 其他Ribbon功能控件(例如Button、Menu、SplitButton等等)

别被吓到,看似复杂,其实只是不了解。了解它们的作用就不会觉得复杂

1)Ribbon:该Ribbon是最外层的可视化容器,可以简单理解为本插件。

2)Tab:Ribbon上的菜单页,就像Office自己的菜单“开始”、“插入”等等。可插入多个Tab。一般建议1个Tab。

3)Group:Tab菜单页中的分组,是一个其他功能控件放置的容器空间。

4)其他Ribbon功能控件:例如用户可以点击的按钮、下拉菜单等等。


2、Ribbon菜单独立1个菜单页

细心的人可以发现默认的Tab有内置两个字。若不做其他修改,调试运行可发现该插件的菜单都在加载项中,非独立1个菜单页。

一开始我也是找了很久Tab控件的属性才找到设置的位置。


选择Tab,展开ControlId,把ControlType属性改成Custom即可。

另外,可以在label属性设置该菜单页的显示菜单名称。


3、Ribbon菜单的按钮变大和加图标

默认插入进来的Button按钮是小按钮且无图标,如下:

可以设置Button按钮的ControlSize属性,将其改成大按钮

大按钮默认是要图标的,可以设置Image属性,导入现有的图片文件。

这里的图片文件,建议用32*32的png图片。可以在一些网站找到,例如EasyIcon

为了规范,建议新建一个资源文件专门存放Ribbon菜单的图标。


新建资源文件之后,先不用往里面添加图片。直接在Button按钮的Image属性找到这个资源文件,导入图片即可。

为了统一管理,建议在VSTO的工程目录下创建一个文件夹专门用于存放Ribbon菜单的图标。每次导入都从该文件夹中选择。

当然,你也可以修改Button按钮的ShowImage属性和ShowLabel属性控制是否显示图标和名称。


4、Ribbon按钮名称文字换行

这里我的Button按钮用4个字的名称还好,通常可以两个字在同行。有时排列不整齐,有时文字不是4个字,这些需要自己换行控制。

Button按钮的Label属性在属性面板没法输入换行符。需要打开Ribbon菜单的设计文件。

直接查找按钮的标题。如上图所示,找到这个按钮的Label属性设置。

C#的换行符是\n。在需要换行的地方加入\n即可。


5、Office对象引用

要操作Office对象就需要先引用。建议如下方式引用:

using Word = Microsoft.Office.Interop.Word;

Excel和PPT VSTO项目也是如此:

using Excel = Microsoft.Office.Interop.Excel;
using PPT = Microsoft.Office.Interop.PowerPoint;


6、获取Office对象

欲操作Office对象,前面引用了,还想要获取。

Office对象模型基本差不多,最顶层是Application应用。

接下来是文档集合,Word是Documents,Excel是Workbooks。这些都是vba的知识。

在VSTO中,都是通过Globals全局对象中找到当前插件ThisAddin。在从ThisAddin获取当前的Application。获取到Application之后,就可以获取Office其他对象。以Word和Excel为例。(PPT的vba没用过,不知道怎么写。道理类似)

Word:

//Word引用
using Word = Microsoft.Office.Interop.Word;

//某个类或方法中获取
Word.Application app = Globals.ThisAddIn.Application;
Word.Documents docs = app.Documents;
Word.Document doc;

//判断是否有文档,获取正在使用的文档
if(docs.Count > 0){
    doc = app.ActiveDocument;
}

Excel:

//Excel引用
using Excel = Microsoft.Office.Interop.Excel;

//某个类或方法中获取
Excel.Application app = Globals.ThisAddIn.Application;
Excel.Workbooks works= app.Workbooks;
Excel.Workbook work;
Excel.Worksheet sheet;

//判断是否有文档,获取正在使用的文档
if(works.Count > 0){
    work = app.ActiveWorkbook;
    sheet = app.ActiveSheet;
}


常见的问题先讲到这里,后面再更新一些其他和VSTO相关的东西。

上一篇:Access中ADO和DAO like查询的区别

下一篇:Python秒解最难数独

相关专题: VSTO的那些坑   

评论列表

智慧如你,不想发表一下意见吗?

新的评论

清空