Я работаю над сценарием PowerShell для автоматического обновления / обновления оглавления в документе Word (который ранее был экспортирован из приложения, которое не делает этого автоматически)

Содержание в экспортированном документе прибывает так:

При нажатии (Inhaltsverzeichnis aktualisieren) он генерирует оглавление должным образом.

Однако я хочу, чтобы это происходило автоматически с помощью 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

2 ответа2

1

Можно иметь несколько Таблицу s Of Contents, поэтому это называется OfContents таблица S.

Вы должны использовать TablesOfContents(1).Update() .

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .