Сразу после небольшой помощи с поздним связыванием.
Я пытаюсь поздно связать 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);
}
Есть идеи?
Приветствия
Dale.