3

ディレクトリとサブディレクトリ内のすべての.docファイルと.docxファイルを検索し、それぞれをPDF形式に変換するコードを実行しようとしています。

以下のコードは、これらのディレクトリにpdfのインスタンスがない場合、つまり初めてのみ機能する場合にのみ機能します。それ以降は次のように失敗します。

「2」引数で「SaveAs」を呼び出す際の例外:「コマンドが失敗しました」C:\ convert \ convertword.ps1:12 char:13 + $ doc.saveas <<<<($ path、$ wdFormatPDF)+ CategoryInfo :NotSpecified:(:) []、MethodInvocationException + FullyQualifiedErrorId:ComMethodTargetInvocation

以前に作成したPDFを削除してPSを再実行すると、正常に機能します。SaveAsしたがって、関数から欠落しているスイッチまたはパラメーターがあり、それが何らかの理由で上書きを強制していると想定することしかできませんか?

$wdFormatPDF = 17
$word = New-Object -ComObject word.application
$word.visible = $false
$folderpath = "c:\convert\*"
$fileTypes = "*.docx","*doc"
Get-ChildItem -path $folderpath -recurse -include $fileTypes |
foreach-object `
{
$path =  ($_.fullname).substring(0,($_.FullName).lastindexOf("."))
"Converting $path to pdf ..."
$doc = $word.documents.open($_.fullname)
$doc.saveas($path, $wdFormatPDF) 
$doc.close()
}
$word.Quit()
4

3 に答える 3

2

さて、私はついに問題を突き止めたと思います。ファイルをロックしているのはWindowsエクスプローラーのプレビューペインです。ファイルが作成および変換されていたディレクトリでプレビューペインを表示しました。これにより、PDFにファイルロックが作成されたため、スクリプトで新しいPDFを保存できません。Windowsエクスプローラーでプレビューペインをオフにすると、スクリプトが繰り返し機能するようになりました。したがって、Powershellスクリプティングには何の問題もありませんが、すべての入力者に感謝します。これは、 http://support.microsoft.com/kb/942146という件名で見つけた最も近いMSKB記事へのリンクです。

于 2012-05-01T09:47:24.107 に答える
1

これを試して:

$word.displayalerts = $false
$doc.saveas($path, $wdFormatPDF) # with Word2010 I've to use  $doc.saveas([ref]$path, [ref]$wdFormatPDF)
$word.displayalerts = $true

エラーは発生しませんが、Word2010を使用しています。他のバージョンではテストできません。

于 2012-04-25T16:01:19.607 に答える
0

SaveAsおよびSaveAs2のドキュメントによると、上書きするフラグはありません。したがって、次のようなもので保存する前に、それを削除することができます。

Remove-Item -Path $path -Force -ErrorAction SilentlyContinue
$doc.saveas ($path, $wdFormatPDF) 
于 2012-04-25T15:24:05.330 に答える