我正在使用VSTO for Excel 2007并使用IConnectionPointContainer管理excel应用程序事件,而不是直接订阅它们。现在在Office 2013之前,我没有使用VSTO但是实现了IExtensibility2接口。我曾经直接获得excel应用程序对象,并按如下方式管理excel事件:
IConnectionPoint _eventSourceConnectionPoint;
ComObjLifetimeManager _eventSourceConnectionPointLifeManager;
var _eventSource = excelApplication as IConnectionPointContainer;
_eventSource.FindConnectionPoint(ref _xlAppEventsIID, out _eventSourceConnectionPoint);
_eventSourceConnectionPointLifeManager = new ComObjLifetimeManager(_eventSourceConnectionPoint);
_eventSourceConnectionPoint.Advise(this, out _connectionCookie);
以前用过的工作非常好。现在我正在使用VSTO,我在调用_eventSource.FindConnectionPoint()方法时遇到了TargetInvocationException异常。
" 接口不支持后期绑定调用,因为它不是来自IDispatch "
除了我现在从" this.Application"中获取excel应用程序对象之外,所有的事情都与之前的相同。而不是通过IExtensibility2界面免费获取它。
答案 0 :(得分:0)
即使经过大量的研究,我也没有到达任何地方,然后我意外地降落在这里:http://blogs.msdn.com/b/vsod/archive/2010/04/07/how-to-implement-late-bound-event-handling-in-case-of-a-vsto-add-in.aspx
这解决了我的问题。对于其他有相同问题的人,您基本上需要在assemblyinfo.cs中执行以下操作:
1. Set ExcelLocale1033 attribute to false
2. Mark the assembly as COM Visible