按需加载 excel 色带

Load excel Ribbon on demand

我想为我的 Excel 插件添加功能,以便我可以按需加载不同的功能区。

目前我正在尝试将功能区导出到 XML 并加载它

private Microsoft.Office.Core.IRibbonExtensibility ribbonObj;
protected override Microsoft.Office.Core.IRibbonExtensibility CreateRibbonExtensibilityObject()
{
    DialogResult RibbonToLoad = MessageBox.Show("Yes = V2  No = V3", "Select Version", MessageBoxButtons.YesNo);
    switch (RibbonToLoad)
    {
        case DialogResult.Yes:
           ribbonObj = new RibbonV2();
           return ribbonObj;
        case DialogResult.No:
           ribbonObj = new RibbonV3();
           return ribbonObj;
     }

    return new RibbonV2();
}

问题是我找不到如何切换此功能区。我没有在 Globals. 对象中找到它。

我也尝试过不导出到 XML,但我也无法在 运行 时实现不同功能区的按需加载(例如,单击 WPF 上的按钮 window...)

知道如何得到这个吗?我希望有可能在同一个插件上加载不同的色带(但一次只会出现一个)

您无法管理加载功能区控件的过程。但是您可以在运行时更改控件的可见性。 IRibbonUI 接口提供 Invalidate 和 InvalidateControl 方法,允许触发回调,您可以在运行时更改可见性 (getVisible)。

在下面的示例中,启动主机应用程序会触发 onLoad 事件过程,然后调用一个过程来创建表示功能区的对象 UI。接下来,定义一个回调过程,使 UI 上的所有控件无效,然后刷新 UI.

以下是用于 Office 加载自定义功能区的 XML 标记:

<customUI … onLoad=”MyAddInInitialize” …>

onLoad事件的回调方法如下:

Dim MyRibbon As IRibbonUI

Sub MyAddInInitialize(Ribbon As IRibbonUI)
    Set MyRibbon = Ribbon
End Sub

Sub myFunction()
    ‘ Invalidates the caches of all of this add-in’s controls 
    MyRibbon.Invalidate()            
End Sub

您可以在 MSDN 中的以下系列文章中阅读有关功能区 UI 的更多信息: