这篇博客将简单介绍一些VSTO Addin开发的知识。

1. VSTO是什么?我们可以用VSTO做什么?

VSTO全称Visual Studio Tool for Office,是可以让我们针对现有的Office程序进行功能扩展。在工作或生活中其实我们或多或少用到过VSTO插件,例如安装有道词典/Adobe Pro会在Office程序中嵌入插件程序。

2. VSTO开发环境的准备:

(1). 我们的PC上需要安装有Office(Office 2007及以上版本);

(2). 以Visual Studio 2015为例,在安装时需要勾选Office Development模块。如果初始安装没有安装也没关系,可以在控制面板中通过更改Visual Studio的方式进行安装。成功安装后,打开Visual Studio 2015-->新建工程-->选择Office Development模块:

3. Office 开发的模板,我们主要看(Application-Level/Template-Level)的模板,这两者的加载方式请看下面的图示:

打开Office解决方案的文档后,Microsoft Office 应用程序检查自定义文档属性,以确定是否有与文档关联的托管代码扩展。

PS: 这两者在开发上的区别就是模板不一样,别的基本没有。另外一个Application-Level是针对整个Office Word/Excel/...的定制,而Template-Level是正对Word/Excel/...模板的定制。

4. 我们以VSTO Word Addin为例,讲一下VSTO Word Addin Development中的核心对象。

Application: 代表了Word程序
 
Document: 代表了一个Word文档,一个Word Application可以有1个或者多个Document
 
Bookmark: 代表了在Word文档中一个连续的区域,它有一个起始位置和结束位置,可以用一个标识来标记这段连续的区域,这个就是Bookmark
 
Range: 代表了在Word文档中一个连续的区域,它有一个起始位置和结束位置
 
Selection: 代表了当前选中的区域;
 
更多内容,请参考:
 
我们通过新建一个Word Addin的工程来初步认识下这几个对象。
Code:
        private void ThisAddIn_Startup(object sender, System.EventArgs e)
{
Application.WindowSelectionChange += Application_WindowSelectionChange; Word.Document doc = Globals.ThisAddIn.Application.Documents.Open(@"D:\demo.docx", AddToRecentFiles: false);
} /// <summary>
/// WindowsSelectionChange事件
/// </summary>
/// <param name="Sel">选中文本</param>
private void Application_WindowSelectionChange(Word.Selection Sel)
{
if (Sel.Range.End - Sel.Range.Start > )
{
Word.Range range = Sel.Range; System.Diagnostics.Debug.WriteLine("Range Start Position: {0} Range End Position: {1}", range.Start, range.End); range.Bookmarks.Add("MyBookmark");
}
}

运行效果: 向Word的Bookmark中插入一个Bookmark:

当我们编译Word Addin工程时,会向注册表中写入插件的一些信息,例如Description, FriendlyName, LoadBehavior, Mantifest等,此时当我们单独打开Word时,插件还是会运行的。清理一下Visual Studio Word Addin工程即可。

5. 如何部署VSTO插件(以Word为例),从Visual Studio编译Word插件时,向注册表中写入的信息,我们可以利用这些注册表信息来部署Word插件,

需要注意的两个值:
LoadBehavior:3 代表了启动时自动加载。具体请参考:https://msdn.microsoft.com/en-us/library/bb386106.aspx 中Load Behavior
Manifest:指定VSTO插件的具体位置:
PS: 也可以将插件的信息写入到注册表Machine节点下:HKEY_LOCAL_MACHINE--->SOFTWARE---->Microsoft--->Office---->Word--->Addins. 这样登录这台PC的所有用户都可以使用到这个插件。
 
在部署时,我们只需要将这些注册表信息写入正确的位置即可。当然最简单的部署方式可以通过ClickOnce来进行部署。另外也可以选择其他部署方式,例如Windows Installer: 可以参考:
 
VSTO的学习资源
 
感谢您的阅读!

