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