Microsoft Office(Word Add-in) 开发
2010-05-07 11:43 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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· [AI/GPT/综述] AI Agent的设计模式综述