初识VSTO Addin开发的更多相关文章

  1. 尝试Office 2003 VSTO的开发、部署

    转载:http://www.cnblogs.com/oneivan/p/4243574.html 背景:一年前,某项目需要使用到Excel进行数据录入,考虑到很多用户还是使用XP+Office 200 ...

  2. 深入理解vsto,开发word插件的利器

    开发了vsto,客户那边也有一些反映插件安装失败或者加载不上的情况.于是我下定决定再理解下vsto的工作机制,如下图: 如上图所示,我把vsto的解决方案分为两部分,一部分是vsto Add-ins, ...

  3. ArcGIS AddIN开发异常之--“ValidateAddInXMLTask”任务意外失败

     ArcGIS AddIN开发时,产生如下异常错误 2 “ValidateAddInXMLTask”任务意外失败.System.NullReferenceException: 未将对象引用设置到对象的 ...

  4. vs多项目模板及add-in开发

    本文分2部分 第一为自定义多项目模板 第二为vs add-in开发 效果图 1.自定义模板 2. 工具菜单 3.窗口 4.工程 5.文件 ... 一. 多项目模板 单项目模板做起来很简单 选中一个项目 ...

  5. ArcGIS Add-in开发(一)--获取选定要素的属性值

    刚刚接触AE开发,记录一下自己的学习心得! 欢迎大家一起交流探讨! 最近做大赛,突然想到可以让项目更加直观的操作,就在项目中加了幅底图(底图很简单) 我想在arcmap中选中相应的要素后,在后台通过写 ...

  6. SharePoint Online Add-in 开发简介

    作者:陈希章 发表于 2017年12月22日 在 再谈SharePoint大局观 中我提到了SharePoint开发的一些新的变化,这一篇文章我将讲解SharePoint Add-in开发.其实早在2 ...

  7. dotnetcore-officeaddin-toolbox : Office 365 Add-in开发人员的工具箱

    在上一篇文章(.NET Core开源行动:一键创建Excel Add-in) 中我给大家展示了一套为Office 365 Add-in开发人员准备的模板库,你可以通过 dotnet new excel ...

  8. ArcGIS AddIn开发笔记(一)

    学习AddIn开发,遇到了些稀奇古怪的问题,网上的资料少之又少. (1)AddIn开发,主要是通过ArcMap静态变量,与主程序中的数据等进行交互 (2)failed to register Add ...

  9. ArcGIS中的AddIn开发示例

    AddIn开发的插件效率高.操作简单.容易管理.方便共享.它还可以和Python结合(后面的博文中应该会涉及到),非常强大.下面简单描述一下ArcGIS中的AddIn开发过程: 1.在安装ArcGIS ...

随机推荐

  1. CentOS完美搭建Redis3.0集群并附测试

    线上的统一聊天和推送项目使用的是redis主从,redis版本2.8.6 redis主从和mysql主从目的差不多,但redis主从配置很简单,主要在从节点配置文件指定主节点ip和端口:slaveof ...

  2. 【GoLang】GoLang UTF8 与 Unicode

    结论: 通用的UTF8编码可是Ken Thompson和Rob Pike共同发明的, 他们都是Go的作者. Go中rune对应unicode的码点, string只是UTF8编码.len(" ...

  3. ThreadPool线程池 小结

    ThreadPool类提供一个线程池,该线程池可用于发送工作项.处理异步 I/O.代表其他线程等待以及处理计时器 线程池通过为应用程序提供一个由系统管理的辅助线程池使您可以更为有效地使用线程.一个线程 ...

  4. 基于 REST 的 Web 服务:基础

    代表性状态传输(Representational State Transfer,REST)在 Web 领域已经得到了广泛的接受,是基于 SOAP 和 Web 服务描述语言(Web Services D ...

  5. cf592d

    题意:给出一个无根树,点数为10^5,所有边的长度为1.给定其中有一些点是受到攻击的. 现在要求一个人选定一个点作为起点,走遍所有的受攻击点(不用再回到起点). 需要的最短距离是多少,选定的起点是哪个 ...

  6. iOS NSObject 的 isa 属性的类型 Class

    以前对NSObject的isa属性也知道点,但是了解不深,今天看了这篇博文,感觉很好,总结一下: http://chun.tips/blog/2014/11/05/bao-gen-wen-di-obj ...

  7. php调用c/c++的一种方式

    php调用c/c++有很多方式,最常用的是通过tcp或者http去调用,通过发送请求去调用c/c++编写的cgi/fastcgi来实现,另外php还有一种直接执行外部应用程序的方式,这种方式会影响到系 ...

  8. MySQL SQL优化之in与range查询【转】

    本文来自:http://myrock.github.io/ 首先我们来说下in()这种方式的查询.在<高性能MySQL>里面提及用in这种方式可以有效的替代一定的range查询,提升查询效 ...

  9. UVALive 4949 Risk(二分网络流、SAP)

    n个区域,每个区域有我方军队a[i],a[i]==0的区域表示敌方区域,输入邻接矩阵.问经过一次调兵,使得我方边界处(与敌军区域邻接的区域)士兵的最小值最大.输出该最大值.调兵从i->j仅当a[ ...

  10. JS图表插件(柱形图、饼状图、折线图)

    http://www.open-open.com/lib/view/open1406378625726.html