J'ai une application simple C # qui doit écrire certaines valeurs dans une gamme Excel d'une feuille de calcul spécifique. Je crée une instance d'application Excel s'il n'existe pas, mais si vous souhaitez que j'existerais, je souhaite définir l'actif et prendre une instance s'il utilise dans mon code.
J'utilise ce code pour créer une nouvelle application: P> XXX PRE>
Pour obtenir la poignée de la fenêtre Excel active J'utilise cette API P>
int hWnd = FindWindow(null, "Microsoft Excel - MySheet.xlsx"); Microsoft.Office.Interop.Excel app = ....(hWnd)
3 Réponses :
Utilisez le code suivant pour obtenir la première instance d'exécution d'Excel:
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; }
Pour moi, instance = nouveau Excel.ApplicationClass (); code> n'a pas fonctionné. J'ai dû utiliser
instance = nouvelle excellente.application (); code>.
@Davidmurdoch C'est le résultat d'un Modification de VS2010 pour l'intégration des types Interop . Passer à Application () Code> Over
ApplicationClass () CODE> est une solution de contournement, vous obtenez le même résultat (même s'il semble que vous instanciant une interface!).
Vous pouvez utiliser Marshal.getacerObject, voir ce blog Publier pour plus de détails: P>
http : //blogs.msdn.com/andreww/archive/2008/11/30/Starting-or-connecting-a-office-apps.aspx P>
Il pourrait y avoir plus d'une instance Excel en cours d'exécution. P>
getactiveObject (...) regarde dans la table d'objet en marche (pourrir) et vous donnerait la dernière instance Excel ouverte - pas nécessairement celle correspondant avec la poignée de la fenêtre que vous avez. P>
Vous recherchez accessibleObjectFromwindow (..). Andrew Whitechapel La publication liée à l'autre réponse montre comment utiliser cette fonction. P>
Un autre lien - http://blogs.officezealot.com /whitechapel/archive/2005/04/10/4514.aspx . P>
Les liens sont cassés.