Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1440 connectés 

  FORUM HardWare.fr
  Programmation
  C#/.NET managed

  Récupérer toutes les instances d'Excel

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Récupérer toutes les instances d'Excel

n°2037091
Arwon
Posté le 19-11-2010 à 09:45:39  profilanswer
 

Hello,
 
J'arrive a récupérer une instance d'Excel avec  
 
GetObject(, "Excel.Application" )
 
 
par contre impossible de récupérer toutes les objets des instances d'excel s'il y en a plusieurs. J'arrive par contre a récupérer les processus de ces instances avec
 
 
Process.GetProcessesByName("Excel" )
 
 
J'ai beau cherché sur internet, je ne trouve que des personnes ayant le même problème mais avec aucune solution apportée... Est-ce possible de récupérer l'objet Excel.Application avec son ID ? ou avez-vous une autre idée de comment récupérer ces instances ?
 
Merci d'avance pour votre aide


Message édité par Arwon le 19-11-2010 à 10:52:04
mood
Publicité
Posté le 19-11-2010 à 09:45:39  profilanswer
 

n°2037147
breizhbugs
Posté le 19-11-2010 à 12:37:22  profilanswer
 

Hello,
Une piste là: http://objectmix.com/dotnet/104447 [...] esses.html
Il semblerait que ce soit avec le nom du document que l'on puisse y accéder


---------------
Seul Google le sait...
n°2037167
Arwon
Posté le 19-11-2010 à 13:42:32  profilanswer
 

merci pour le lien, après avoir fouillé un peu je peux effectivement récupérer les différentes instances à partir des noms des fichiers :
 
GetObject(nomCompletDuFichierExcel).Application
 
le problème que j'ai maintenant, c'est comme retrouver tous les noms de fichiers ouverts. Je pourrais ajouter un bouton pour ouvrir les fichiers Excel depuis mon programme et ainsi récupérer facilement les instances mais ce n'est pas vraiment le but... il suffit qu'un fichier soit ouvert autrement que par mon programme et il est sera pas récupérer.
en plus lorsque j'utilise GetObject, cela ne me ressors pas en erreur si le fichier est fermé mais il m'ouvre le fichier dans l'instance d'excel active et le fichier reste invisible. Donc il faut que je sois absolument sûr que le fichier soit ouvert avant de récupérer l'objet.
 
est-ce qu'il y a un moyen de récupérer les noms des fichiers ouverts ??

n°2037184
breizhbugs
Posté le 19-11-2010 à 14:12:51  profilanswer
 

J'ai pas excel d'installé, mais ne sont ils pas marqué dans le titre de la fenetre excel?


---------------
Seul Google le sait...
n°2037189
Arwon
Posté le 19-11-2010 à 14:20:37  profilanswer
 

seulement le nom du fichier, pour que ca fonctionne avec GetObject il faut le nom complet... donc avec le chemin. J'ai déjà essayé ça :(

n°2037200
Arwon
Posté le 19-11-2010 à 15:16:00  profilanswer
 

j'ai finalement réussi...
 
j'ai regardé plus en détail le lien que tu m'as transmis, avec le code qu'il utilisait, il essayait de récupérer directement les instances d'Excel mais en modifiant le GUID pour mettre celui d'un Workbook, on arrive a récupérer les fichiers ouverts.
 
Je comprend pas trop comment tout ca fonctionne mais tant que ca marche ! voici le code au cas ou d'autres personnes seraient interessés :
 
 
 

Code :
  1. Dim pp As IEnumMoniker = Nothing
  2. Dim instance As IBindCtx = Nothing
  3. Dim pprot As IRunningObjectTable = Nothing
  4. Dim iError As Integer
  5. iError = CreateBindCtx(0, instance)
  6. instance.GetRunningObjectTable(pprot)
  7. pprot.EnumRunning(pp)
  8. pp.Reset()
  9. Dim monikerContainer() As IMoniker
  10. ReDim monikerContainer(1)
  11. Dim pointerFetchedmonikers As IntPtr = IntPtr.Zero
  12. While (pp.Next(1, monikerContainer, pointerFetchedmonikers) = 0)
  13. Dim bindinfo As IBindCtx = Nothing
  14. CreateBindCtx(0, bindinfo)
  15. Dim boundcomobject As Object = Nothing
  16. Dim iid As Guid = New Guid("000208DA-0000-0000-C000-000000000046" )
  17. Try
  18. monikerContainer(0).BindToObject(bindinfo, Nothing, iid, boundcomobject)
  19. Dim wk As Microsoft.Office.Interop.Excel.Workbook = boundcomobject
  20. Debug.Print(wk.Name)
  21. Catch ex As Exception
  22. System.Runtime.InteropServices.Marshal.ReleaseComObject(bindinfo)
  23. End Try
  24. End While
  25. If Not pprot Is Nothing Then
  26. System.Runtime.InteropServices.Marshal.ReleaseComObject(pprot)
  27. End If
  28. If Not pp Is Nothing Then
  29. System.Runtime.InteropServices.Marshal.ReleaseComObject(pp)
  30. End If


Merci encore pour ton aide


Message édité par Arwon le 19-11-2010 à 15:18:34
n°2037261
breizhbugs
Posté le 19-11-2010 à 19:04:56  profilanswer
 

Bravo à toi!
Bonnes soirée


---------------
Seul Google le sait...

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C#/.NET managed

  Récupérer toutes les instances d'Excel

 

Sujets relatifs
[Oracle] Récupérer des informations sur les clés étrangèrestri tout simple sous excel
Récupérer l'objet a sur lequel on cliquerécupérer paramètre template int
Récupérer un tableau d'une autre page webBesoin d'aide sur une macro Excel
[C++] Récupérer la taille d'un fichier binaireaide pour macro excel
Récuperer objet dans tableau en fonction du champ d'un objet[flash] récupérer des vidéos
Plus de sujets relatifs à : Récupérer toutes les instances d'Excel


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR