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);
}