我试图编写一个Powershell脚本来编辑Microsoft Office Word 2007中的文本表单字段。它应该通过我之前配置的书签找到一个表单字段,并在其中写入文本。我为测试目的写入的默认文本是" Something"。 这就是我到目前为止所做的:
$document = 'D:\Powershell\Test.docx'
$Word = New-Object -Com Word.Application
$Word.Visible = $True
$doc = $word.Documents.Open($document)
$text = "Hello"
$bookmark = "server1"
$doc.Bookmarks.Item($bookmark).Range.Text.Replace("Something", $text)
虽然它在控制台中有效,但输出为:
FORMTEXT Hello
Word仍会显示之前手动插入的字符串。 当我输入时:
$doc.Bookmarks.Item($bookmark).Range.Text
输出结果为:
FORMTEXT Something
我已经尝试过:
$Word.ActiveDocument.Reload()
$Word.ActiveDocument.Fields.Update()
$doc.PrintPreview()
$doc.ClosePrintPreview()
$doc.Bookmarks.Item($bookmark).Range.Fields.Update()
但似乎没有任何效果。 有人知道如何永久地在文本表单字段中写一些东西吗? 或者,如果这更容易,我可以使用(丰富的)文本内容控件(似乎更新)。那些不使用书签,但标签和标题。 谢谢你的帮助提前。 PS:它也不能与MS Word 2016一起使用。
答案 0 :(得分:2)
如果您有遗留文本表单字段,则书签实际上是用于标识字段的。如果您尝试编写替换VBA中书签的文本(比如说),您可能会收到错误6028 - “无法删除范围”。
我不知道Powershell在没有检查的情况下做得好,但等效的VBA将是
doc.FormFields($bookmark).Result = "Something"
所以我猜想powershell就像是
$doc.FormFields.Item($bookmark).Result = "Something"