我们如何在工作表级别禁用excel上下文菜单的删除和重命名选项

时间:2011-02-15 05:18:55

标签: c#-3.0 vsto

我的要求是,我需要工作表级别禁用“删除并重命名”选项,而不是在整个应用程序/工作簿级别。

我在Workbook.cs 文件的 ThisWorkbook_Startup事件中完成了以下操作

Globals.ThisWorkbook.Application.CommandBars["Ply"].Controls["&Delete"].Enabled = false;
Globals.ThisWorkbook.Application.CommandBars["Ply"].Controls["&Rename"].Enabled = false;

但是此代码适用于整个工作簿级别。假设我想仅对Sheet1执行相同操作,而不是对其他工作表执行相同操作。

我们怎么做?

我使用的是Excel VSTO 2007,C#是语言

由于

1 个答案:

答案 0 :(得分:1)

我找到了答案。我们需要从 Workbook的Startup和SheetActivated Event 中调用 DisableContextMenuItems()方法。

将在加载Addin时第一次调用启动事件。对于每个工作表更改或激活,SheetActivate事件都将被触发。

private void ThisWorkbook_Startup(object sender, System.EventArgs e)
{

   DisableContextMenuItems();

}

void ThisWorkbook_SheetActivate(object Sh)
{
   DisableContextMenuItems(); 
}

private static void DisableContextMenuItems()
{
   var sheet = Globals.ThisWorkbook.ActiveSheet as ExcelXP.Worksheet;
   var name = sheet.Name;

    if (name != "Sheet1")
    {
       Globals.ThisWorkbook.Application.CommandBars["Ply"].Controls["&Delete"].Enabled = true;
       Globals.ThisWorkbook.Application.CommandBars["Ply"].Controls["&Rename"].Enabled = true;
    }
    else
    {
       Globals.ThisWorkbook.Application.CommandBars["Ply"].Controls["&Delete"].Enabled = false;
       Globals.ThisWorkbook.Application.CommandBars["Ply"].Controls["&Rename"].Enabled = false;
    }
}

由于