Documents.Open for Word.Application çağrılması msoFalse nesnesini dönüştürürken hata oluştu


0

Nasıl olabilir Documents.OpenNoRepairDialog yöntem, en azından sağlanan tüm parametrelerle, Word belgelerinin hatasız, diyaloglar veya makrolar olmadan açıldığı noktaya kadar powershell tarafından çağrılır; ve şifre korumalı olan belgeler, bir kullanıcının çıkarması gereken hiçbir açılır pencere / diyalog olmadan başarısız olur?


Bir belgeyi powershell aracılığıyla Microsoft Office Word 2013 ile açmaya çalışmak, Documents.Open yöntem. Makro içeren veya parola koruması içeren dosyaları açmaya çalışmak, bir kişinin manuel olarak kapatması gereken bir hata veya iletişim kutusuyla sonuçlanır. Bu işlem yüzbinlerce dosya üzerinden geçer, bu yüzden gecikmeler zaman engelleyicidir.

Kullanmaya çalıştım Documents.OpenNoRepairDialog Bu iletişim kutularını atlamak ve salt okunur ve muhtemelen bozuk dosyaları açmak için yöntem. Aşağıda bir dosyayı açmak için kullandığım kodun bir örneği verilmiştir.

# 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)

Bu sürecin sonucu aşağıdakine benzer:

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

Ben de kullanmaya çalıştım documents.open yöntem:

$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)

Bu durumda aşağıdaki sonucu alıyorum:

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

İçin bir Visual Basic referansına göre opennorepairdialog ve bir .NET başvurusu Documents.OpenNoRepairDialog metodun parametreleri, powershell'in beklenen formatta üretim yapmakta zorlandığı görünen sistem nesneleridir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.