有人知道为什么,当我加载工作簿(双击已经创建的.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.
}