Excel的文档级VSTO自定义为工作表OnSheetChangeEventHanlder
事件注册事件处理程序 - Change
。
using Excel = Microsoft.Office.Interop.Excel;
public partial class ThisWorkbook
{
private void InternalStartup()
{
this.Open += ThisWorkbookOpen;
}
private void ThisWorkbookOpen()
{
Excel.Sheets sheets = this.Sheets;
Excel.Worksheet sheet = null;
for (int i = 1, length = sheets.Count; i <= length; i++)
{
sheet = sheets[i];
sheet.Change += OnSheetChangeEventHanlder;
}
if (sheet != null) Marshal.ReleaseComObject(sheet);
if (sheets != null) Marshal.ReleaseComObject(sheets);
}
private void OnSheetChangeEventHanlder(Excel.Range Target)
{
// ..
}
}
正如预期的那样,任何时间表数据都会被调用OnSheetChangeEventHanlder
。但是,如果我们使用相同的自定义打开两个excel文档并尝试在其中一个中编辑工作表数据,则不会调用OnSheetChangeEventHanlder。它看起来令人困惑,因为它是一个文档级别的自定义,使我期望自定义实例应该彼此隔离。
总结一下:为什么另一个打开的excel文件的存在会阻止事件注册或运行自定义事件处理程序?
答案 0 :(得分:0)
好吧,我无法解决此问题或找到解释,最后找到了解决方法:在另一个订阅OnSheetChangeEventHandler
的事件处理程序中删除并重新附加this.ActivateEvent
。