在加载工作簿之前调用Excel外接程序OnConnection



有人知道为什么,当我加载工作簿(双击已经创建的.xls文件)时,我的OnConnection在工作簿加载之前在我的加载项上被调用。这将导致我的((Microsoft.Office.Interop.Excel.Application)application).ActiveWorkbook为空。

如果我只是从Excel快捷方式打开Excel,它将加载Book1.xls(默认的书),我的ActiveWorkbook将被实例化。

为什么是这样的,我能做些什么来让我的ActiveWorkbook加载之前我的OnConnection被调用,当我从一个文件加载。

我使用的是Excel 2003 SP3

这是因为加载插件是在加载工作簿之前加载的,这就是OnConnection触发的时候。这是设计好的。此外,它只触发一次,所以如果有人只是使用文件->打开另一个工作簿,OnConnection不会再次触发。把OnConnection看作一个初始化的地方,比如连接到一个事件。

相反,你应该处理WorkbookOpen事件来做你的逻辑,并在OnConnection上连接它。

例如:

public void OnConnection(object application, object connectMode, object addInInst, ref Array custom)
{
    var excelApplication = ((Microsoft.Office.Interop.Excel.Application) application);
    //Start listening to the WorkbookOpen event
    excelApplication.WorkbookOpen += WorkbookOpen;
}
private void WorkbookOpen(Workbook wb)
{
    //A workbook was opened. Do your logic here.
}

最新更新