天天看点

Visual Studio Tools for Office (VSTO) 简介及资源整理

之所以接触vsto(visual studio tools for office )是因为接到一个公司的面试通知,需要测试你的学习能力,让自己以前没有做过这方面开发的情况下,基于vsto对excel进行二次开发,完成两个简单的task。由于网上这方面的资料相对较少,随把自己收集到的一些资料整理处理,希望能对大家有所帮助。

以前的office编程一般都是通过vba进行,vba是一个很简单的开发环境,集成在很多office的产品中。每个office的产品,如word,excel,outlook,都通过com暴露了非常丰富的对象模型,供程序员编程。我们就是用vba和这些office的com对象模型对office进行扩展开发的。最常见的是增加一些自定义的按钮,还有自定义响应一些事件。但是vba有很多不足之处。首先,它只面对vb脚本语言,并且开发环境显得简单,不够强大。最致命的是,vba把代码分别嵌入到每个文档中去,这导致万一出现bug,或者项目需要升级时,就很难处理。需要对于每个文档进行修改,这种低效率在企业级应用中是无法容忍的。vba的另一个问题:安全保护做得很薄弱,很多人可以利用宏制造病毒。

microsoft想用visual studio .net和.net framework来解决这些问题,所以vsto应运而生。vsto 将.net对word,excel,outlook和infopath的支持加入到visual studio中。vsto将word或excel文档转换成了能够进行编程的.net类,使它们成为具有数据绑定功能的控件,我们可以像处理window forms控件和其他的.net特征那样对其进行编码。

几乎所有的office编程都会使用某个office应用程序对象模型,并对它进行编码。对象模型是一组由office应用程序提供的对象,正在运行的代码可用他们来控制office应用程序。每个office应用程序对象模型都按照层次结构进行组织,层次结构中的跟对象为“application”。不能通过根对象application直接访问其他对象,但可以通过转换路径访问。(word和excel对象模型的层次结构如下图)

Visual Studio Tools for Office (VSTO) 简介及资源整理

.net中与office交互的托管程序集被称为office主互调程序集(pia)。

所有的office对象模型都是用非托管代码(c和c++)编写的,并提供com接口。为了在托管代码(c#或vb)中与这些接口进行通信,我们必须使用封装器,通过它来实现托管代码与office的非托管com接口之间的协同工作。该封装器是一系列的.net类,它们被编译成为pia的程序集。

值得注意的是properties与methods的区别:属性也有带参数的属性get/set方法,methods也有不带参数的get/set方法,一个重大区别就是属性是“全局”的,你修改完会一直起作用,而方法一般只在当前会话生命期中才会有用。 此外属性一般只会创建只读属性,不会设置只写属性。若需要只写属性,一般用方法代替。

1. 书籍类:

2. 代码类:

两个task的简单实例: 

3. 相关博客:

vsto 从零开始 

vsto 简介与发展 

 vsto之旅系列(一):vsto入门 http://www.cnblogs.com/zhili/archive/2012/09/03/vsto.html

4. 官方资源: