【问题标题】:Programmatically remove all hidden text in a Word document以编程方式删除 Word 文档中的所有隐藏文本
【发布时间】:2017-04-01 01:46:21
【问题描述】:

使用 PowerShell,我需要编写一个脚本来删除 Word 文档的所有隐藏文本。

这是我目前所拥有的:

$WordDocument = Get-Item "C:\MyWordDocument.docx"

$word_app = New-Object -ComObject Word.Application
$word_app.Visible = $false

$document = $word_app.Documents.Open($WordDocument.FullName)

$objSelection = $word_app.Selection 
$objSelection.Font.Hidden = $True

$FindText = "" # search on formatting only (according to MS doc)
$wdFindContinue = 1
$ReplaceAll = 2
$MatchCase = $False 
$MatchWholeWord = $False 
$MatchWildcards = $False 
$MatchSoundsLike = $False 
$MatchAllWordForms = $False 
$Forward = $True 
$Wrap = $wdFindContinue 
$Format = $True # ?
$ReplaceWith = "" 

$a = $objSelection.Find.Execute($FindText,$MatchCase,$MatchWholeWord, ` 
    $MatchWildcards,$MatchSoundsLike,$MatchAllWordForms,$Forward,` 
    $Wrap,$Format,$ReplaceWith,$ReplaceAll) 
$document.Save()
$document.Close()

$word_app.Quit()

它不起作用,我不知道为什么。

有什么想法吗?

【问题讨论】:

  • 您好 Jérôme,您正在将 $a 分配给 Find.Execute 方法调用。从 MS 文档 link 中可以看出,返回类型是 True 或 False。 $a 是真还是假?我认为您不需要 $a ,除非您想知道它是真还是假。如果您删除 $a,它是否运行正确?谢谢,蒂姆。
  • 它实际上返回 $false... 我不明白为什么。
  • $objSelection.Find.Execute($FindText,$MatchCase,$MatchWholeWord, $MatchWildcards,$MatchSoundsLike,$MatchAllWordForms,$Forward,$Wrap,$Format,$ReplaceWith,$ReplaceAll) 会发生什么如果你只是运行上面的?而不是 $a = 在它前面。
  • 同样的问题,没有任何改变...

标签: powershell ms-word com


【解决方案1】:

错误在于您将搜索过滤器设置为查找隐藏文本。您需要在 $objSelection.Find 对象上设置属性,而不是 $objSelection.Font.Hidden = $True(这实际上隐藏了当前选定的文本):

$objSelection.Find.Font.Hidden = $True

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-10
    • 1970-01-01
    相关资源
    最近更新 更多