该系列文章转载自    http://bbs.51cto.com/thread-1017338-1.html

参考资料 http://www.excelpx.com/thread-184209-1-1.html

1 主互操作程序集(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的安装程序进行修复。

2. 宿主项和宿主控件的介绍
宿主项是表示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)等命名控件下的。宿主控件与本机对象的功能类似,但是宿主控件扩展了本机对象,添加了数据绑定和事件等功能

3 创建VSTO项目
对于刚接触VSTO的朋友来说,可能根本就不知道如何去创建一个VSTO的项目的,相信通过这个部分大家就会觉得是如此的简单。
环境的搭建
进行VSTO开发的环境搭建是相当简单的,只需要安装Visual Studio 2010(当然安装VS2010的时候在安装组件中必须勾选VSTO选择,这个选项是默认勾上的。大家可以在安装VS的时候留意下)和Office 2010就可以,当然VS2008 和Office 2007的安装也可以完成环境的搭建。
创建第一个Excel工程来开始我们的VSTO之旅
第一步, 选择新建项目->Visual C#->Office->2010,然后选择Excel 2010外接程序(如何是英文版即Excel 2010 Add-in),如下图:

  从图中可以看到,除了外接程序外,还有Excel模板和Excel文档这两种项目类型,他们的区别是 外接程序是应用程序级别的,即如果你创建了Excel 2010外接程序,该程序对所有Excel应用都是有效的,因为每次Excel的启动过程都会加载该插件(即该程序),大家肯定留意到当我们启动Excel或Word的时候都会加载一些加载项,其实这些加载项就是属于外接程序,即插件,启动过程见下面图:

  而 文档和模板项目,都是属于文档级别的程序,该程序只对当前文档和模板有效,创建这两种类型的项目,会在项目的工程目录下会生成一个word文件(文档项目会生成一个 Document1.docx文件,模板项目会生成一个Document1.dotx文件)。
创建成功之后,外接程序的项目文件结构见下图:

  从图中可以看出,刚创建的VSTO外接程序都只有一个ThisAddIn.cs文件,该文件即是一个宿主项(更多关于宿主项和宿主控件的内容可以查看该系列的第一篇博文),我们可以通过这个文件来对Excel对象进行访问。同时该类中有ThisAddIn_Startup和ThisAddIn_Shutdown两个方法,从两个方法中命名中可以知道,如果你的代码想在加载外接程序时运行的话,就放把代码放在ThisAddIn_Startup方法内容,如果你想在外接程序卸载的时候运行你的代码,就把这些代码放在ThisAddIn_Shutdown方法内。

最新文章

  1. bash:fdisk:command not found
  2. ajax加载模块实时刷新的原理
  3. TCP短连接TIME_WAIT问题解决方法大全
  4. 全面了解 Linux 服务器 - 4. 查看 Linux 系统的平均负载
  5. nginx配置PATH_INFO模式
  6. jq生成目录文件树jQuery Ztree基本用法
  7. smarty 快速上手
  8. 【总结】IE和Firefox的Javascript兼容性总结(转)
  9. spring的annotation-driven配置事务管理器详解
  10. VMware-workstation-full-12.0.1-3160714
  11. 更换Python默认软件镜像源
  12. Spark大型电商项目实战-及其改良(3) 分析sparkSQL语句的性能影响
  13. Visual Studio上编译ncnn
  14. BigInteger的使用
  15. Pytho, struct处理二进制(pack和unpack)
  16. Centos6.5使用yum安装mysql——快速上手必备
  17. python中str相关函数
  18. C语言利用SMTP协议发送邮件
  19. 基于go手动写个转发代理服务
  20. nodejs express 加载html模板

热门文章

  1. SEO方式之HTTPS 访问优化详解
  2. 2018.09.19 atcoder Card Game for Three(组合数学)
  3. hdu-1070(水题)
  4. 什么是DNS服务器
  5. python操作数据库-安装
  6. Event事件冒泡和事件捕获
  7. volatile 类型修饰符
  8. hbase使用MapReduce操作1(基本增删改查)
  9. Windows Phone 放开政策 - 应用内支付(IAP)可加入三方支付
  10. Transaction And Lock--使用资源锁来控制并发