私は、数千のドキュメントをHTMLからWordに変換する必要があるプロジェクトに取り組んでいます。私はこの関数を使用しています:
function saveas-document ($docs) {
$opendoc = $word.documents.open($docs);
$savepath = $docs -replace [regex]::escape($htmPath),"$docpath"
$opendoc.saveas([ref]"$savepath", [ref]$saveFormat);
$opendoc.close();
}
最近、テスト中に、ドキュメントの1つが「別のユーザー」によってロックされているため、私の仕事が行き詰まりました。読み取り用のコピーが必要かどうか、後で変更を編集してマージするかどうか、またはドキュメントが再び利用可能になるという通知を待つかどうかを尋ねるダイアログボックスが表示されます。また、ファイルを開くことを選択した場合、どちらの場合も、$word.Visible-$False
パラメーターがオーバーライドされているようです。
ドキュメントをロックしているこの「別のユーザー」を特定できませんでした。すべてのドキュメントはローカルの非共有ドライブにあるため、何がドキュメントをロックしているのかわかりません。ファイルが存在する場所に基づいて、編集する必要はないと確信しており、ファイルを強制的に開くことができます。Save As...
-force
この関数のパラメーターとして使用できますか?そのパラメータを配置するのに最適な場所はどこですか?
編集:以下のJPBlancに従って、Wordを停止しようとしましたが、レコードごとに3つのエラーが発生しました。
Method invocation failed because [Microsoft.Office.Interop.Word.DocumentClass] doesn't contain a method named 'quit'.
At C:\users\x46332\desktop\sad003.ps1:69 char:18
+ $opendoc.quit <<<< ()
+ CategoryInfo : InvalidOperation: (quit:String) [], RuntimeException
+ FullyQualifiedErrorId : MethodNotFound
Exception calling "SaveAs" with "16" argument(s): "COM object that has been separated from its underlying RCW cannot be
used."
At C:\users\x46332\desktop\sad003.ps1:73 char:20
+ $opendoc.saveas <<<< ([ref]"$savepath", [ref]$saveFormat);
+ CategoryInfo : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : DotNetMethodException
Exception calling "Close" with "3" argument(s): "COM object that has been separated from its underlying RCW cannot be u
sed."
At C:\users\x46332\desktop\sad003.ps1:74 char:19
+ $opendoc.close <<<< ();
+ CategoryInfo : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : DotNetMethodException