Copy/Paste excel 中的一个列表对象丢失了附加事件

Copy/Paste a listobject in excel lose the attached events

让我们创建一个 ListObject 并在其上附加一个事件,正如 msdn 在此处解释的那样:https://msdn.microsoft.com/en-us/library/eyfs6478.aspx

代码

在应用程序级插件中,代码将如上所示:

Worksheet worksheet = Globals.Factory.GetVstoObject(Globals.ThisAddIn.Application.ActiveWorkbook.Worksheets[1]);

Excel.Range cell = worksheet.Range["$A:$D"];
ListObject list1 = worksheet.Controls.AddListObject(cell, "list1");
list1.Selected += list1_SelectedDeselected;
list1.Deselected += list1_SelectedDeselected;

用类似的东西来查看触发的事件:

private void list1_SelectedDeselected(Excel.Range Target)
{
    Worksheet worksheet = Globals.Factory.GetVstoObject(Globals.ThisAddIn.Application.ActiveWorkbook.Worksheets[1]);

    Excel.Range cell = worksheet.Range["$A"];
    if (cell.Value2 == "foo")
    {
        cell.Value2 = "bar";
    }
    else
    {
        cell.Value2 = "foo";
    }
}

奇怪的行为 如果您 运行 在 excel 的加载项中使用此代码,您会看到这个和那个

如果您在同一作品中剪切/粘贴此tablesheet,将触发所有附加事件。

但是如果您剪切/粘贴到另一个sheet,事件将不再附加到ListObject。

是否有我不知道这种不可预测的table行为的原因?

您需要使用另一个 VSTO 对象重新订阅事件。 GetVstoObject 应该用于获取新的 Worksheet 对象。