Benutzer mit den meisten Antworten
Fehler bei $excelobjekt = [Runtime.Interopservices.Marshal]::GetActiveObject('Excel.Application')

Frage
-
Hallo,
ich möchte gern auf eine bereits geöffnete Excelmappe zugreifen und Daten aus einer Zelle lesen. Dafür muss ich mir ja als erstes einmal die bereits gestartete Excel-Instanz holen. Das wollte ich wie folgt machen:
$excelobjekt = [Runtime.Interopservices.Marshal]::GetActiveObject('Excel.Application')
Beim Ausführen erhalte ich allerdings diesen Fehler:
Ausnahme beim Aufrufen von "GetActiveObject" mit 1 Argument(en): "Vorgang nicht verfügbar. (Ausnahme von HRESULT: 0x800401E3
(MK_E_UNAVAILABLE))"
In C:\Powershell\Excel_lesen.ps1:3 Zeichen:1
+ $xl = [Runtime.InteropServices.Marshal]::GetActiveObject('Excel.Appli ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : COMExceptionHat da jemand einen Rat???
Danke
Torsten
Antworten
-
Welche Office-Version hast du im Einsatz?
Bei den ClickOnce-Installationen fehlen die Registry-Einträge für COM-Schnittstellen.
Hinzu kommt noch ggf. die Bitness der Powershell da dann auf unterschiedliche Registry-Einträge zugegriffen wird.Suche mal per Regedit ob es den Eintrag "Excel.Application" überhaupt gibt und die CLSID, die mann dann noch suchen muss, auf den korrekten Pfad der Anwendung verweist.
Für 32-Bit-Office muss der Eintrag auch unter WOW6432node existieren.
https://www.wintotal.de/tipp/wow6432node-registry-schluessel-und-syswow64-verzeichnis-bei-einem-64-bit-betriebssystem/
Lade dir auch mal das Tool ROT-Betrachter herunter, ob Excel da als Anwendung überhaupt auftaucht.
http://alax.info/blog/1444- Als Antwort markiert Torsten_156 Dienstag, 5. Mai 2020 08:24
- Tag als Antwort aufgehoben Torsten_156 Dienstag, 5. Mai 2020 08:53
- Als Antwort markiert Torsten_156 Mittwoch, 6. Mai 2020 12:34
-
Wichtig ist noch folgendes:
Die ROT ist je User individuell. Startest du dein Script ggf. über einen anderen User ist die ROT eine andere und du kannst nicht mit der Anwendung verbinden.- Als Antwort markiert Torsten_156 Mittwoch, 6. Mai 2020 12:34
Alle Antworten
-
Welche Office-Version hast du im Einsatz?
Bei den ClickOnce-Installationen fehlen die Registry-Einträge für COM-Schnittstellen.
Hinzu kommt noch ggf. die Bitness der Powershell da dann auf unterschiedliche Registry-Einträge zugegriffen wird.Suche mal per Regedit ob es den Eintrag "Excel.Application" überhaupt gibt und die CLSID, die mann dann noch suchen muss, auf den korrekten Pfad der Anwendung verweist.
Für 32-Bit-Office muss der Eintrag auch unter WOW6432node existieren.
https://www.wintotal.de/tipp/wow6432node-registry-schluessel-und-syswow64-verzeichnis-bei-einem-64-bit-betriebssystem/
Lade dir auch mal das Tool ROT-Betrachter herunter, ob Excel da als Anwendung überhaupt auftaucht.
http://alax.info/blog/1444- Als Antwort markiert Torsten_156 Dienstag, 5. Mai 2020 08:24
- Tag als Antwort aufgehoben Torsten_156 Dienstag, 5. Mai 2020 08:53
- Als Antwort markiert Torsten_156 Mittwoch, 6. Mai 2020 12:34
-
Wir nutzen hier Office365.
Es gibt in der REG einen Eintrag "Excel.Application" mit einer CLSID. Auch diese habe ich gesucht und sie verweist auf eine lokale Installation:
C:\Program Files (x86)\Microsoft Office\Root\Office16\EXCEL.EXE /automation
Das Tool ROT-View zeigt mir bei geöffneter Exceldatei diese auch an.
Habe jetzt auch mal unter WOW6432node geschaut. Auch dort gibt es einen Eintrag. Allerdings als "Excel.Application.16"
- Bearbeitet Torsten_156 Dienstag, 5. Mai 2020 09:44 weitere Infos
-
U.U. betrifft dies folgenden Fehler:
https://support.microsoft.com/de-de/help/238610/getobject-or-getactiveobject-cannot-find-a-running-office-applicationHat Excel bei dir den Focus während der Ausführung?
Es gab auch schon ähnliche Probleme eine Anwendung in der ROT zu finden.
Der Zugriff geht am einfachsten über eine C#-Funktion:https://www.mycsharp.de/wbb2/thread.php?postid=195742
Vielleicht must du dir eine kleine Assembly basteln und diese in Powershell einbinden:
https://www.leeholmes.com/blog/2006/10/27/load-a-custom-dll-from-powershell/Ich hatte auch schon früher Schwierigkeiten mit Office-Automationen und habe mir entsprechende C++-COM-Dll's geschrieben.
-
Wenn ich die Excel-Datei öffne, erscheint ein neuer Eintrag (Dateiname inkl. Pfad) in der ROT. Somit sollte es doch registriert sein. Das habe ich mit dem Tool "RotView-x64.exe" geprüft.
Trotzdem erhalte ich den Fehler wie hier beschrieben:
https://support.microsoft.com/de-de/help/238610/getobject-or-getactiveobject-cannot-find-a-running-office-applicationWenn ich mein Script starte, verliert Excel auch sofort den Focus. Also werde ich wohl die C#-Funktion basteln müssen. Versuche es mal...
- Bearbeitet Torsten_156 Dienstag, 5. Mai 2020 11:40
-
Wichtig ist noch folgendes:
Die ROT ist je User individuell. Startest du dein Script ggf. über einen anderen User ist die ROT eine andere und du kannst nicht mit der Anwendung verbinden.- Als Antwort markiert Torsten_156 Mittwoch, 6. Mai 2020 12:34
-
Die ROT ist je User individuell....
Genau das war es! Hatte Powershell IMMER als Admin geöffnet. Als ich PS dann als User geöffnet habe, klappte es auch mit der Funktion über die ROT die Excelinstanz zu ermitteln :-)
VIELEN Dank
Gruß Torsten
- Bearbeitet Torsten_156 Mittwoch, 6. Mai 2020 12:35 VT