按需加载excel功能区

时间:2015-01-14 09:58:19

标签: c# office-interop ribbon excel-addins

我想在我的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窗口上的按钮......)

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

1 个答案:

答案 0 :(得分:1)

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

在以下示例中,启动主机应用程序会触发onLoad事件过程,然后该过程将调用创建表示Ribbon 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的更多信息: