以编程方式将功能区添加到Microsoft Word 2007

时间:2009-08-12 21:44:43

标签: c# ms-word ribbon

我有一个项目,使用XML扩展包为Microsoft Word添加功能。目前,当打开我们给客户的文档时,它会加载我们的包,它执行SmartDocInitialize方法,该方法使用Microsoft.Office.Core.CommandBar.Controls.Add等将内容添加到主菜单和工具栏。如果不进行修改,在Word 2007中打开时,这些按钮会添加到“加载项”功能区选项卡上,但这并不理想,因为按钮都很小,没有正确分组,并且无法将“加载项”选项卡添加到文档加载时的正面。

如果在Office 2003中打开文档,我想保持此功能相同,但如果在Office 2007中打开文档,我想读取一个xml文件,该文件描述了我的新功能区选项卡和所有纽扣。我能够在网上找到的所有内容似乎只会导致Ribbon文件被加载,如果你有一个非常特殊的魔法组合(在Visual Studio中构建它可以工作,但没有关于如何将它部署到用户的信息框)并且只有在最初使用Office属性的Visual Studio工具创建的整个项目时才会起作用,我目前没有。

我们的开发环境是XP,Visual Studio 2005,C#,.NET 2.0

2 个答案:

答案 0 :(得分:2)

功能区UI不像旧的CommandBars UI那样编程。我认为你不能做你想做的事。据我所知,以编程方式修改功能区UI的唯一方法是使用(COM)外接程序实现IRibbonExtensibility接口,并从GetCustomUI方法返回自定义XML文件(使用功能区定义)。无法像使用CommandBars UI一样添加或删除一个按钮。这完全不同。我不相信你可以从文档中的某些宏做你想做的事。

我不熟悉XML扩展包,但是如果你必须在用户的PC上安装它们,也许你可以安装一个加载项,它可以为你加载适当的功能区XML。

答案 1 :(得分:0)

这并不像看起来那么难。

如果您已将功能区按钮连接到文档中的某些VBA宏,则只需将VBA项目中的引用添加到com可见.net程序集中。

.net程序集除了标记为com可见之外(因此它在引用对话框中显示为类型库),还必须设置一些可以从VBA调用的方法。

google“vba .net callable”

不难,将类标记为com可见,使用ProgID属性声明它,将方法设为public,确保方法返回简单类型,并使用regasm在目标计算机上注册程序集(dev框中不需要)