Excel Interop Worksheet SelectionChange未附加在打开的工作簿上

时间:2016-05-18 23:41:13

标签: c# excel excel-interop excel-dna

在excel 2010中,使用excel dna和excel互操作我附加到每个工作表的选择更改。
我正在使用app.WorkbookActivate并尝试枚举打开的工作簿。

通过工作簿激活它适用于新书/工作表。 但是 - 对于打开的工作簿,它没有附加。没有错误,它只是不起作用

如果您打开新工作簿然后切换回

,它将附加到该原始工作簿

任何人都知道为什么?

这是代码。

using ExcelDna.Integration;
using XL = Microsoft.Office.Interop.Excel; 

....
/// in an init method
//add event listeners to open work books and on new work books
XL.Application xlapp = (XL.Application)ExcelDnaUtil.Application;
xlapp.WorkbookActivate += Xlapp_WorkbookActivate;
ListenOnOpenWorkBooks();

private static void ListenOnOpenWorkBooks()
{
    XL.Application xlapp = (XL.Application)ExcelDnaUtil.Application;
    foreach (XL.Workbook wb in xlapp.Workbooks)
    {
        foreach (XL.Worksheet s in wb.Sheets)
        {
            s.SelectionChange += S_SelectionChange;
        }
    }
}

private static void Xlapp_WorkbookActivate(XL.Workbook Wb)
{
    //TODOL check if already listening
    foreach (XL.Worksheet s in Wb.Sheets)
    {
        s.SelectionChange += S_SelectionChange;
    }
}

private static void S_SelectionChange(XL.Range range)
{
     ///do something
}

1 个答案:

答案 0 :(得分:1)

我找到了解决方法,我可以使用应用程序事件处理程序来监听所有工作表更改。发布此处以防其他人遇到此问题。

XL.Application xlapp = (XL.Application) ExcelDnaUtil.Application;
xlapp.SheetSelectionChange += Xlapp_SheetSelectionChange;