これはおそらく多くの質問を提起する可能性があるので、できるだけ具体的にしようと思います. 仕事で使用するサードパーティ製アプリケーションのサポートを担当しています。このアプリケーションが行う機能の 1 つは、引き込まれたデータベースからの情報を使用して .dot ファイルから Word 文書を引き出すことです。これを行うために MERGEFIELD フィールドを使用します。このデータが取り込まれると、通常の日付フィールドと printdate フィールドを残すことができますが、createdate (必要なもの) と savedate フィールドは完全に台無しになります。テンプレートのようにドキュメント作成日として今日の日付を挿入するのではなく、元のテンプレート作成日をそこに保持し、フィールドを無効にして作成日フィールドではなくプレーンテキストにするため、更新できません。できなかった」createdate フィールドが差し込み印刷で使用されるとき、これが標準的な動作であるかどうかについて正確な答えを見つけることはできません。通常の日付を使用しますが、これらのドキュメントは数日かけて編集でき、最終的に「永続的な」コピー用に PDF に変換されます。プログラムからドキュメントを作成し、翌日それを開くと、日付が自動的に更新されます...私たちが望むものではなく、最初に開かれた日である必要があります。
PowerShell スクリプトを使用してテンプレート自体の作成日を更新するひらめきがありました。次のように3行でこれを行うことができました:
$a = Get-Date
$b = Get-Item "Q:\CUSTOM\DATETEST.dot"
$b.CreationTime = $a
このスクリプトはうまく機能し、ファイル情報が更新されます。ただし、ドキュメント内の実際の単語にこれを反映させるには、Word に移動し、フォームのフィールドを F9 で更新してから保存する必要があります。作成日が更新されていても、テンプレートを更新して手動で保存するまで、Word または他のアプリケーションから文書を取得すると、Word 文書のテキストには古い日付が表示されます。これらのフォームは保護されていないため、問題ありません。Word ファイルを編集するための PowerShell スクリプトをいくつか見ましたが、日付フィールドを更新するためのスクリプトを正確に見つけることができませんでした。変更日とフォームの保存済みフィールドを使用してこのスクリプトを試しましたが、これには実際にフォームを保存する必要もありました。PowerShell またはバッチ (または任意のスクリプト言語、しないでください) に方法はありますか この時点では気にしません) これにより、ドキュメントのフォーム フィールドを更新して保存することができますか、それとも他の方法を考えられますか? これを行う必要のあるドキュメントがいくつかあるので、毎朝手動で行うのも非現実的です。
編集:以下にコメントされているように、次のコードを見つけました。このコードでは、Documents.Add を Documents.Open に変更する必要があることもわかりました。これは、保存日を必要な方法で操作するために機能したことに注意してください。ただし、createdate はまだ謎のままです。
$word=new-object -com Word.Application
$doc=$word.Documents.Add($filename)
$word.Visible=$False
$word.ActiveDocument.Fields.Update()
$doc.SaveAs([REF]$filename)
$doc.Close()
$word.Quit()