Wie eine Verbindung zu bestehenden Excel-Instanz von PowerShell?
Alle Beispiele, die Automatisierung von Excel über die PowerShell starten mit der Zeile:
PS> $Excel = New-Object -Com Excel.Application
Scheint dies bei einer neuen Instanz von Excel, z.B. laufen $Excel.Visiable = $true
zeigen eine leere, leeres Excel-Fenster wechseln, um die vorhandene Arbeitsmappe.
Wenn es bereits eine Instanz von Excel ausgeführt wird, ist es ein Weg, um eine Verbindung herzustellen?
- Brauchen Sie, um die Verbindung zu einer bestimmten Instanz von Excel, dargestellt durch ein bestimmtes Fenster? Wenn nicht, könnte man auch Blick auf den Zugriff auf eine laufende Excel-Instanz wie folgt: support.microsoft.com/kb/316126. Der KB-Artikel C# verwendet, sondern die Aufrufe (System.- Laufzeit.InteropServices.Marschall.GetActiveObject("Excel.Anwendung"), zum Beispiel), sollte Recht einfach zu übersetzen.
- Nur zur Ergänzung Ian ' s Antwort: $Excel = [Runtime.Interopservices.Marshal]::GetActiveObject('Excel.Anwendung') wird das abrufen der vorhandenen Instanz von Excel.
- Danke. Jedoch, ich habe gerade versucht haben, und führen Sie dann
$Excel.Visiable = $true
- es noch geöffnet ist, eine neue Excel-Fenster.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Statt der üblichen
New-Object
-ComObject
excel.Anwendung uns diese$excel = [Runtime.Interopservices.Marshal]::GetActiveObject('Excel.Application')
Rest bleibt gleich.
Einen Nachteil. Sie erhalten nur die excel - "Instanzen" gestartet, die vom gleichen Benutzer zum auslösen der ps1.
Ja, Sie können den Zugriff auf das COM Objekt über HWND [Fensterhandles] der Einsatz von das WIN32-API (AccessibleObjectFromWindow).
.
Müssen Sie möglicherweise schreiben Sie eine assembly in C# und/oder manipulieren, P/Invoke-Aufrufe per Powershell.
Können Sie geben einen Schuss auf der it & sehen, wie es geht.