Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Powershell在Word文档标题的文本框中查找并替换_Powershell_Ms Word_Powershell 3.0 - Fatal编程技术网

使用Powershell在Word文档标题的文本框中查找并替换

使用Powershell在Word文档标题的文本框中查找并替换,powershell,ms-word,powershell-3.0,Powershell,Ms Word,Powershell 3.0,我正在尝试使用Powershell查找并替换Word文档(.docx)标题中文本框中的某些文本。我能够让它在页眉以外的文本中工作,但在页眉内却不行。我认为这是失败的,因为我没有正确地访问文本框的内容,所以我在最后一行添加了内容(在退出并保存之前),以查看文本是什么,但对于标题中的三个项目,它都是空白的。这是我第一次使用Powershell,我想我学习和编写它的时间可能比使用它节省的时间还要多 脚本的相关片段如下所示: $word = New-Object -COM "Word.Applicati

我正在尝试使用Powershell查找并替换Word文档(.docx)标题中文本框中的某些文本。我能够让它在页眉以外的文本中工作,但在页眉内却不行。我认为这是失败的,因为我没有正确地访问文本框的内容,所以我在最后一行添加了内容(在退出并保存之前),以查看文本是什么,但对于标题中的三个项目,它都是空白的。这是我第一次使用Powershell,我想我学习和编写它的时间可能比使用它节省的时间还要多

脚本的相关片段如下所示:

$word = New-Object -COM "Word.Application";
$word.Visible = $false;
$doc = $word.Documents.Open($FullPath);
$selection = $word.Selection;
$section = $doc.sections.item(1);
$header = $section.headers.Item(3);
$FindText = "Cnnn";
$MatchCase = $False;
$MatchWholeWord = $False;
$MatchWildcards = $False;
$MatchSoundsLike = $False;
$MatchAllWordForms = $False;
$Forward = $True;
$wdFindContinue = 1;
$Wrap = $wdFindContinue;
$Format = $False;
$wdReplaceNone = 0;
$ReplaceAll = 2;
$ReplaceWith = "C" + $newString; 
$a = $header.Find.Execute($FindText,$MatchCase,$MatchWholeWord, ` 
$MatchWildcards,$MatchSoundsLike,$MatchAllWordForms,$Forward,` 
$Wrap,$Format,$ReplaceWith, $ReplaceAll);

Write-Host ("Header is: " + $header.Text);

$doc.Save();
$word.Quit();

您需要将搜索应用于
.TextFrame.TextRange。从
文本框
或任何包含文本的
形状
中查找
对象。 您可以尝试以下方法:

If ($header.ShapeRange.Count) {
  ForEach ($shp in $header.ShapeRange) {
    If ($shp.TextFrame.HasText) {
      $obj = $shp.TextFrame.TextRange.Find
      $a = $obj.Execute($FindText,$MatchCase,$MatchWholeWord,` 
             $MatchWildcards,$MatchSoundsLike,$MatchAllWordForms,$Forward,` 
             $Wrap,$Format,$ReplaceWith,$ReplaceAll)
    }
  }
}

为什么
$section.headers.Item(3)
?它不应该是第(1)项吗?你要找的页眉是什么?嗨,@Mathias抱歉是的,在第1页,所有的页面实际上,我只是在尝试不同的东西。当我有第(1)项时,它将标题文本打印为斜杠-“/”