Ste*_*BEG 5 com powershell ms-word
我已经设法找到并编辑每个单词文件。有了这个代码:
$objWord = New-Object -comobject Word.Application
$objWord.Visible = $false
$objDoc = $objWord.Documents.Open("C:\users\stefan\test\New Microsoft Word Document.docx")
$objSelection = $objWord.Selection
$FindText = "that"
$MatchCase = $False
$MatchWholeWord = $true
$MatchWildcards = $False
$MatchSoundsLike = $False
$MatchAllWordForms = $False
$Forward = $True
$Wrap = $wdFindContinue
$Format = $False
$wdReplaceNone = 0
$ReplaceWith = "this"
$wdFindContinue = 1
$a = $objSelection.Find.Execute($FindText,$MatchCase,$MatchWholeWord, `
$MatchWildcards,$MatchSoundsLike,$MatchAllWordForms,$Forward,`
$Wrap,$Format,$ReplaceWith)
$objDoc.Save()
$objWord.Quit()
Run Code Online (Sandbox Code Playgroud)
但我想对整个文件夹执行此操作。我尝试插入这样的内容:
$objWord = New-Object -comobject Word.Application
$objWord.Visible = $false
$list = Get-ChildItem "c:\users\stefan\test\*.*" -Include *.doc*
foreach($item in $list){
$objDoc = $objWord.Documents.Open($list.FullName,$true)
$objSelection = $objWord.Selection
$FindText = "Sara"
$MatchCase = $False
$MatchWholeWord = $true
$MatchWildcards = $False
$MatchSoundsLike = $False
$MatchAllWordForms = $False
$Forward = $True
$Wrap = $wdFindContinue
$Format = $False
$wdReplaceNone = 0
$ReplaceWith = "AJMOO"
$wdFindContinue = 1
$a = $objSelection.Find.Execute($FindText,$MatchCase,$MatchWholeWord, `
$MatchWildcards,$MatchSoundsLike,$MatchAllWordForms,$Forward,`
$Wrap,$Format,$ReplaceWith)
$objDoc.Save()
$objWord.Quit()
}
Run Code Online (Sandbox Code Playgroud)
另外,它只更改找到的一项,但我想要文件中的所有项目。谢谢。
另外,它只更改找到的一项,但我想要文件中的所有项目
这是因为您没有将替换范围设置为所有项目。该参数来自您在Execute 方法调用中未指定的下一个参数。设置一个名为 的变量$wdReplaceAll并将其设置为 2。然后您调整调用以添加该变量。
$a = $objSelection.Find.Execute($FindText,$MatchCase,$MatchWholeWord, `
$MatchWildcards,$MatchSoundsLike,$MatchAllWordForms,$Forward,`
$Wrap,$Format,$ReplaceWith,$wdReplaceAll)
Run Code Online (Sandbox Code Playgroud)
这解决了针对一个文件运行时的问题。
但我想对整个文件夹执行此操作
部分问题是您没有正确查询文件夹中的文件。-Include很挑剔,并且在与您合作时工作-Recurse,但是您将其视为-Filter无论如何,因此请进行调整。
$list = Get-ChildItem "c:\users\stefan\test\" -filter "*.doc*"
Run Code Online (Sandbox Code Playgroud)
接下来,当您循环时,您不使用当前迭代,而是在调用时使用整个集合.open()
$objDoc = $objWord.Documents.Open($list.FullName,$true)
Run Code Online (Sandbox Code Playgroud)
应该改为
$objDoc = $objWord.Documents.Open($item.FullName,$true)
Run Code Online (Sandbox Code Playgroud)
根据你的循环定义。
现在,您需要确保在退出应用程序之前关闭每个文档。现在你正在退出循环内的单词。
foreach($item in $list){
#.... Stuff and things happens here.
$objDoc.Save()
$objDoc.Close()
}
$objWord.Quit()
Run Code Online (Sandbox Code Playgroud)
现在您设置$wrap为变量的值$wdFindContinue。第一次调用时$wdFindContinue为 null,因为它没有在代码后面的几行中设置。
$Wrap = $wdFindContinue
#...
$wdFindContinue = 1
Run Code Online (Sandbox Code Playgroud)
切换这些行的顺序或直接设置$wrap为 1。我不确定这不正确的含义。
| 归档时间: |
|
| 查看次数: |
11827 次 |
| 最近记录: |