Fehler beim Öffnen von Excel in Powershell

8

Ich muss Excel-Datei mit% Co_de% Parameterer von Powershell-Skript öffnen. Aber wenn ich es versuche, erhalte ich einen Fehler CorruptLoad . Dieser Fehler tritt nur auf, wenn ich Exception calling "Open" with "15" argument(s): "open method workbooks class failed" mit allen 15 Argumenten aufruft. Und wenn ich versuche, die gleiche Excel-Datei mit Open -Programm mit 15 Argumenten zu öffnen oder mit dem Wert des benannten Arguments VB.net , gibt es kein Problem!

Ich verwende CorruptLoad , Office 2010 mit SP2 und powershell v 4.0 .

Hier ist mein .NET Framework 4.5.2 code:

%Vor%

Ich habe keine Ahnung, warum ein Fehler auftritt. Ich bin froh zu allen Ratschlägen und Annahmen!

    
Indian 17.02.2016, 09:11
quelle

1 Antwort

7

Nachdem Sie viel mit Ihrem PowerShell-Skript herumgespielt haben ... ist alles sehr seltsam.

Beobachtetes Verhalten

Erstens gibt die Open-Methode für das Workbooks-Objekt nur 14 Parameter aus, wenn $excel.Workbooks.Open.Invoke.ToString() ausgeführt wird. Der Ausgang liest:

%Vor%

Es gibt jedoch eine Art Überlademethode für 15 Parameter, weil bei Verwendung des ausführlicheren Fehlerausleseprozesses $Error[0]|format-list -force i zwei Testaufrufe durchgeführt hat, der erste mit 15 Parametern und der zweite mit 16.

15 Parameter

%Vor%

16 Parameter

%Vor%

Wie Sie oben lesen können, unterstützt die Methode 15 Parameter, jedoch nicht 16. Unabhängig davon, welche Werte dem 15. Parameter übergeben werden, kann die Datei nicht geöffnet werden.

Für den Datensatz funktioniert es mit 14 oder weniger Argumenten, es ist nur das 15. Argument, das die Ausnahme auslöst.

Fazit

Von allem, was ich gesehen habe, kann ich nur schließen, dass es ein Problem mit der Excel-COM-Interop-Unterstützung in Powershell gibt. Die Angabe des 15. Parameters als $missing sollte das Verhalten nicht gemäß der Referenz von Workbooks.Open () ändern . Es gibt ein Problem mit Powershells Excel. Die COM-Unterstützung wird weiter verstärkt, da, wenn das VBA-Skript als Makro ausgeführt wird, alles gemäß der Dokumentation funktioniert.

Vorgeschlagene nächste Schritte

Die erste Problemumgehung besteht darin, das VBA-Skript als Makro zu schreiben und es in einer Excel-Datei zu speichern, die speziell zum Ausführen von VBA-Skripten über die Befehlszeile verwendet wird. Es würde minimalen Aufwand für die Implementierung erfordern und es ist bekannt, indem ich sowohl vom OP als auch von mir getestet habe, dass es funktionieren wird.

Wenn Sie Schwierigkeiten haben, das Makro aus der Powershell auszulösen, lesen Sie Excel-Makros aufrufen von PowerShell mit Argumenten

    
Marvin 19.02.2016, 15:31
quelle