1

我的人力资源团队问我是否可以帮助他们为我们所有的员工制作新的名片。他们有一个 Publisher 文件,我正在尝试替换其中的文本。我已经编写了从 AD 和循环机制中提取信息的所有部分,但我无法让文本替换起作用。在使用 Word 中的Find.Execute 方法之前,我在 Microsoft Word 中做过类似的事情。这很简单,因为我只是将我的论点提供给该方法并且它起作用了。

不过这一次,我尝试使用来自 Publisher 的 FindReplace 对象。我想我在滥用它,但我不知道如何。我的代码如下,任何输入将不胜感激。抱歉,如果这是一个愚蠢的问题,但我对 PowerShell 和 .NET 还比较陌生。

$Document = "C:\Test\testcard.pub"

$Publisher = New-Object -comobject Publisher.Application  

$OpenDoc = $Publisher.Open($Document)

$OpenDoc.Find.Clear()
$OpenDoc.Find.FindText = "Jane"
$OpenDoc.Find.ReplaceWithText = "John"
$OpenDoc.Find.ReplaceScope = $pbReplaceScopeAll
$OpenDoc.Find.Execute() 

$OpenDoc.Save()
$OpenDoc.Close()
$Publisher.quit()
4

1 回答 1

0

我认为$pbReplaceScopeAll没有定义。即使它看起来应该在文档中。该文档使用 Visual Basic,这是一种从枚举隐式创建变量的语言。

PowerShell 不提供此功能,因此您必须直接引用所需的枚举值。这可能有效:

$OpenDoc.Find.ReplaceScope = [Publisher.PbReplaceScope]::pbReplaceScopeAll

如果这不起作用,看起来pbReplaceScopeAll2,所以你可以自己定义 $pbReplaceScopeAll :

$pbReplaceScopeAll = 2
## snip
$OpenDoc.Find.ReplaceScope = $pbReplaceScopeAll
于 2015-08-05T22:51:54.740 回答