繁体   English   中英

VSTO Excel自定义:打开多个Excel文件后,事件处理程序不起作用

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM