稍后帮助后期绑定。
我正在尝试延迟绑定excel,我没有任何问题这样做。只有当我有一个以上的excel实例打开时,才遇到一些问题。
我希望能够确定要绑定到哪个excel实例(以及链接事件等)。主要原因是我有一个应用程序从第三方工具打开excel文档,并且不处理事件。我希望能够利用我知道可以捕获事件的特定excel实例。唯一的问题是如果用户已经打开了excel(无论如何)。
如果在绑定后打开excel,显然,我没有遇到问题。只有当excel已经打开时才会这样。
似乎绑定是在第一个打开的实例中完成的。
以下是实际代码:
Type excelType = Type.GetTypeFromProgID("Excel.Application");
// Throw exception if the type wasn't found
if (excelType == null)
throw new Exception(error);
//Get the Excel.Application Type by creating a new type instance
excelApplication = Marshal.GetActiveObject("Excel.Application");
//Throw exception if the object couldn't be created
if (excelApplication == null)
throw new Exception(error);
this.withEvents = withEvents;
//Create link between the Word.Applications events and the ApplicationEvents2_WordEvents class
if (this.withEvents)
{
excelEvents = new ExcelApplicationEvents();
//holds the connection point references of the Word.Application object
IConnectionPointContainer connectionPointContainer = excelApplication as IConnectionPointContainer;
//Find the connection point of the GUID found from Red Gate's .Net Reflector
Guid guid = new Guid("00024413-0000-0000-C000-000000000046");
connectionPointContainer.FindConnectionPoint(ref guid, out connectionPoint);
//Advise the Word.Application to send events to the event handler
connectionPoint.Advise(excelEvents, out sinkCookie);
excelEvents.WorkbookBeforeSaveEvent += new EventHandler<WorkbookEventArgs>(ExcelEventsWorkbookBeforeSaveEvent);
}
任何想法?
干杯,
戴尔。
答案 0 :(得分:4)
获取Excel的特定实例需要您使用AccessibleObjectFromWindow API。
Andrew Whitechapel在文章Getting the Application Object in a Shimmed Automation Add-in中对此进行了详细解释。
然而,你想要的是使用后期绑定来执行它。 divo此处详细介绍了这一点:How to use use late binding to get excel instance。