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 对象。
让我们创建一个 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 对象。