【问题标题】:Replace specific Text in Header, Footer and normal Text in Word file替换 Word 文件中页眉、页脚和普通文本中的特定文本
【发布时间】:2018-02-12 13:33:28
【问题描述】:

我正在尝试编写一个 PowerShell 脚本,将 word 文件中的一个字符串替换为另一个字符串。我需要更新超过 500 个单词的模板和文件,所以我不想手工制作。一个问题是我在页脚或页眉中找不到文本,因为它们都是单独的并且是带有图像的表格。我设法在正常的“正文”文本中找到文本,但现在还没有替换它。这是我的查找代码。

$path = "C:\Users\BambergerSv\Desktop\PS\Vorlagen"
$files = Get-Childitem $path -Include *dotm, *docx, *.dot, *.doc, *.DOT, *DOTM, *.DOCX, *.DOC -Recurse |
         Where-Object { !($_.PSIsContainer) }
$application = New-Object -ComObject Word.Application
$application.Visible = $true
$findtext = "www.subdomain.domain.com"

function getStringMatch {
    foreach ($file In $files) {
        #Write-Host $file.FullName
        $document = $application.Documents.Open($file.FullName, $false, $true)
        if ($document.Content.Text -match $findtext) {
            Write-Host "found text in file " $file.FullName "`n"
        }
        try {
            $application.Documents.Close()
        } catch {
            continue
            Write-Host $file.FullName "is a read only file" #if it is write protected because of the makros
        }
    }
    $application.Quit()
}

getStringMatch

【问题讨论】:

    标签: powershell ms-word header find footer


    【解决方案1】:

    我在互联网上搜索过。我找到了这个问题的答案。

    首先您需要了解 VBA。在 MS WORD 中写入以下宏,然后保存。

    Public Function CustomReplace(findValue As String, replaceValue As String) As String
    
     For Each myStoryRange In ActiveDocument.StoryRanges
    
         myStoryRange.find.Execute FindText:=findValue, Forward:=True, ReplaceWith:=replaceValue, replace:=wdReplaceAll
         While myStoryRange.find.Found
               myStoryRange.find.Execute FindText:=findValue, Forward:=True, ReplaceWith:=replaceValue, replace:=wdReplaceAll
         Wend
         While Not (myStoryRange.NextStoryRange Is Nothing)
              Set myStoryRange = myStoryRange.NextStoryRange
              myStoryRange.find.Execute FindText:=findValue, Forward:=True, ReplaceWith:=replaceValue, replace:=wdReplaceAll
    
              While myStoryRange.find.Found
                   myStoryRange.find.Execute FindText:=findValue, Forward:=True,ReplaceWith:=replaceValue, replace:=wdReplaceAll
              Wend
    
         Wend
      Next myStoryRange
    CustomReplace = ActiveDocument.FullName
    End Function
    

    将上述宏添加到MS WORD后,进入Powershell并执行以下代码。

    $word = New-Object -ComObject Word.Application
    $word.visible=$false
    $files = Get-ChildItem "C:\Users\Ali\Desktop\Test" -Filter *.docx
    
    $find=[ref]"Hello"
    $replace=[ref]"Hi"
    
    
    for ($i=0; $i -lt $files.Count; $i++) {
      $filename = $files[$i].FullName 
      $doc = $word.Documents.Open($filename)
    
      $word.Run("CustomReplace",$find,$replace)
      $doc.Save()
      $doc.close()
      }
    
     $word.quit()
    

    【讨论】:

      猜你喜欢
      • 2022-01-11
      • 1970-01-01
      • 2013-01-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-20
      相关资源
      最近更新 更多