这个问题可能会引起很多问题,所以我会尽量具体一点。我负责支持我的工作使用的第三方应用程序。此应用程序执行的功能之一是从 .dot 文件中提取 word 文档,其中包含来自数据库的信息。它使用 MERGEFIELD 字段来执行此操作。当这个数据被拉入时,它允许保留正常的日期字段和 printdate 字段,但是 createdate(我需要的那个)和 savedate 字段完全搞砸了。它将原始模板创建日期保留在那里,而不是像模板通常那样插入今天的日期作为文档创建日期,并使该字段无效,使其成为纯文本而不是 createdate 字段,因此您无法更新它。我不能 当 createate 字段与邮件合并一起使用时,找不到关于这是否是标准行为的确切答案。我会使用正常的日期,但这些文档可以在几天内进行编辑,最终转换为 PDF 以获得“永久”副本。如果您从程序创建文档然后在第二天打开它,它会自动更新日期......不是我们想要的,需要是它打开的第一天。
我有一个顿悟,可以使用 powershell 脚本来更新模板本身的 createdate。设法通过以下三行来做到这一点:
$a = Get-Date
$b = Get-Item "Q:\CUSTOM\DATETEST.dot"
$b.CreationTime = $a
该脚本运行良好,并且文件信息已更新。但是,要让文档中的实际文字反映这一点,您必须进入 Word,用 F9 刷新表单中的字段,然后保存。即使更新了创建日期,当您在 Word 中或从其他应用程序中提取文档时,Word 文档文本仍会显示旧日期,直到您刷新并手动保存模板。这些表格不受保护,因此这不是问题。我看到了一些用于编辑 word 文件的 powershell 脚本,但找不到一个可以刷新日期字段的脚本。我用修改日期尝试了这个脚本,并在表单中使用了 savedate 字段,但这也需要进入并实际保存表单。有没有办法在 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()