VSTO ListObject 重命名事件
VSTO ListObject rename event
是否有可用于处理 Excel table (ListObject) 重命名的事件? SheetChange
事件似乎不会因名称更改而触发。
回答我自己的问题:看起来没有为此举办的活动。
我使用以下代码订阅了所有工作簿事件,其中 none 会在重命名 Range 或 ListObject 时触发。
警告:出于某种原因,我无法获得活动 sheet 对象的事件列表,可能是 COM 互操作的东西(GetEvents() returns 一个空数组),我做到了没有时间去调查。 sheet 对象上有可能为此发生了一个事件,尽管我怀疑这不太可能。
foreach (var eventInfo in workbook.GetType().GetEvents())
{
string name = eventInfo.Name;
var parameters = eventInfo.EventHandlerType
.GetMethod("Invoke")
.GetParameters()
.Select(parameter => Expression.Parameter(parameter.ParameterType))
.ToArray();
var handler = Expression.Lambda(
eventInfo.EventHandlerType,
Expression.Call(Expression.Constant(new System.Action(() => Trace.WriteLine($"Event: {name}"))), "Invoke", Type.EmptyTypes),
parameters)
.Compile();
eventInfo.AddEventHandler(workbook, handler);
}
是否有可用于处理 Excel table (ListObject) 重命名的事件? SheetChange
事件似乎不会因名称更改而触发。
回答我自己的问题:看起来没有为此举办的活动。
我使用以下代码订阅了所有工作簿事件,其中 none 会在重命名 Range 或 ListObject 时触发。
警告:出于某种原因,我无法获得活动 sheet 对象的事件列表,可能是 COM 互操作的东西(GetEvents() returns 一个空数组),我做到了没有时间去调查。 sheet 对象上有可能为此发生了一个事件,尽管我怀疑这不太可能。
foreach (var eventInfo in workbook.GetType().GetEvents())
{
string name = eventInfo.Name;
var parameters = eventInfo.EventHandlerType
.GetMethod("Invoke")
.GetParameters()
.Select(parameter => Expression.Parameter(parameter.ParameterType))
.ToArray();
var handler = Expression.Lambda(
eventInfo.EventHandlerType,
Expression.Call(Expression.Constant(new System.Action(() => Trace.WriteLine($"Event: {name}"))), "Invoke", Type.EmptyTypes),
parameters)
.Compile();
eventInfo.AddEventHandler(workbook, handler);
}