原文:VSTO之旅系列(一):VSTO入门

引言:

因为工作的原因,这段时间一直在看VSTO的相关的内容的,因此希望通过这个系列来记录下我学习的过程和大家分享Office开发的相关知识,希望以后有朋友从事这方面的也希望通过本系列提供点帮助。

本专题将简单介绍VSTO和VSTO中的一些基本概念进行介绍,下面就直接进入正题了。

1. VSTO介绍

首先介绍下VSTO的历史吧,之前都是用VBA来开发Office解决方案的,后来微软开发出了VSTO这个工具包来创建自定义的Office应用程序,使得开发Office应用程序更加简单,并且用VSTO来开发office应用程序可以使用Visual studio开发环境中的众多功能和CLR提供的内存管理,垃圾回收等功能。VSTO到现在有5个版本的,下面通过一张图来说明VSTO的发展过程:

通过上图简单介绍下VSTO的发展历程的,这里也就不多描述VSTO的历史了,只是让大家有个这样的认识,下面就具体介绍下什么是VSTO。

VSTO就是一个创建自定义Office应用程序的Visual Studio工具包,这个工具包里面提供了很多类库来让我们调用,然后工具包中类再与Office客户端进行交互。

打开VS2010后可以看到现在支持的一些模版,下面就是VS2010中支持模版的一张图片:

从图中可以看出创建的Office应用程序大致有三类:插件(Add-in),文档级别(如Excel Workbook)和模版(Template)。创建的Add-in和模版应用程序即应用程序级别的定制程序,它指的是对整个应用程序都可用。文档级别的应用程序指的是程序代码只关联到特定的文档二不是整个应用程序,然而需要注意的,文档级别的应用程序的代码并不像VBA程序那样存放在文档或模版里的,而是存放在项目的程序集中的。

2 主互操作程序集(PIA)的介绍

Office应用程序如Word,Excel和Outlook都是用非托管代码来写的, 而我们创建的VSTO工程使用的是托管代码,这时候就需要使用互操作程序集来与Office应用程序里的非托管COM对象交互,然后主互操作程序集(PIA)指的是官方发布的互操作程序集,如果电脑中安装了PIA,当你添加对类库的引用时,那么Visual Studio会自动加载PIA,微软为Office应用程序提供了PIA,如EXcel PIA就是Microsof.Office.Interop.Excel.dll,其他应用程序也类似。当安装了Office产品后,PIA会自动安装在电脑的GAC目录里,每当创建一个VSTO解决方案, Visual Studio会自动为该解决方案加载合适的Office PIA引用和其他程序集,具体PIA目录见下图:

如果安装完Office产品后没有安装相应的PIA到GAC,可以执行Office的安装程序进行修复。

3. 宿主项和宿主控件的介绍

宿主项是表示Office对象模型入口点的。应用程序外接程序使用Microsoft.Office.Tools.AddIn类为宿主项,此宿主项提供对宿主应用程序和成员的对象模型的访问,可以通过宿主项添加数据绑定的能力和提供额外的事件来扩展本地Office文档。而创建一个Excel解决方案会创建4个Excel宿主项:Workbook,Sheet1,Sheet2和Sheet3,如下图:

宿主项是Word和Excel等设计界面,担当控件容器的作用,就像VBA里把控件添加到UserForm上一样,我们可以把Windows Form 控件和宿主控件添加到宿主项上,值得注意的是Workbook宿主项,它不作为宿主控件的容器,在工作簿宿主项中不能添加控件只能包含组件。

宿主项控件了Office的对象模型,它是基于本机Office对象的,本机Office对象使用的是Microsoft.Office.Interop.Word命名控件下定义的类型而宿主项和宿主控件定义在Microsoft.Office.Tools.Word(Excel)等命名控件下的。宿主控件与本机对象的功能类似,但是宿主控件扩展了本机对象,添加了数据绑定和事件等功能

4.总结

到这里本专题要介绍的内容已经讲完了,后面的专题将介绍利用VSTO来创建自定义的Office应用程序,如果大家有关于Office想实现的功能也可以在下面留言,后面通过学习也会和大家分享大家想要实现的功能,希望在这里我们一起讨论,一起进步。

