代码改变世界

Microsoft Office(Word Add-in) 开发

  onm  阅读(1131)  评论(0编辑  收藏  举报

解决方案

VSTO 2005(SE)可以扩展Office 2003(2007),以及使用Visual Basic和Visual C#创建Office 2003外接程序来创建解决方案。

Visual Studio Tools for Office包含用于文档级自定义项和应用程序级外接程序的项目模板。如果希望代码是仅当特定文档打开时运行,可创建文档级自定义项,如果是只要Microsoft Office应用程序运行就可用,可创建应用程序级外接程序。

宿主项和宿主控件是为Visual Studio Tools for Office解决方案提供编程模型的类。即,它们使得与基于COM的Microsoft Office应用程序进行交互更像与托管对象进行交互。

宿主项为Visual Studio Tools for Office解决方案中的代码提供入口点。

应用程序级外接程序使用Microsoft.Office.Tools.AddIn宿主项。此宿主项提供对宿主应用程序和成员的对象模型的访问,这些宿主应用程序和成员可用来自定义宿主应用程序的用户界面。

若要访问宿主应用程序的对象模型,可使用ThisAddIn类的Application字段。此字段返回表示宿主应用程序当前实例的对象。ThisAddIn 类以外的代码可以使用Globals.ThisAddIn.Application访问此字段。

Word 对象模型

Word提供了数百个可与之交互的对象。这些对象排列在一个与用户界面密切相关的层次结构中。层次结构如右图所示,顶部的对象是Application对象。此对象表示Word的当前实例。Application对象包含Document、Selection、Bookmark和Range对象。这些对象各自都有很多方法和属性,可以访问这些方法和属性来操作对象或与对象交互。图中存在许多重叠,是因为可以通过多种方式来访问相同类型的对象。

Application对象表示Word应用程序,是其他所有对象的父级。它的所有成员通常作为一个整体应用于 Word。可以使用该对象的属性和方法来控制Word环境。在应用程序级外接程序项目中,您可以使用ThisAddIn类的Application字段访问Application对象。在文档级项目中,可以使用ThisDocument类的Application属性访问Application对象。

Document对象是Word编程的中枢。它表示文档及其所有内容。当打开文档或创建新文档时,就创建了新的Document对象,该对象被添加到Application对象的Documents集合中。具有焦点的文档称为活动文档。它由Application对象的ActiveDocument属性表示。

Selection对象表示当前选择的区域。在Word用户界面中执行某项操作(例如,对文本进行加粗)时,应首先选择或突出显示文本,然后应用格式设置。Selection对象始终存在于文档中。如果未选中任何对象,它表示插入点。此外,所选内容可以包含多个不连续的文本块。

Range对象表示文档中的一个连续的区域,由一个起始字符位置和一个结束字符位置定义。Range对象的数量并不局限于一个。您可以在同一文档中定义多个Range对象。

注意事项

1.  在Word项目中使用C#时,必须使用ref关键字传递可选参数,而且必须传递包含实际值的变量。不能向Word方法传递文本值。

2.  C#不支持可选参数。Microsoft Visual Studio 2005 Tools for the Microsoft Office System项目包括一个名为missing的全局变量,该变量在生成的代码中被赋以值System.Type.Missing。可传递此全局变量作为每个可选参数的默认值。必须为按值传递的参数显式传递默认值。

常见问题

1.  新建Word2003 Add-in工程,关闭工程后再次打开,提示Solution升级。解决方法:如图,取消Always upgrade to installed version of Office(图中红色方块标注处)。

2.  宿主Application接口中没有新建文档事件。解决方法:新建文档事件在ApplicationEvents4_Event接口中。

3.  WordAddin按钮失去响应原因:最常见的原因是command bar buttons没有在类级别声明。最后被GC回收,Event handlers不再连接到buttons。解决方法:在类级别声明buttons变量。

4.  创建、获得样式时程序出错解决方法:遍历样式集,判断样式是否存在,但效率较低。利用Try Catch,存在样式就获得该样式,不存在就创建该样式。

5.  部署失败问题安全策略错误。解决方法:(1)给程序集签署强命名。(2)利用SetSecurity工程(详见部署安装)程序集语言设置错误。解决方法:右键单击WordAddin工程,选择属性,选择Application选项卡,点击Assembly Information按钮,更改Neutral Language为None。

常用方法

1.  获得Word编号列表

1
ListTemplate oneLevelListTemplate = Application.ListGalleries[WdListGalleryType.wdNumberGallery]        .ListTemplates.get_Item(ref index);

2.  利用反射获得添加图片对话框选择的文件的文件名

1
private static string GetPictureName(Word.Dialog dlg){    System.Type dialogType = typeof(Word.Dialog);    string path = (string)dialogType.InvokeMember("Name", System.Reflection.BindingFlags.GetProperty |            System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance, null, dlg, null);    string[] str = path.Split('\\');    string pictureNameWithExt = str[str.Length - 1];    string pictureName = pictureNameWithExt.Remove(pictureNameWithExt.IndexOf('.'));    return pictureName;}

3.常用枚举以wd开头4.光标移动方法左移6个字符示例:

1
unit = WdUnits.wdCharacter;count = 6;sel.MoveLeft(ref unit, ref count, ref missing);

5.插入公式方法。

1
object equation = "Equation.3";object range = Application.Selection.Range;Application.ActiveDocument.InlineShapes.AddOLEObject(ref equation, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref range);

6.获得Word提供的所有对话框获得插入图片对话框示例:

1
Word.Dialog dlg = Application.Dialogs[WdWordDialog.wdDialogInsertPicture];

部署安装

首先给程序及签名,右键单击WordAddin工程,选择属性,然后点击Signing选项卡,勾选Sign the assembly。

然后安装Visual Studio 2005 Tools for Office Second Edition Sample: Deploying Office Solutions Using Windows Installer Version 3。

然后添加SetSecurity工程到自己的解决方案当中。在Setup部署工程打开Custom Action Editor,在Install中添加SetSecurity工程输出文件,并设置属性中CustomActionData为

1
/assemblyName="WordHelper.dll"/targetDir="[TARGETDIR]\"/solutionCodeGroupName="WordAddIn"/solutionCodeGroupDescription="Code group for WordAddin"/assemblyCodeGroupName="WordAddin"/assemblyCodeGroupDescription="Code group for WordAddin"/allUsers=[ALLUSERS]

用来给Addin程序集添加安全策略,否则插件安装后不能正常运行。在Uninstall/Rollback中添加SetSecurity工程输出文件,并设置属性中CustomActionData为/solutionCodeGroupName="WordAddin"

 

 

下载地址:http://www.microsoft.com/downloads/details.aspx?familyid=6991e869-8d5b-45f4-91e7-b527bd236f4c&displaylang=en
参考链接:http://www.cnblogs.com/yunhuasheng/archive/2008/01/05/1027115.html

相关链接:

中文 MSDN VS Tools for Office:http://msdn.microsoft.com/zh-cn/library/d2tx7z6d.aspx
English MSDN VS Tools for Office:http://msdn.microsoft.com/en-us/library/d2tx7z6d.aspx
Office Developer Center:http://msdn.microsoft.com/zh-cn/office/default.aspx
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· [AI/GPT/综述] AI Agent的设计模式综述
点击右上角即可分享
微信分享提示