Лучший отвечающий
powershell и word. Функции по работе с Word-ом

Вопрос
-
Добрый день, друзья!
Пытаюсь автоматизировать создание договоров в Word и для этого хочу написать функцию, которая заменяет текст в документе на другой.
Действую следующим образом. Вот так открываю документ:
Функция замены у меня выглядит следующим образом (взял с какого-то сайта)# Создаю объект приложения Word $objWord = New-Object -comobject Word.Application $objWord.Visible = $True # Создаю объект документа $objDoc = $objWord.Documents.Open("C:\docs\my.doc")
# Использую функцию замены
ReplaceText($objDoc,"ШАБЛОН_ФАМИЛИЯ","Иванов")
Function ReplaceText($Document,$findtext,$replacewithtext) { $FindReplace=$Document.ActiveWindow.Selection.Find $matchCase = $false; $matchWholeWord = $true; $matchWildCards = $false; $matchSoundsLike = $false; $matchAllWordForms = $false; $forward = $true; $format = $false; $matchKashida = $false; $matchDiacritics = $false; $matchAlefHamza = $false; $matchControl = $false; $read_only = $false; $visible = $true; $replace = 2; $wrap = 1; $FindReplace.Execute($findText, $matchCase, $matchWholeWord, $matchWildCards, $matchSoundsLike, $matchAllWordForms, $forward, $wrap, $format, $replaceWithText, $replace, $matchKashida ,$matchDiacritics, $matchAlefHamza, $matchControl) }
К сожалению функция не работает. При этом она не выдаёт никаких ошибок, просто метод Execute возвращает False. Не подскажете, в чём может быть косяк?
19 октября 2016 г. 8:22
Ответы
-
ReplaceText $objDoc "ШАБЛОН_ФАМИЛИЯ" "Иванов"
- Помечено в качестве ответа KazunEditor 19 октября 2016 г. 9:33
19 октября 2016 г. 9:01Отвечающий
Все ответы
-
ReplaceText $objDoc "ШАБЛОН_ФАМИЛИЯ" "Иванов"
- Помечено в качестве ответа KazunEditor 19 октября 2016 г. 9:33
19 октября 2016 г. 9:01Отвечающий -
Спасибо, но к сожалению не помогает. Дело в том что параметры в функцию передаются. Если в неё добавить write-host $document - то по $document-у выводится вся его начинка. Но не понимаю, почему не работает замена.
Может делать передачу через ссылку? Но у меня не получается.
19 октября 2016 г. 9:06 -
Так не передают параметры, а как я указал, все прекрасно отрабатывает. Все значения принимает параметр $document, остальные пустые.
Разница передачи параметров:
PS C:\> Function ReplaceText($Document,$findtext,$replacewithtext) {$findtext,$replacewithtext} PS C:\> ReplaceText($objDoc,"ШАБЛОН_ФАМИЛИЯ","Иванов") PS C:\> ReplaceText $objDoc "ШАБЛОН_ФАМИЛИЯ" "Иванов" ШАБЛОН_ФАМИЛИЯ Иванов
- Изменено KazunEditor 19 октября 2016 г. 9:15
19 октября 2016 г. 9:12Отвечающий -
у вас
а должно быть значение 1 или 2$matchControl = $false;
19 октября 2016 г. 9:25 -
Спасибо, переделал всё с нуля. Заработало. Похоже что я где-то ещё допускал ошибку :)19 октября 2016 г. 9:27
-
у вас
а должно быть значение 1 или 2$matchControl = $false;
Можно ссылку в документации? - https://msdn.microsoft.com/en-us/library/office/ff194643.aspx
Selection.Find.MatchControl = True
19 октября 2016 г. 9:28Отвечающий -
а почему 1 или 2?19 октября 2016 г. 9:29
-
а не, я с реплейсом(wdReplace) попутал
19 октября 2016 г. 10:03 -
Добрый день, друзья!
Пытаюсь автоматизировать создание договоров в Word и для этого хочу написать функцию, которая заменяет текст в документе на другой.
А вы не пытались использовать штатное средство MSWord "документ слияния"?
my blog: http://shserg.ru/
29 октября 2016 г. 10:04