我有以下 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()
这在装有 Office 2010(32 位)的 Windows 7(64 位)上运行良好。
从那时起,我又有了一台安装了 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 - 尽管我并不真正明白这会如何影响事情。
我错过了什么?
答案1
问题出在 pdf 文件的路径上。
我通过传入“。”来指定脚本在当前文件夹中查找,因此输出名称为:
.\输出\示例.pdf
当我添加以下行时:
$fullFolder = Resolve-Path -Path $folder
然后使用它$fullFolder
来代替输出文件名:$folder
SaveAs
D:\Documents\用户指南\Output\Example.pdf
我尝试将SaveAs
Word 文档放在与 pdf 相同的文件夹中,以查看它是否在访问该文件夹时遇到问题,从而发现了此问题。结果返回错误:
使用“2”个参数调用“SaveAs”时发生异常:“这不是有效的文件名。
请尝试以下一项或多项操作:
* 检查路径以确保输入正确。
* 从文件和文件夹列表中选择一个文件。”
这使我开始检查路径,因为实际文件名不可能无效,因为它与输入文件名相同。