1

如果使用特定参数启动 Office 应用程序,我的目标是简单地提供我的插件。

不幸的是,我找不到任何东西可以帮助我做到这一点。我尝试使用 Office Application Load Addin 开关/lc:Addin.dll,但没有成功。我接受的一个选项是在希望启动插件时创建所有 Office 插件注册表项,但这似乎非常笨拙并且开销很大。此外,对我来说,交易破坏者需要注册表创建提升权限才能初始化插件。

我决定让我的插件在启动时不做任何事情,除非存在某个环境变量。

为了做到这一点,我需要将功能区默认设置为不可见,并在发现 env 变量时显示功能区。或者相反,默认情况下功能区可见,并在发现 env 变量时隐藏功能区。

我尝试过的事情

  • 设置功能区的选项卡Globals.Ribbons.MyRibbon.MyTab.visible = false
  • 使功能区无效Globals.Ribbons.MyRibbon.RibbbonUi.Invalidate()
  • 将 visible 设置为 false 后使选项卡无效Globals.Ribbons.MyRibbon.RibbbonUi.InvalidateControl(tabCtrlId)

尝试的事情不包括在某些情况下尝试仅加载插件的几十件事。

4

1 回答 1

1

我想出了一个解决办法。

在深入研究基类后,AddinBase我发现了一些可供我重写的方法。

所以我覆盖了这个CreateRibbonExtensibilityObject方法。

protected override IRibbonExtensibility CreateRibbonExtensibilityObject( )
{
    if( Environment.GetCommandLineArgs( ).ToList( ).FirstOrDefault( a => a.ToLower( ).Contains( "/launchmyaddin" ) ) != null )
    {
        return null;
    }

    return base.CreateRibbonExtensibilityObject( );
}

这样做的目的是在我的开关存在时甚至阻止创建功能区,如果它存在,那么我只是传递给基类实现,以便让插件像平常一样创建我的功能区。

此外,CreateRibbonExtensibilityObject()返回一个具有 的对象,GetCustomUI( ribbonXml )以便我们可以从 xml 创建自定义功能区。这给了我们更多的权力。

我的解决方案只需要在启动时显示/隐藏一次功能区。我确实考虑过如何打开和关闭它,所以我四处寻找可以覆盖的其他成员。

我相信您可以覆盖CreateRibbonObjects( )我认为每次调用功能区无效时都会调用的成员。在这里,您可以从基类返回的集合中删除表示您希望隐藏的功能区的项目。

于 2018-03-20T20:08:43.637 回答