【问题标题】:Programatically adding a Ribbon to Microsoft Word 2007以编程方式将功能区添加到 Microsoft Word 2007
【发布时间】:2009-08-12 21:44:43
【问题描述】:

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

如果文档在 Office 2003 中打开,我希望保持此功能不变,但如果文档在 Office 2007 中打开,我希望读取描述我的新功能区选项卡和所有纽扣。我在网上找到的所有东西似乎都导致功能区文件只有在你有一个非常具体的魔法组合时才会被加载(在 Visual Studio 中构建并且它可以工作,但没有关于如何将它部署给用户的信息框),并且只有在您最初使用 Visual Studio 工具为 Office 属性创建的整个项目时才有效,而我目前没有。

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

【问题讨论】:

    标签: c# ms-word ribbon


    【解决方案1】:

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

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

    【讨论】:

    • 我所看到的 COM 插件的所有内容都表明它们是随应用程序加载的,而不是基于每个文档。不幸的是,我无法像这样处理它。我已经想出了如何在每个文档的基础上添加功能区,但是通过这种方式,onAction 函数似乎必须是一个 VBA 宏,而且我很难弄清楚如何让我的 VBA 宏调用我在 C# 中的事件处理程序。如果您对此有所了解,请添加此问题的答案:stackoverflow.com/questions/1288717/…
    • 我猜你必须让 .NET 类 COM 以某种方式对 VBA(这是 COM 基础)可见并可以使用它们。不过,这超出了我的专业范围。
    • 我找到了这个。仅供参考。 social.msdn.microsoft.com/Forums/office/en-US/…我认为不可能...
    【解决方案2】:

    这并不像看起来那么难。

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

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

    谷歌“vba .net 可调用”

    这并不难,将类标记为 com 可见,使用 ProgID 属性声明它,公开方法,确保您的方法返回简单类型,并使用 regasm 在目标机器上注册程序集(在开发盒上不需要) .

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-12-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多