Aufrufen von Documents.Open für Word.Application Fehler beim Konvertieren von msoFalse in den Typ Object
Wie kann die Documents.OpenNoRepairDialog
Methode von Powershell mit allen Parametern aufgerufen werden, die mindestens bis zu dem Punkt bereitgestellt werden, an dem Word-Dokumente ohne Fehler, Dialoge oder Makros geöffnet werden; und dass Dokumente, die durch ein Kennwort geschützt sind, ohne Popup / Dialog, den ein Benutzer abweisen muss, fehlschlagen?
Der Versuch, ein Dokument mit Microsoft Office Word 2013 über Powershell zu öffnen, funktioniert für grundlegende Verwendungen der
Documents.Open
Methode. Wenn Sie versuchen, Dateien zu öffnen, die Makros enthalten oder einen Kennwortschutz enthalten, wird ein Fehler oder ein Dialogfeld angezeigt, das eine Person manuell schließen muss. Dieser Prozess umfasst Hunderttausende von Dateien, daher sind Verzögerungen zeitaufwändig. Ich habe versucht, die Documents.OpenNoRepairDialog
Methode zu verwenden, um diese Dialogfelder zu umgehen und schreibgeschützte und möglicherweise beschädigte Dateien zu öffnen. Unten sehen Sie ein Beispiel für den Code, den ich zum Öffnen einer Datei verwendet habe.
# Enable Office core libraries Add-type -AssemblyName office # Doc open parameter array $DOCOpen = @{} $DOCOpen.FileName=[string]"<Full Path to File>" $DOCOpen.ConfirmConversions=[Microsoft.Office.Core.MsoTriState]::msoFalse $DOCOpen.ReadOnly=[Microsoft.Office.Core.MsoTriState]::msoTrue $DOCOpen.AddToRecentFiles=[Microsoft.Office.Core.MsoTriState]::msoFalse $DOCOpen.PasswordDocument=$Null $DOCOpen.PasswordTemplate=$Null $DOCOpen.Revert=[Microsoft.Office.Core.MsoTriState]::msoTrue $DOCOpen.WritePasswordDocument=$Null $DOCOpen.WritePasswordTemplate=$Null $DOCOpen.Format=[Microsoft.Office.Interop.Word.WdOpenFormat]::wdOpenFormatAuto $DOCOpen.Encoding=[Microsoft.Office.Core.MsoEncoding]::msoEncodingOEMUnitedStates $DOCOpen.Visible=[Microsoft.Office.Core.MsoTriState]::msoFalse $DOCOpen.OpenAndRepair=[Microsoft.Office.Core.MsoTriState]::msoFalse $DOCOpen.DocumentDirection=[Microsoft.Office.Interop.Word.WdDocumentDirection]::wdLeftToRight $DOCOpen.NoEncodingDialog=[Microsoft.Office.Core.MsoTriState]::msoTrue $DOCOpen.XMLTransform=$Null $DOCOpen.OpenConflictDocument=[Microsoft.Office.Core.MsoTriState]::msoFalse # Create MS Office object $appWord = New-Object -ComObject Word.Application # Set application objecs not visible $appWord.visible = $False # Supress alerts or dialogs $appWord.DisplayAlerts = "wdAlertsNone" # $wdAlertsNone # # Supress document macros $appWord.AutomationSecurity = "msoAutomationSecurityForceDisable" # Word specific settings $appWord.ScreenUpdating = $False $appWord.DisplayRecentFiles = $False $appWord.DisplayScrollBars = $False $DOCDocument = $appWord.Documents.OpenNoRepairDialog($DOCOpen.FileName, $DOCOpen.ConfirmConversions, $DOCOpen.ReadOnly, $DOCOpen.AddToRecentFiles, $DOCOpen.PasswordDocument, $DOCOpen.PasswordTemplate, $DOCOpen.Revert, $DOCOpen.WritePasswordDocument, $DOCOpen.WritePasswordTemplate, $DOCOpen.Format, $DOCOpen.Encoding, $DOCOpen.Visible, $DOCOpen.OpenAndRepair, $DOCOpen.DocumentDirection, $DOCOpen.NoEncodingDialog, $DOCOpen.XMLTransform)
Das Ergebnis dieses Prozesses sieht folgendermaßen aus:
Object reference not set to an instance of an object. At <Full path to file>\temp_Test_PowerShell_Code.ps1:41 char:3 + $DOCDocument = $appWord.Documents.OpenNoRepairDialog($FileRec.FileN ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : OperationStopped: (:) [], NullReferenceException + FullyQualifiedErrorId : System.NullReferenceException
Ich habe auch versucht, die documents.open
Methode anzuwenden :
$DOCDocument = $appWord.Documents.Open($FileRec.FileName, $DOCOpen.ConfirmConversions, $DOCOpen.ReadOnly, $DOCOpen.AddToRecentFiles, $DOCOpen.PasswordDocument, $DOCOpen.PasswordTemplate, $DOCOpen.Revert, $DOCOpen.WritePasswordDocument, $DOCOpen.WritePasswordTemplate, $DOCOpen.Format, $DOCOpen.Encoding, $DOCOpen.Visible, $DOCOpen.OpenConflictDocument, $DOCOpen.OpenAndRepair, $DOCOpen.DocumentDirection, $DOCOpen.NoEncodingDialog)
In diesem Fall erhalte ich folgendes Ergebnis:
Exception setting "Open": Cannot convert the "msoTrue" value of type "MsoTriState" to type "Object". At <Full path to file>\temp_Test_PowerShell_Code.ps1:41 char:3 + $DOCDocument = $appWord.Documents.Open($FileRec.FileName, $DOCOpen. ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : NotSpecified: (:) [], MethodException + FullyQualifiedErrorId : RuntimeException
Gemäß einer Referenz von Visual Basic für opennorepairdialog und einer .NET-Referenz für Documents.OpenNoRepairDialog sind die Parameter für die Methode Systemobjekte, die von PowerShell im erwarteten Format schwer zu generieren scheinen.
0 Antworten auf die Frage
Verwandte Probleme
-
3
Kann ich Microsoft Office 2007 unter Ubuntu ausführen?
-
5
Mit Updates auf dem Laufenden bleiben?
-
2
Gibt es eine Möglichkeit, Excel 2007 automatisch zu speichern, wie dies bei MS Word der Fall ist?
-
3
Automatisierte Bulk-Screencaps von Videos
-
7
Wie können Sie Microsoft Excel mit voller Geschwindigkeit laufen lassen, auch wenn der Fensterfokus...
-
6
Guter PowerShell-Leitfaden, der durch fortgeschrittene Verwendung Einstieg leistet
-
5
Automatisieren von Tastatureingaben und Aktionen in Windows
-
2
Wie erhalte ich den Webzugriff von Microsoft Office Outlook?
-
1
Links in Excel haben sich nach einem Absturz geändert
-
2
Was ist zu tun, nachdem Microsoft Office zu oft aktiviert wurde?