powershell - 是否可以通过脚本更新Word文档中的表单字段

标签 powershell batch-file ms-word form-fields

这可能会引起很多问题,所以我会尽量具体。我负责支持我的工作使用的第三方应用程序。该应用程序的功能之一是从 .dot 文件中提取 Word 文档,并从数据库中提取信息。它使用 MERGEFIELD 字段来执行此操作。当提取这些数据时,它允许保留正常的日期字段和 printdate 字段,但 createate (我需要的)和 saveate 字段完全困惑。它将原始模板创建日期保留在那里,而不是像模板通常那样插入今天的日期作为文档创建日期,并使该字段无效,使其成为纯文本而不是创建日期字段,因此您无法更新它。当创建字段与邮件合并一起使用时,我找不到这是否是标准行为的确切答案。我会使用正常日期,但这些文档可以在几天内进行编辑,最后将其转换为 PDF 以获得“永久”副本。如果您从程序创建文档,然后在第二天打开它,它会自动更新日期...这不是我们想要的,需要是打开它的第一天。

我顿悟到使用 powershell 脚本来更新模板本身的创建日期。设法用三行来完成此操作:

$a = Get-Date
$b = Get-Item "Q:\CUSTOM\DATETEST.dot"
$b.CreationTime = $a

该脚本运行良好,并且文件信息已更新。但是,要让文档中的实际单词反射(reflect)这一点,您必须进入 Word,使用 F9 刷新表单中的字段,然后保存。即使更新了创建日期,当您在 Word 中或从其他应用程序中提取文档时,Word 文档文本仍然显示旧日期,直到您刷新并手动保存模板。这些表格不 protected ,因此这不是问题。我看到一些用于编辑 Word 文件的 powershell 脚本,但无法准确找到用于刷新日期字段的脚本。我尝试使用修改日期和表单中的保存字段来尝试此脚本,但这也需要进入并实际保存表单。 powershell 或批处理(或任何脚本语言,此时不关心)中有没有一种方法可以让我刷新文档中的表单字段然后保存它们,或者任何人都可以想到任何其他方法来解决这个问题吗?我有几个文档需要完成此操作,因此每天早上手动执行此操作也是不切实际的。

编辑:我找到了以下代码,如下评论。在此代码中,我还发现需要将 Documents.Add 更改为 Documents.Open。我会注意到,这有助于按照我需要的方式操作保存日期,但 createate 仍然是一个谜。

$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()

最佳答案

要将文档另存为模板,请使用以下代码:

 $word = new-object -com Word.Application 
 $doc = $word.Documents.add($filename)
 $word.Visible = $False 
 $saveFormat = [Enum]::Parse([Microsoft.Office.Interop.Word.WdSaveFormat],"wdFormatTemplate")
 $doc.SaveAs([ref]$filename2,[ref]$saveFormat)
 $doc.Close() 
 $word.Quit()

这尚未针对模板进行测试,但我可以将其保存为 .doc 而不是默认的 .docx。此外,如果文件与打开的文件同名,它不会让您保存该文件。这就是为什么我将其更改为 $filename2。您可能需要执行一些重命名技巧才能使其正常工作,但这应该可以帮助您解决如何保存文件的问题。

关于powershell - 是否可以通过脚本更新Word文档中的表单字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14242639/

相关文章:

azure - 使用 azcopy 从带有 SAS 链接的 blob 下载 zip 文件

powershell - Gradle -v 命令指向旧版本

java - 使用 ANTLR 和 Java 构建解析树

C# 将 .doc 转换为 .htm

powershell - Windows 10 ver 1709中缺少Powershell

c# - Powershell 二进制模块 : Dynamic tab completion for Cmdlet parameter values

url - 如何在同一个选项卡中批量打开多个网站?

file - 使用 BATCH 脚本检查目录中是否存在任何类型的文件

c# - 创建 MS Word 文档时如何插入分页符

javascript - 读写 DOCX 文件