Вызов Documents.Open for Word.Application Ошибка преобразования msoFalse в тип Object
Как Documents.OpenNoRepairDialog
метод может вызываться PowerShell со всеми параметрами, предоставленными, по крайней мере, до того момента, когда текстовые документы открываются без ошибок, диалогов или макросов; и что документы, защищенные паролем, потерпят неудачу без всплывающих окон / диалогов, которые пользователь должен отклонить?
Попытка открыть документ в Microsoft Office Word 2013 с помощью powershell работает для базового использования
Documents.Open
метода. Попытка открыть файлы, которые содержат макросы или защиту паролем, приводит к ошибке или диалоговому окну, которое пользователь должен вручную закрыть. Этот процесс проходит через сотни тысяч файлов, поэтому любые задержки являются непомерными по времени. Я попытался использовать Documents.OpenNoRepairDialog
метод, чтобы обойти эти диалоги и открыть только для чтения и, возможно, поврежденные файлы. Ниже приведен пример кода, который я использовал для открытия файла.
# 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)
Результат этого процесса выглядит следующим образом:
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
Я также попытался использовать documents.open
метод:
$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)
В этом случае я получаю следующий результат:
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
Согласно справочному руководству по Visual Basic для opennorepairdialog и справочному руководству по .NET для Documents.OpenNoRepairDialog, параметры для этого метода являются системными объектами, которые PowerShell, похоже, с трудом генерирует в ожидаемом формате.
0 ответов на вопрос
Похожие вопросы
-
3
Могу ли я запустить Microsoft Office 2007 под Ubuntu?
-
5
Будьте в курсе обновлений?
-
2
Есть ли способ заставить Excel 2007 автоматически восстанавливать фоновые файлы, как в MS Word?
-
-
3
Автоматизированные массовые скриншоты видео
-
7
Как вы поддерживаете Microsoft Excel на полной скорости, даже если у него нет фокуса окна?
-
6
Хорошее руководство по PowerShell, начало работы с более продвинутым использованием
-
5
Автоматизация нажатий клавиш и действий в Windows
-
2
Как получить доступ к веб-сайту Microsoft Office Outlook?
-
1
Ссылки в Excel изменены после сбоя
-
2
Что делать после активации Microsoft Office слишком много раз?