如何使用Powershell替换Word中单行和异行的文本?
How to use Powershell to replace text in Word which is in single line and different line?
所以我想使用 PowerShell 编辑 .docx 文件:名字、姓氏、地址、薪水、入职日期等。
我是 PowerShell 的 初学者,所以我不太了解代码;所以,首先我想要 运行 一些东西来改变 Word 模板中全名的所有实例。
$objWord = New-Object -ComObject word.application
$objWord.Visible = $True
$objDoc = $objWord.Documents.Open("C:\...")
$objSelection = $objWord.Selection
$FindText = "<First Name> <Last Name>"
$ReplaceText = "Someone Something"
$ReplaceAll = 2
$FindContinue = 1
$MatchCase = $False
$MatchWholeWord = $True
$MatchWildcards = $False
$MatchSoundsLike = $False
$MatchAllWordForms = $False
$Forward = $True
$Wrap = $FindContinue
$Format = $False
$objSelection.Find.Execute($FindText,$MatchCase,
$MatchWholeWord,$MatchWildcards,$MatchSoundsLike,
$MatchAllWordForms,$Forward,$Wrap,$Format,
$ReplaceText,$ReplaceAll)
因此,当名字和姓氏位于同一行时,这适用于所有实例,但当我将它们放在彼此下面的不同行中时则无效:
名字
姓氏
如何编写代码才能包含此类示例?
找到了一个解决方法,现在似乎运行良好。
希望这对某人有帮助
$objWord = New-Object -ComObject word.application
$objWord.Visible = $True
$objDoc = $objWord.Documents.Open("Path")
$objSelection = $objWord.Selection
function wordSearch($currentValue, $replaceValue){
$objSelection = $objWord.Selection
$FindText = $currentValue
$MatchCase = $false
$MatchWholeWord = $true
$MatchWildcards = $false
$MatchSoundsLike = $false
$MatchAllWordForms = $false
$Forward = $true
$wrap = $wdFindContinue
$wdFindContinue = 1
$Format = $false
$ReplaceWith = $hash[$value]
$ReplaceAll = 2
$objSelection.Find.Execute($FindText, $MatchCase, $MatchWholeWord, $MatchWildcards, $MatchSoundsLike, $MatchAllWordForms, $Forward, $wrap, $Format, $ReplaceWith, $ReplaceAll)
}
$hash = @{"<First Name>" = "Value1"; "<Last Name>"="Value2"; "<Job>"="Value3"}
foreach($value in $hash.Keys) {
$currentValue = $value
$replaceValue = $hash[$value]
wordSearch $currentValue $replaceValue
}
所以我想使用 PowerShell 编辑 .docx 文件:名字、姓氏、地址、薪水、入职日期等。 我是 PowerShell 的 初学者,所以我不太了解代码;所以,首先我想要 运行 一些东西来改变 Word 模板中全名的所有实例。
$objWord = New-Object -ComObject word.application
$objWord.Visible = $True
$objDoc = $objWord.Documents.Open("C:\...")
$objSelection = $objWord.Selection
$FindText = "<First Name> <Last Name>"
$ReplaceText = "Someone Something"
$ReplaceAll = 2
$FindContinue = 1
$MatchCase = $False
$MatchWholeWord = $True
$MatchWildcards = $False
$MatchSoundsLike = $False
$MatchAllWordForms = $False
$Forward = $True
$Wrap = $FindContinue
$Format = $False
$objSelection.Find.Execute($FindText,$MatchCase,
$MatchWholeWord,$MatchWildcards,$MatchSoundsLike,
$MatchAllWordForms,$Forward,$Wrap,$Format,
$ReplaceText,$ReplaceAll)
因此,当名字和姓氏位于同一行时,这适用于所有实例,但当我将它们放在彼此下面的不同行中时则无效:
名字
姓氏
如何编写代码才能包含此类示例?
找到了一个解决方法,现在似乎运行良好。 希望这对某人有帮助
$objWord = New-Object -ComObject word.application
$objWord.Visible = $True
$objDoc = $objWord.Documents.Open("Path")
$objSelection = $objWord.Selection
function wordSearch($currentValue, $replaceValue){
$objSelection = $objWord.Selection
$FindText = $currentValue
$MatchCase = $false
$MatchWholeWord = $true
$MatchWildcards = $false
$MatchSoundsLike = $false
$MatchAllWordForms = $false
$Forward = $true
$wrap = $wdFindContinue
$wdFindContinue = 1
$Format = $false
$ReplaceWith = $hash[$value]
$ReplaceAll = 2
$objSelection.Find.Execute($FindText, $MatchCase, $MatchWholeWord, $MatchWildcards, $MatchSoundsLike, $MatchAllWordForms, $Forward, $wrap, $Format, $ReplaceWith, $ReplaceAll)
}
$hash = @{"<First Name>" = "Value1"; "<Last Name>"="Value2"; "<Job>"="Value3"}
foreach($value in $hash.Keys) {
$currentValue = $value
$replaceValue = $hash[$value]
wordSearch $currentValue $replaceValue
}