3

我正在修改 Excel 文件的功能区,隐藏所有默认和上下文选项卡,但只显示我自己的选项卡。但是,一旦安装了带有自己选项卡的任何加载项,这些选项卡仍会显示,因为我不知道如何解决它们。

我知道您可以使用 删除所有选项卡<ribbon startFromScratch="true">,但我需要将它们保留在原处(我实际上使用 getVisible 回调对用户隐藏它们,但将它们显示给管理员)。

因此,以下问题:

  1. 有没有办法为所有未知的标签应用“默认”getVisible回调(我想答案是否定的)
  2. 如何找出其他加载项选项卡的 tabID
  3. 鉴于 PowerPivot 越来越普遍(尤其是在 Excel 2013 中) - 此选项卡的 tabID 是什么?
4

2 回答 2

3

这是一个很棒的问题,几乎没有关于使用第三方功能区的文档或示例。我已经做了很多挖掘工作,可以帮助你完成大部分你想要的事情。我会回答你的问题有点乱,但这里有。

3) PowerPivot 插件的选项卡 ID 是限定符 ID(因此必须与 idQ 一起使用)并且是tabGemini. 您必须在名称空间中使用它:Microsoft.AnalysisServices.Modeler.FieldList. 您可以通过向架构添加命名空间来检查这一点:

xmlns:x1="Microsoft.AnalysisServices.Modeler.FieldList"

然后在声明选项卡的 id 时,使用以下命令在 PowerPivot 选项卡之前插入选项卡:

insertBeforeQ="x1:tabGemini"

2) 我很难找到 PowerPivot 的选项卡 ID,因为它是 VSTO COM 插件,因此您无法像使用 .xlam 文件那样访问 XML。答案很简单,但您需要 Office 2010 或更高版本。打开 Excel 并打开您感兴趣的插件,转到文件菜单,然后转到选项。选择自定义功能区,然后在顶部窗口的右侧选择自定义功能区:主选项卡。现在取消选中您感兴趣的插件,然后点击底部的 Import/Export 以导出 XML 模式。在文本编辑器中打开这个文件,你可以看到他们是如何声明他们的标签 ID 的。

1) 我认为您在 getVisible 回调中遇到的问题是,如果有人在您之后加载加载项,无论您如何标记 XML,它都会覆盖您所做的任何事情。以下内容来自 Fluent Ribbon for Developers FAQ (http://msdn.microsoft.com/en-us/library/office/aa722523%28v=office.12%29.aspx#a16c7df5-93f3-4920-baa8-7b7290794c15_FAQ )

当两个加载项尝试重新利用相同的内置控件时会发生什么?尝试重新调整控件用途的最后一个加载项将成为活动加载项。

现在我没有比这更进一步,但是如果您可以将此板架构导入/导出到 Office,那么如果您可以找到此 get 的导入位置,也许您可​​以使用文件脚本对象在 VBA 中手动覆盖它。显然,只有当它存储为文本时。有点远射,但值得进一步研究?祝你好运!

于 2013-01-24T23:37:50.753 回答
1

PowerPivot 选项卡是一个 COM 加载项。要查看它的 progID 和其他 COM 加载项,请使用:

Sub ListCOMAddins()
Dim lngRow As Long, objCOMAddin As COMAddIn
lngRow = 1
With ActiveSheet
      For Each objCOMAddin In Application.COMAddIns
         .Cells(lngRow, "A").Value = objCOMAddin.Description
         .Cells(lngRow, "B").Value = objCOMAddin.Connect
         .Cells(lngRow, "C").Value = objCOMAddin.progID
         lngRow = lngRow + 1
      Next objCOMAddin
End With
End Sub`

在我的例子中,PowerPivot 选项卡的 progID 是“Microsoft.AnalysisServices.Modeler.FieldList”。因此,要关闭选项卡,请使用:

Private Sub Workbook_Open()

   Application.COMAddIns("Microsoft.AnalysisServices.Modeler.FieldList").Connect = False

End Sub
于 2015-03-13T04:41:05.840 回答