VSTO之旅系列(一):VSTO入门的更多相关文章

  1. VSTO之旅系列(五):创建Outlook解决方案

    原文:VSTO之旅系列(五):创建Outlook解决方案 本专题概要 引言 Outlook对象模型 自定义Outlook窗体 小结 一.引言 在上一个专题中,为大家简单介绍了下如何创建Word解决方案 ...

  2. VSTO之旅系列(三):自定义Excel UI

    原文:VSTO之旅系列(三):自定义Excel UI 本专题概要 引言 自定义任务窗体(Task Pane) 自定义选项卡,即Ribbon 自定义上下文菜单 小结 引言 在上一个专题中为大家介绍如何创 ...

  3. VSTO之旅系列(四):创建Word解决方案

    原文:VSTO之旅系列(四):创建Word解决方案 本专题概要 引言 Word对象模型 创建Word外接程序 小结 一.引言 在上一个专题中主要为大家介绍如何自定义我们的Excel 界面的,然而在这个 ...

  4. VSTO之旅系列(二):创建Excel解决方案

    原文:VSTO之旅系列(二):创建Excel解决方案 本专题概要 引言 创建VSTO项目 Excel对象模型 创建Excel外接程序 创建Excel文档级自定义项 小结 一.引言 也许很多朋友都没有听 ...

  5. NHibernate之旅系列文章导航

    NHibernate之旅系列文章导航 宣传语 NHibernate.NHibernate教程.NHibernate入门.NHibernate下载.NHibernate教程中文版.NHibernate实 ...

  6. 一条数据的HBase之旅,简明HBase入门教程-开篇

    常见的HBase新手问题: 什么样的数据适合用HBase来存储? 既然HBase也是一个数据库,能否用它将现有系统中昂贵的Oracle替换掉? 存放于HBase中的数据记录,为何不直接存放于HDFS之 ...

  7. 分布式学习系列【dubbo入门实践】

    分布式学习系列[dubbo入门实践] dubbo架构 组成部分:provider,consumer,registry,monitor: provider,consumer注册,订阅类似于消息队列的注册 ...

  8. 「译」JUnit 5 系列:基础入门

    原文地址:http://blog.codefx.org/libraries/junit-5-basics/ 原文日期:25, Feb, 2016 译文首发:Linesh 的博客:JUnit 5 系列: ...

  9. Selenium WebDriver + Grid2 + RSpec之旅(三) ----入门小例子

    Selenium WebDriver + Grid2 + RSpec之旅(三) ----入门小例子 第一个例子都是比较简单的博客园登录界面,就像学习编程语言时候都是从Hello,World!开始. 1 ...

随机推荐

  1. 基于visual Studio2013解决面试题之0905子串数量

     题目

  2. FastReport 数据过滤

    FastReport 数据过滤 在DataBind 的 OnBeforePrint 设置条件   例:显示 大于0 的数据 procedure MasterData1OnBeforePrint(Sen ...

  3. POJ 2404 Jogging Trails

    Jogging Trails Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 2122   Accepted: 849 Des ...

  4. 配置rhel 6.4(64位)安装使用syslog-ng 3.5

    我基本的博客地址是:www.cppblog.com/zdhsoft 相应的CentOS 6.x也就可能使用. 下载地址: 第一步:安装 wget http://www.balabit.com/down ...

  5. c#引用web.config中的ConnectionString

    c#引用web.config中的ConnectionString <connectionStrings>  <add name="JKXTConnectionString& ...

  6. EasyUI - Datatable转Json and Json转Datatable

    using System; using System.Data; using System.Linq; using System.Collections; using System.Collectio ...

  7. 网页调试技巧:抓取马上跳转的页面POST信息或者页面内容

    http://www.qs5.org/Post/625.html 网页调试技巧:抓取马上跳转的页面POST信息或者页面内容 2016/02/02 | 心得分享 | 0 Replies 有时候调试网页或 ...

  8. Axure RP中线条的设置

    文章来源与网络 来自:非原型不设计

  9. Oracle 的一张表没有主键,如何映射Hibernate

    我的一个Oracle表,没有任何主键,然后生成的时候就将所有的字段都作为联合主键,如果所有的字段都做联合主键的话,这样只要一个字段为null,查询的话这条记录就不能查询到. 然后我想到Oracle数据 ...

  10. Android程序检测网络是否可用

    在做Android应用程序中,连接网络的时候,常常要用到检测网络状态是否可用,在这里分享一个比较好用的方法. 本人参考:http://blog.csdn.net/sunboy_2050/article ...