Ottieni l’istanza dell’applicazione Excel con C # da Handle

Ho una semplice applicazione di AC # che deve scrivere alcuni valori in intervalli di Excel di un foglio di lavoro specifico. Creo un’istanza dell’applicazione Excel se non esiste, ma se esiste voglio impostarla e prendere un’istanza se deve essere usata nel mio codice.

Io uso questo codice per creare una nuova applicazione:

Microsoft.Office.Interop.Excel app = new Microsoft.Office.Interop.Excel.Application(); app.Visible = true; 

Per ottenere l’handle di Active Excel finestra io uso questa API

 [DllImportAttribute("User32.dll")] private static extern int FindWindow(String ClassName, String WindowName); 

Come posso ottenere un’istanza dell’applicazione Excel da un handle?

 int hWnd = FindWindow(null, "Microsoft Excel - MySheet.xlsx"); Microsoft.Office.Interop.Excel app = ....(hWnd) 

Utilizzare il seguente codice per ottenere la prima istanza di Excel in esecuzione:

 oExcelApp = (Excel.Application)System.Runtime.InteropServices.Marshal.GetActiveObject("Excel.Application"); 

Esempio

 public Excel.Application StartExcel() { Excel.Application instance = null; try { instance = (Excel.Application)System.Runtime.InteropServices.Marshal.GetActiveObject("Excel.Application"); } catch (System.Runtime.InteropServices.COMException ex) { instance = new Excel.ApplicationClass(); } return instance; } 

Potrebbe essere in esecuzione più di un’istanza di Excel.

GetActiveObject (…) esamina la tabella degli oggetti in esecuzione (ROT) e ti dà l’ultima istanza di Excel che è stata aperta, non necessariamente quella corrispondente all’handle della finestra che hai.

Stai cercando AccessibleObjectFromWindow (..). Il post di Andrew Whitechapel collegato nell’altra risposta mostra come utilizzare questa funzione.

Un altro link: http://blogs.officezealot.com/whitechapel/archive/2005/04/10/4514.aspx .

È ansible utilizzare Marshal.GetActiveObject, vedere questo post del blog per i dettagli:

http://blogs.msdn.com/andreww/archive/2008/11/30/starting-or-connecting-to-office-apps.aspx