2015-08-05 13 views
1

Моя команда HR спросила, могу ли я помочь им создать новые визитные карточки для всех наших сотрудников. У них есть файл Publisher, и я пытаюсь заменить текст. Я написал все части, которые извлекают информацию из AD и механизм циклирования, но я не могу получить замену текста в функции. Я сделал что-то подобное в Microsoft Word, прежде чем использовать Find.Execute Method from Word.. Это было просто, потому что я просто накормил метод своими аргументами, и он сработал.Замена текста в Microsoft Publisher с помощью Powershell

На этот раз, хотя я пытаюсь использовать FindReplace Object from Publisher. Я думаю, что я злоупотребляю им, но я не уверен, как это сделать. Мой код ниже, и любой ввод будет оценен. Извините, если это глупый вопрос, но я относительно новый для 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() 
+0

Где '$ pbReplaceScopeAll' взялось? Какова его ценность? –

+0

Он входит в объект FindReplace. https://msdn.microsoft.com/EN-US/library/office/ff939498.aspx Согласно Microsoft: «Значение свойства ReplaceScope может быть одной из констант PbReplaceScope, объявленных в библиотеке типов издателей Microsoft». Он подробно описан здесь: https://msdn.microsoft.com/EN-US/library/office/ff939038.aspx – SuperSputnik45

ответ

0

Я думаю, $pbReplaceScopeAll не определен. Несмотря на то, что это похоже на документацию. В документации используется Visual Basic, язык, который неявно создает переменные из перечислений.

PowerShell не предлагает эту функцию, поэтому вам нужно будет напрямую обратиться к the enumeration value, который вам нужен. Это может сработать:

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

Если это не сработает, it looks like значение pbReplaceScopeAll является 2, так что вы можете определить $ pbReplaceScopeAll себя:

$pbReplaceScopeAll = 2 
## snip 
$OpenDoc.Find.ReplaceScope = $pbReplaceScopeAll 
+0

Используя значение (2) pbReplaceScopeAll! Попытка вызвать участника pbReplaceScope не сделала. У меня создалось впечатление, что двойные двоеточия могут использоваться только при доступе к методам? Я там не прав? Большое спасибо за помощь. Моя команда HR будет очень благодарна. – SuperSputnik45

+0

Двойной двоеточие - это статический метод/свойство, используемый для доступа к статическим методам и свойствам класса. Перечисления и их значения рассматриваются как статические классы и свойства PowerShell. Следовательно, '[DayOfWeek] :: Friday' для доступа к значению перечисления. –

+0

'[Publisher.PbReplaceScope] :: pbReplaceScopeAll', вероятно, не работает, потому что вам нужно полное имя перечисления, и я предполагал (документация не дает пространство имен enum). Вы можете понять это путем pipling '$ OpenDoc.Find'' Get-Member': '$ OpenDoc.Find | Get-Member'. –