public void Initialize() { Logger.Provider.Info("WorkbookIntelliSenseProvider.Initialize"); _xmlProvider.Initialize(); // The events are just to keep track of the set of open workbooks, var xlApp = (Application)ExcelDnaUtil.Application; xlApp.WorkbookOpen += Excel_WorkbookOpen; xlApp.WorkbookBeforeClose += Excel_WorkbookBeforeClose; xlApp.WorkbookAddinInstall += Excel_WorkbookAddinInstall; xlApp.WorkbookAddinUninstall += Excel_WorkbookAddinUninstall; lock (_workbookRegistrationInfos) { foreach (Workbook wb in xlApp.Workbooks) { var name = wb.Name; if (!_workbookRegistrationInfos.ContainsKey(name)) { WorkbookRegistrationInfo regInfo = new WorkbookRegistrationInfo(name); _workbookRegistrationInfos[name] = regInfo; regInfo.Refresh(); RegisterWithXmlProvider(wb); } } if (ExcelDnaUtil.ExcelVersion >= 14.0) { foreach (AddIn addIn in xlApp.AddIns2) { if (addIn.IsOpen && Path.GetExtension(addIn.FullName) != ".xll") { // Can it be "Open" and not be loaded? var name = addIn.Name; Workbook wbAddIn; try { // TODO: Log wbAddIn = xlApp.Workbooks[name]; } catch { // TODO: Log continue; } WorkbookRegistrationInfo regInfo = new WorkbookRegistrationInfo(name); _workbookRegistrationInfos[name] = regInfo; regInfo.Refresh(); RegisterWithXmlProvider(wbAddIn); } } } } }
void Excel_WorkbookAddinInstall(Workbook wb) { var name = wb.Name; try { var regInfo = new WorkbookRegistrationInfo(name); lock (_workbookRegistrationInfos) { _workbookRegistrationInfos[name] = regInfo; RegisterWithXmlProvider(wb); OnInvalidate(); } } catch (Exception ex) { Logger.Provider.Error(ex, $"Unhandled exception in {nameof(Excel_WorkbookAddinInstall)}, Workbook: {name}"); } }
void Excel_WorkbookOpen(Workbook wb) { var name = wb.Name; try { var regInfo = new WorkbookRegistrationInfo(name); lock (_workbookRegistrationInfos) { _workbookRegistrationInfos[name] = regInfo; RegisterWithXmlProvider(wb); OnInvalidate(); } } catch (Exception ex) { Logger.Provider.Error(ex, string.Format("Unhandled exception in {0}, Workbook: {1}", "Excel_WorkbookOpen", name)); } }
public void Initialize() { Logger.Provider.Info("WorkbookIntelliSenseProvider.Initialize"); _xmlProvider.Initialize(); // The events are just to keep track of the set of open workbooks, var xlApp = (Application)ExcelDnaUtil.Application; xlApp.WorkbookOpen += Excel_WorkbookOpen; xlApp.WorkbookBeforeClose += Excel_WorkbookBeforeClose; xlApp.WorkbookAddinInstall += Excel_WorkbookAddinInstall; xlApp.WorkbookAddinUninstall += Excel_WorkbookAddinUninstall; Logger.Provider.Verbose("WorkbookIntelliSenseProvider.Initialize - Installed event listeners"); lock (_workbookRegistrationInfos) { Logger.Provider.Verbose("WorkbookIntelliSenseProvider.Initialize - Starting Workbooks loop"); foreach (Workbook wb in xlApp.Workbooks) { var name = wb.Name; Logger.Provider.Verbose($"WorkbookIntelliSenseProvider.Initialize - Adding registration for {name}"); if (!_workbookRegistrationInfos.ContainsKey(name)) { WorkbookRegistrationInfo regInfo = new WorkbookRegistrationInfo(name); _workbookRegistrationInfos[name] = regInfo; regInfo.Refresh(); RegisterWithXmlProvider(wb); } } // NOTE: This access to AddIns2 might have caused long load delays //if (ExcelDnaUtil.ExcelVersion >= 14.0) //{ // foreach (AddIn addIn in xlApp.AddIns2) // { // if (addIn.IsOpen && Path.GetExtension(addIn.FullName) != ".xll") // { // // Can it be "Open" and not be loaded? // var name = addIn.Name; // Workbook wbAddIn; // try // { // // TODO: Log // wbAddIn = xlApp.Workbooks[name]; // } // catch // { // // TODO: Log // continue; // } // WorkbookRegistrationInfo regInfo = new WorkbookRegistrationInfo(name); // _workbookRegistrationInfos[name] = regInfo; // regInfo.Refresh(); // RegisterWithXmlProvider(wbAddIn); // } // } //} Logger.Provider.Verbose($"WorkbookIntelliSenseProvider.Initialize - Checking Add-Ins"); var loadedAddIns = Integration.XlCall.Excel(Integration.XlCall.xlfDocuments, 2) as object[, ]; if (loadedAddIns == null) { // This is normal if there are none Logger.Provider.Verbose($"WorkbookIntelliSenseProvider.Initialize - DOCUMENTS(2) returned null"); return; } for (int i = 0; i < loadedAddIns.GetLength(1); i++) { var addInName = loadedAddIns[0, i] as string; Logger.Provider.Verbose($"WorkbookIntelliSenseProvider.Initialize - Checking Add-In {addInName}"); if (addInName != null && Path.GetExtension(addInName) != ".xll") // We don't actually expect the .xll add-ins here - and they're taken care of elsewhere { // Can it be "Open" and not be loaded? var name = addInName; Workbook wbAddIn; try { // TODO: Log wbAddIn = xlApp.Workbooks[name]; } catch { // TODO: Log continue; } Logger.Provider.Verbose($"WorkbookIntelliSenseProvider.Initialize - Adding registration for add-in {name}"); WorkbookRegistrationInfo regInfo = new WorkbookRegistrationInfo(name); _workbookRegistrationInfos[name] = regInfo; regInfo.Refresh(); RegisterWithXmlProvider(wbAddIn); } } } }