Search code examples
powershellcomheaderms-wordfooter

Powershell Update Fields in Header and Footer in Word


I'm trying to get a Powershell Script working that needs to update all fields I have in Header and Footers of all pages. But even after hours of research, I don't get any farther than being able to update the fields in the main text. Sure, that is really useful and everything and I am using it as well, but I would also like to update the fields in the headers.

I'm afraid I can't be of much help other than showing you the snippet I have that updates all my fields in the document. So here goes that.

objWord = New-Object -ComObject word.application
$objWord.ActiveDocument.Fields.Update() 

So, please, help.


Solution

  • I have been looking around since this morning and cannot find a approach that works for me. (Similar request to OP)

    I have checked Adil's link however it did not update all of the document.

    I needed to update external links (Objects) that I added to documents. Body, Headers and Footers need to be updated, however since many of the templates use multiple sections I was having issues.

    I believe there is some waste during the Sections loop however it ensures that the entire document is updated.

    Here is my solution:

            # Open Word Instance (Use True for Debugging)
            $Word = New-Object -ComObject "Word.Application"
            $Word.Visible = $True
    
            # Open Template for Editing
            $Doc = $Word.Documents.Open($file.FullName)
    
            # Update Main Content
            $Word.ActiveDocument.Fields.Update() 
    
            # Iterate through Sections
            foreach ($Section in $Doc.Sections)
            {
                # Update Header
                $Header = $Section.Headers.Item(1)
                $Header.Range.Fields.Update()
    
                # Update Footer
                $Footer = $Section.Footers.Item(1)
                $Footer.Range.Fields.Update()
            }
    
            # Save and Close Template
            $Doc.Save()
            $Doc.Close() 
    
            # Exit Word Instance
            $Word.Quit()