Récupérer toutes les instances d'Excel

Récupérer toutes les instances d'Excel - C#/.NET managed - Programmation

Marsh Posté le 19-11-2010 à 09:45:39    

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
Reply

Marsh Posté le 19-11-2010 à 09:45:39   

Reply

Marsh Posté le 19-11-2010 à 12:37:22    

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...
Reply

Marsh Posté le 19-11-2010 à 13:42:32    

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 ??

Reply

Marsh Posté le 19-11-2010 à 14:12:51    

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


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

Marsh Posté le 19-11-2010 à 14:20:37    

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 :(

Reply

Marsh Posté le 19-11-2010 à 15:16:00    

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
Reply

Marsh Posté le 19-11-2010 à 19:04:56    

Bravo à toi!
Bonnes soirée


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

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed