У мене є наступний сценарій PowerShell для перетворення папки з файлами docx у формат pdf:
param (
[string]$folder = '.'
)
Add-type -AssemblyName Microsoft.Office.Interop.Word
$word_app = New-Object -ComObject Word.Application
$word_app.visible = $false
Get-ChildItem -Path "$folder\Output" -Filter *.pdf | ForEach-Object {
remove-item $_.FullName
}
Get-ChildItem -Path "$folder\Input" -Filter *.docx | ForEach-Object {
$document = $word_app.Documents.Open($_.FullName)
# Remove spaces in the name as we're uploading this to the web
$filename = $_.BaseName -replace ' ',''
$pdf_filename = "$($folder)\Output\$($filename).pdf"
$document.SaveAs([ref] $pdf_filename, [ref] 17)
$document.Close()
}
$word_app.Quit()
Це відмінно працювало на Windows 7 (64 біт) з Office 2010 (32 біт).
З тих пір я встановив нову машину з Windows 8.1 (64 біт) і Office 2013 (32 біт) і тепер, коли я намагаюся запустити скрипт, я отримую помилки на SaveAs
лінії. Перша помилка полягала в тому, що вона сказала [ref]
модифікатор на аргументах не був необхідним. Тому я змінив цю лінію на:
$document.SaveAs($pdf_filename, 17)
Проте зараз це помилки:
Exception calling "SaveAs" with "2" argument(s): "Command failed"
At D:\Documents\User Guides\ConvertToPDF.ps1:31 char:5
+ $document.SaveAs($pdf_filename, 17)
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : ComMethodTargetInvocation
Існує ніяких інших ознак того, що не так. Вихідна папка існує і доступна для запису. Я додав код для переходу до структури помилок, а внутрішній виняток:
Повідомлення: Помилка команди
Код помилки: 800A1066 (-2146824090)
Що, здавалося б, вказує на деякий провал COM.
Я також намагався
$document.ExportAsFixedFormat($pdf_filename, 17)
але це дає мені
Exception calling "ExportAsFixedFormat" with "2" argument(s): "The directory name is not valid."
At D:\Documents\User Guides\ConvertToPDF.ps1:33 char:5
+ $document.ExportAsFixedFormat($pdf_filename, 17)
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : ComMethodTargetInvocation
Незважаючи на те, що назва каталогу є дійсною.
Я шукав в Інтернеті, але всі знайдені мною сторінки вказували, що це все, що потрібно зробити.
Єдина річ, про яку я тільки що думав, це те, що я, можливо, використовую більш високу версію PowerShell, ніж раніше - хоча я дійсно не бачу, як це вплине на речі.
Що мені не вистачає?