使用 C# 将自定义命令栏菜单添加到特定的 excel table

add custom commandbar menu to a specific excel table using c#

我在 table 右键单击​​中有一个自定义命令栏菜单,但我需要它特定于一个 table 并且不希望它显示在任何其他 table 上秒。这可能吗? 如果没有,还有其他建议吗?

    editSourceBtn = (Office.CommandBarButton)tableCommandBar.Controls.Add(1, missing, missing, missing, missing);
    editSourceBtn.Style = Office.MsoButtonStyle.msoButtonCaption;
    editSourceBtn.Caption = "Edit Source";
    editSourceBtn.Tag = "Edit Source";
    editSourceBtn.Click +=new Office._CommandBarButtonEvents_ClickEventHandler(editSourceBtn_Click);

是的,这是可能的。但事实是不再使用命令栏。他们被弃用了。您需要改用 Fluent UI 控件。您可以使用回调,例如 getEnabled 或 getVisible,并且在需要时您可以调用 IRibbonUI 接口的 Invalidate 或 InvalidateControl 方法来调用您的回调。

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 的更多信息:

我找到了解决方案,我在一个特定的选项卡中有一个 table 并且想要右键单击上下文,如果 sheet 是我的那个,我在 if 语句中指定它需要并且所选范围与 table 范围相交,它会添加右键单击按钮。

private void Application_SheetBeforeRightClick(object Sh, Excel.Range Target, ref bool Cancel)
    {
        Excel.Range ResourceTable;
        Excel.Range IntersectRange;

        foreach (Office.CommandBarControl ctrl in tableCommandBar.Controls)
        {
            if (ctrl.Tag == "Edit" || ctrl.Tag == "Delete") ctrl.Delete();
        }
        editBtn = null;

        if (this.Application.ActiveSheet.Name == "Mysheet" && this.Application.ActiveSheet.ListObjects.Count > 0)  
        {

            ResourceTable = this.Application.ActiveWorkbook.Worksheets["Mysheet"].ListObjects["myTable"].Range;
            IntersectRange = this.Application.Intersect(ResourceTable, Target);

            if (IntersectRange != null & ResourceTable.Rows.Count > 2 && editSourceBtn == null)
            {
                editBtn = (Office.CommandBarButton)tableCommandBar.Controls.Add(1, missing, missing, missing, missing);
                editBtn.Style = Office.MsoButtonStyle.msoButtonCaption;
                editBtn.Tag = "Edit";
                editBtn.Click += new Office._CommandBarButtonEvents_ClickEventHandler(editSourceBtn_Click);

            }
        }
    }

希望对您有所帮助。