使用Powershell在Word文档中选择下拉列表项

inn6fuwd  于 2023-05-07  发布在  Shell
关注(0)|答案(1)|浏览(113)

我正在编写一个powershell脚本,它可以将Word文档作为COM对象打开,并使用内容控件对其进行编辑。每个内容控件都由Word文档中分配给它的标题标识。我可以编辑文本框和复选框,但我不知道如何更改Word文档中下拉列表中选中的项目。
下面是我尝试过的代码的一个例子,它成功地改变了文本框和复选框,但对下拉列表不起作用。我看到的所有文档似乎都是VBA的,所以我不知道如何使用powershell与下拉列表交互。这是我在com对象中查看内容控件具有哪些属性后的最佳猜测。

$filename = "C:\Path\File.docx"
$wordPg1 = New-Object -comobject Word.Application
$wordPg1.Visible = $False
$Page1Doc = $wordPg1.documents.open($filename)
$Page1Fields = $Page1Doc.ContentControls

           foreach($field in $Page1Fields)
           {
               switch ( $field.Title )
               {
                   # These two work
                   "Text Box"      { $field.Range.Text = "1234" }
                   "Check Box"     { $field.Checked = $TRUE }
                   # This one doesn't work
                   "Dropdown"      { $field.DropdownListEntries.Index = 2 }
               }
           }

$SaveAsFileName = "C:\Path\FileEdited.docx"
$Page1Doc.SaveAs([ref]$SaveAsFileName)

$Page1Doc.Close()
$wordPg1.Quit()
$null = [System.Runtime.InteropServices.Marshal]::ReleaseComObject($wordPg1)

这给出了错误
设置“索引”异常:“在此对象上找不到属性'Index'。验证属性是否存在并且可以设置。”

qcuzuvrc

qcuzuvrc1#

我找到了我一直在寻找的正确措辞。这现在工作正常,并选择下拉列表中的第二个项目。

$filename = "C:\Path\File.docx"
$wordPg1 = New-Object -comobject Word.Application
$wordPg1.Visible = $False
$Page1Doc = $wordPg1.documents.open($filename)
$Page1Fields = $Page1Doc.ContentControls

           foreach($field in $Page1Fields)
           {
               switch ( $field.Title )
               {
                   # These two work
                   "Text Box"      { $field.Range.Text = "1234" }
                   "Check Box"     { $field.Checked = $TRUE }
                   # This will now select the second item in the dropdown list
                   "Dropdown"      { $field.DropdownListEntries.Item(2).Select() }
               }
           }

$SaveAsFileName = "C:\Path\FileEdited.docx"
$Page1Doc.SaveAs([ref]$SaveAsFileName)

$Page1Doc.Close()
$wordPg1.Quit()
$null = [System.Runtime.InteropServices.Marshal]::ReleaseComObject($wordPg1)

相关问题