PowerShell:更新/刷新 Word 文档的目录

PowerShell:更新/刷新 Word 文档的目录

我正在编写一个 PowerShell 脚本来自动更新/刷新 Word 文档中的目录(该脚本之前是从一个不能自动执行此操作的应用程序导出的)

导出文档中的目录如下:

在此处输入图片描述

单击(当前目录)它会正确生成目录。

但是,我希望使用 PowerShell 自动完成此操作,并想出了以下脚本(请注意,我是 PowerShell 初学者):

$latestFile = Get-ChildItem -Path C:\ExportedDocuments -File -Filter "*.docx" | Sort-Object LastAccessTime -Descending | Select-Object -First 1     
$word = New-Object -ComObject Word.Application
$word.Visible=$true
$doc=$word.Documents.Open($latestFile.FullName)
$toc = $latestFile.TablesOfContents
$toc.Update()
$latestFile.save()
$latestFile.close()

我收到以下错误 - 但我不完全理解并且也不知道如何修复它们:

You cannot call a method on a null-valued expression. At line:6 char:1
+ $toc.Update()
+ ~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [], RuntimeException
    + FullyQualifiedErrorId : InvokeMethodOnNull   Method invocation failed because [System.IO.FileInfo] does not contain a method named 'save'. At line:7 char:1
+ $latestFile.save()
+ ~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [], RuntimeException
    + FullyQualifiedErrorId : MethodNotFound   Method invocation failed because [System.IO.FileInfo] does not contain a method named 'close'. At line:8 char:1
+ $latestFile.close()
+ ~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [], RuntimeException
    + FullyQualifiedErrorId : MethodNotFound

答案1

请参阅下面修改后的脚本:

$latestFile = Get-ChildItem -Path C:\ExportedDocuments -File -Filter "*.docx" | Sort-Object LastAccessTime -Descending | Select-Object -First 1
$word = New-Object -ComObject Word.Application
$word.Visible = $true
$doc = $word.Documents.Open($latestFile.FullName)
$toc = $doc.TablesOfContents
$toc.item(1).update()
$doc.save()
$doc.close()

您遇到的第一个问题是,您将文档分配给对象 $doc,然后在下一行尝试再次直接调用该文档,而不是引用对象 $doc:

$doc = $word.Documents.Open($latestFile.FullName)
$toc = $latestFile.TablesOfContents

第二个问题正如其他用户所提到的,您需要参考要更新的 ToC:

$toc.item(1).update()

答案2

一个人可以有多个Tables目录,这就是为什么它被称为表s的內容。

您应该使用TablesOfContents(1).Update()

相关内容