[英]VSTO customization for Excel: event handler not working given multiple excel files are open
用于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
更改工作表数据,就会调用OnSheetChangeEventHanlder
。 但是,如果我们以相同的自定义打开两个excel文档并尝试在其中一个中编辑工作表数据,则不会调用OnSheetChangeEventHanlder。 它看起来令人困惑,因为它是文档级自定义项,这让我期望自定义项实例应该相互隔离。
总结一下:为什么存在另一个打开的excel文件会阻止事件注册或运行自定义事件处理程序?
好吧,我既无法解决此问题,也无法找到解释,最终导致了变通方法:在订阅了this.ActivateEvent
另一个事件处理程序中,将OnSheetChangeEventHandler
移除并重新连接。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.