none
powershell и word. Функции по работе с Word-ом RRS feed

  • Вопрос

  • Добрый день, друзья!

    Пытаюсь автоматизировать создание договоров в 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
    Отвечающий
  • Спасибо, но к сожалению не помогает. Дело в том что параметры в функцию передаются. Если в неё добавить 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
    Отвечающий
  • у вас

    $matchControl = $false;

    а должно быть значение 1 или 2
    19 октября 2016 г. 9:25
  • Спасибо, переделал всё с нуля. Заработало. Похоже что я где-то ещё допускал ошибку :)
    19 октября 2016 г. 9:27
  • у вас

    $matchControl = $false;

    а должно быть значение 1 или 2

    Можно ссылку в документации? - 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