2009-08-12 96 views
1

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

如果在Office 2003中打开文档,我想保持此功能不变,但如果在Office 2007中打开该文档,我希望读入一个xml文件,其中描述了我的新功能区选项卡以及所有按钮。我已经能够在网上找到的所有东西似乎只会导致功能区文件只有在你有一个非常具体的魔法组合的情况下才能加载(在Visual Studio中生成并且可以工作,但没有关于如何将它部署到用户的信息框),并且只有当您拥有最初使用Office属性的Visual Studio工具创建的整个项目时才有效,我目前没有这些工具。

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

回答

2

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

我对XML扩展包并不熟悉,但是如果您必须将它们安装在用户的PC上,也许您可​​以安装一个加载项,以便为您加载相应的功能区XML。

+0

我所见过的所有关于COM加载项的内容都说它们是以应用程序加载的,而不是基于每个文档。不幸的是,我不能这样处理。我已经想出了如何在每个文档基础上添加功能区,但通过这种方式,onAction函数似乎必须是VBA宏,而且我很难弄清楚如何让我的VBA宏调用我在C#中的事件处理程序。如果您对此有所了解,请为此问题添加一个答案:http://stackoverflow.com/questions/1288717/is-it-possible-to-call-c-dlls-from-visual-basic-code-contained -in-a-word-2007-fi – 2009-08-18 14:06:24

+0

我的猜测是你必须让.NET类COM以某种方式可见到VBA(这是COM基础)可以看到并与他们一起工作。这是我的专长之外。 – 2009-08-18 15:05:53

+0

我找到了。仅供参考。 https://social.msdn.microsoft。com/Forums/office/zh-CN/ddf4a3fe-16af-440d-9697-9a3bf53b52c3/customize-microsoft-word-2007-in-cnet-windows-application-using-microsoftofficeinteropword?forum = worddev 我想不可能。 .. – 2017-10-23 14:01:10

0

这并不像看起来那么难。

如果你已经将你的功能区按钮连接到文档中的某些VBA宏,那么你只需要在你的VBA项目中添加一个引用到你的com可见.net程序集。

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

谷歌“VBA .NET调用”

它并不难,标志类作为COM可见,与一个ProgID属性声明它,使公众的方法,确保您的方法返回简单类型,并使用regasm注册装配在目标机器上(开发箱上不需要)。

相关问题