PowerShell работа с Microsoft Word

PowerShell работа с Microsoft Word

PowerShell работа с Microsoft Word

Доброго времени суток друзья. Я уже рассказывал, как можно работать с Microsoft Excel средствами PowerShell. В данной статье мы рассмотрим работу PowerShell с Microsoft Word . Как и для Excel, чтобы получить доступ к MS Word нужно использовать COM объект. Для этого используем командлет New-Object с параметром –ComObject далее сам объект к которому хотим получить доступ, в нашем случае это Word.Application .

  
    #Создаем новый объект WORD
    $word = New-Object -ComObject Word.Application
  

После создания объекта обращаемся к свойству Visible и переключаем его в TRUE чтобы видеть работу скрипта непосредственно в самом MS Word а не в фоновом режиме.

  
    #Видимый режим вставки, по умолчанию FALSE
    $word.Visible = $True
  

Далее необходимо создать сам документ для этого обращаемся к свойству Documents и его методу Add() .

  
    #Создаем новый документ
    $doc = $word.Documents.Add()
  

Обратимся к свойству Selection для работы с текущим документом, далее мы будем использовать его для форматирования нашего документа.

  
    #Выбираем открывшийся документ для работы
    $Selection = $word.Selection
  

Задаем начальные настройки для документа допустим отступы со всех сторон.

  
    #Устанавливаем отступы для документа
    $Selection.Pagesetup.TopMargin = 50
    $Selection.Pagesetup.LeftMargin = 50
    $Selection.Pagesetup.RightMargin = 50
    $Selection.Pagesetup.BottomMargin = 50
  

Установим строчный интервал сверху и снизу.

  
    #Интервал отступов сверху и снизу
    $Selection.ParagraphFormat.SpaceBefore = 0
    $Selection.ParagraphFormat.SpaceAfter = 0
  

Подготовительные работы закончены, теперь можем заполнять наш документ. Укажем что наш первый абзац будет по центру для этого воспользуемся свойством ParagraphFormat и его свойством Aligment .

  
    #Выравнивание по центру
    $Selection.ParagraphFormat.Alignment = 1
  

Далее создаем таблицу с одной строкой и одной ячейкой которую зальем черным цветом и разместим пользовательскую картинку.

  
    #Добавляем таблицу
    $Table = $Word.ActiveDocument.Tables.Add($Word.Selection.Range, 1, 1)

    #Устанавливаем черный цвет заливки ячейки
    $Table.Cell(1,1).Shading.BackgroundPatternColor = 0

    #Вставляем картинку в ячейку таблицы
    $Table.Cell(1,1).Range.InlineShapes.AddPicture("D:\Temp\bezramok-tlt.png")

    #Конец таблицы, начать новую строку
    $Selection.EndKey(6, 0)
  

Далее переходим на новую строчку документа воспользовавшись методом TypeParagraph() .

  
    #Новый параграф
    $Selection.TypeParagraph()
  

Далее установим нужные настройки для нашего заголовка.

  
    #Шрифт написания
    $Selection.Font.Name = "Times New Roman"

    #Размер шрифта
    $Selection.Font.Size = 18
  

Как видно из примера мы установили шрифт Time New Roman и размер шрифта 18 , далее вставляем текст.

  
    #Текст заголовка
    $Selection.TypeText("Работаем с Microsoft Word при помощи PowerShell")
  

Для следующего текста поменяем настройки шрифта и размер и вид, а также выровняем текст по ширине документа.

  
    #Выравнивание по ширине листа
    $Selection.ParagraphFormat.Alignment = 3

    #Устанавливаем новые значения размера шрифта
    $Selection.Font.Name = "Arial"
    $Selection.Font.Size = 12

    #Пишем курсивом
    $Selection.Font.Italic = $true
  

Далее добавляем новый текст в наш документ.

  
    #Добавляем следующий текст
    $Selection.TypeText("Windows PowerShell — расширяемое средство автоматизации от Microsoft с открытым исходным кодом")
  

Так как для следующего текста нам не нужен курсив, то отключаем его.

  
    #отключаем курсив
    $Selection.Font.Italic = $false
  

Далее создаем настройки для следующего текста, выправным его по центру и изменим цвет на темно-зеленый, а также выделим жирным.

  
    #Вставляем заголовок по центру
    $Selection.ParagraphFormat.Alignment = 1

    #Устанавливаем новые значения размера шрифта
    $Selection.Font.Name = "Arial"
    $Selection.Font.Size = 18

    #Делаем цвет текста темно-зеленым
    $Selection.Font.Color = "wdColorDarkGreen"

    #Выделяем жирным
    $Selection.Font.Bold = $True

    #Следующий текст в нашем документе
    $Selection.TypeText("Добавляем картинку из файла ")
  

Далее вставляем картинку в документ по центру, для этого используем свойство InlineShapes и его метод AddPicture() передав путь до картинки.

  
    #Вставляем картинку из файла
    $Selection.InlineShapes.AddPicture("D:\Temp\word.jpg")
  

Далее отменяем центрирование и меняем цвет текста на черный.

  
    #Делаем цвет текста черным
    $Selection.Font.Color = 0

    #Отменяем жирный
    $Selection.Font.Bold = $False
  

Устанавливаем новые настройки для следующего текста.

  
    #Настройки размера шрифта для нового текста
    $Selection.Font.Name="Times New Roman"
    $Selection.Font.Size=12
  

Далее создадим таблицу с тремя столбцами в которую заполним с помощью PowerShell .

  
    #Добавляем таблицу
    $Table = $Word.ActiveDocument.Tables.Add($Word.Selection.Range, 1, 3)

    #Ручной вариант форматирования таблицы
    # $Table.Range.Style = "Table Grid"
    # $Table.Borders.InsideLineStyle = 1
    # $Table.Borders.OutsideLineStyle = 1

    #Заполняем шапку таблицы
    $Table.Cell(1,1).Range.Text = "№"
    $Table.Cell(1,2).Range.Text = "Name"
    $Table.Cell(1,3).Range.Text = "DysplayName"

    #Счетчики для генерации таблицы
    $i = 2
    $counter = 1

    #Получаем список всех процессов на компьютере
    $srv = Get-Service a*

    #Записываем полученые данные в ячейки таблицы
    foreach ($arr in $srv)
    {
    $Table.Rows.Add()
    $Table.Cell($i,1).Range.Text = $counter
    $Table.Cell($i,2).Range.Text = $arr.Name
    $Table.Cell($i,3).Range.Text = $arr.DisplayName


    #инкрементируем счетчики
    $i = $i + 1
    $counter = $counter + 1
    }

    #Автоформатирование таблицы
    $Table.AutoFormat(20)

    #Конец таблицы, начать новую строку
    $Selection.EndKey(6, 0)
  

Здесь нужно отметить, что ячейки таблицы начинаются с 1 . Для генерации новой строки нужно использовать свойство Rows и его метод Add() . Для удобства форматирования таблицы используем метод AutoFormat() передав число (это идентификатор шаблона форматирования таблицы). Для перехода от таблицы к обычному документу используем метод EndKey(6, 0) .

Далее создаем настройки для нового текста, выровняем все по левому краю и добавим гиперссылок в наш документ.

  
    #Вставляем заголовок по центру
    $Selection.paragraphFormat.Alignment = 0

    #Размер шрифта
    $Selection.Font.Size=14

    #Текст
    $Selection.TypeText("Урок создал")

    #Новый параграф
    $Selection.TypeParagraph()

    #Размер шрифта
    $Selection.Font.Size=12

    #Гиперссылка сайта
    $Selection.Hyperlinks.Add($Selection.Range,"http:#bezramok-tlt.ru")

    #Новый параграф
    $Selection.TypeParagraph()

    #Гиперссылка почты
    $Selection.Hyperlinks.Add($Selection.Range,"mailto:bezramok-tlt@mail.ru")

    #Новый параграф
    $Selection.TypeParagraph()

    #Текст
    $Selection.TypeText("Админ")

    #Новый параграф
    $Selection.TypeParagraph()

    #Размер шрифта
    $Selection.Font.Size=10

    #Текст
    $Selection.TypeText("Дата: " + $date)
  

Как вы заметили мы использовали свойство Hyperlinks и его метод Add() в который передали URL для гиперссылки.

Далее сохраняем документ (СохранитьКак) указываем путь куда будем сохранять наш файл, закрываем сам документ, закрываем само приложение MS Word.

  
    #СохранитьКак указываем путь куда и имя файла
    $doc.SaveAs([ref]"D:\temp\PsWord.docx")

    #Закрываем документ
    $doc.Close()

    #Закрываем приложение
    $word.Quit()
  

Я постарался собрать на мой взгляд основные действия для заполнения документа – это форматирование текста, изменение размера текста, шрифта, цвета. Создание таблиц, заполнение таблицы графически и текстовым материалом, а также заливка ячейки цветом.

Вот таким способом можно создавать документы MS Word с помощью PowerShell .

Скрипт PowerShell работа с MS Word целиком

  
    #Получаем текущую дату
    $date = Get-Date

    #Создаем новый объект WORD
    $word = New-Object -ComObject Word.Application

    #Видимый режим вставки, по умолчанию FALSE
    $word.Visible = $True

    #Создаем новый документ
    $doc = $word.Documents.Add()

    #Выбираем открывшийся документ для работы
    $Selection = $word.Selection

    #Устанавливаем отступы для документа
    $Selection.Pagesetup.TopMargin = 50
    $Selection.Pagesetup.LeftMargin = 50
    $Selection.Pagesetup.RightMargin = 50
    $Selection.Pagesetup.BottomMargin = 50


    #Интервал отступов сверху и снизу
    $Selection.ParagraphFormat.SpaceBefore = 0
    $Selection.ParagraphFormat.SpaceAfter = 0


    #Выравнивание по центру
    $Selection.ParagraphFormat.Alignment = 1

    #Добавляем таблицу
    $Table = $Word.ActiveDocument.Tables.Add($Word.Selection.Range, 1, 1)

    #Устанавливаем черный цвет заливки ячейки
    $Table.Cell(1,1).Shading.BackgroundPatternColor = 0

    #Вставляем картинку в ячейку таблицы
    $Table.Cell(1,1).Range.InlineShapes.AddPicture("D:\Temp\bezramok-tlt.png")


    #Конец таблицы, начать новую строку
    $Selection.EndKey(6, 0)

    #Новый параграф
    $Selection.TypeParagraph()

    #Шрифт написания
    $Selection.Font.Name = "Times New Roman"

    #Размер шрифта
    $Selection.Font.Size = 18

    #Текст заголовка
    $Selection.TypeText("Работаем с Microsoft Word при помощи PowerShell")

    #Переходим на новую строку
    $Selection.TypeParagraph()

    #Выравнивание по ширине листа
    $Selection.ParagraphFormat.Alignment = 3

    #Устанавливаем новые значения размера шрифта
    $Selection.Font.Name = "Arial"
    $Selection.Font.Size = 12

    #Пишем курсивом
    $Selection.Font.Italic = $true

    #Добавляем следующий текст
    $Selection.TypeText("Windows PowerShell — расширяемое средство автоматизации от Microsoft с открытым исходным кодом")

    #отключаем курсив
    $Selection.Font.Italic = $false

    #Новый параграф
    $Selection.TypeParagraph()

    #Новый параграф
    $Selection.TypeParagraph()

    #Вставляем заголовок по центру
    $Selection.ParagraphFormat.Alignment = 1

    #Устанавливаем новые значения размера шрифта
    $Selection.Font.Name = "Arial"
    $Selection.Font.Size = 18

    #Делаем цвет текста темно-зеленым
    $Selection.Font.Color = "wdColorDarkGreen"

    #Выделяем жирным
    $Selection.Font.Bold = $True

    #Следующий текст в нашем документе
    $Selection.TypeText("Добавляем картинку из файла ")

    #Вставляем картинку из файла
    $Selection.InlineShapes.AddPicture("D:\Temp\word.jpg")

    #Делаем цвет текста черным
    $Selection.Font.Color = 0

    #Отменяем жирный
    $Selection.Font.Bold = $False

    #Новый параграф двойной отступ
    $Selection.TypeParagraph()
    $Selection.TypeParagraph()

    #Настройки размера шрифта для нового текста
    $Selection.Font.Name = "Times New Roman"
    $Selection.Font.Size = 14

    $Selection.TypeText("Создание таблицы в Microsoft Word средствами PowerShell")

    #Новый параграф
    $Selection.TypeParagraph()

    #Новый параграф
    $Selection.TypeParagraph()

    #Настройки размера шрифта для нового текста
    $Selection.Font.Name="Times New Roman"
    $Selection.Font.Size=12

    #Добавляем таблицу
    $Table = $Word.ActiveDocument.Tables.Add($Word.Selection.Range, 1, 3)

    #Ручной вариант форматирования таблицы
    # $Table.Range.Style = "Table Grid"
    # $Table.Borders.InsideLineStyle = 1
    # $Table.Borders.OutsideLineStyle = 1

    #Заполняем шапку таблицы
    $Table.Cell(1,1).Range.Text = "№"
    $Table.Cell(1,2).Range.Text = "Name"
    $Table.Cell(1,3).Range.Text = "DysplayName"

    #Счетчики для генерации таблицы
    $i = 2
    $counter = 1

    #Получаем список всех процессов на компьютере
    $srv = Get-Service a*

    #Записываем полученые данные в ячейки таблицы
    foreach ($arr in $srv)
    {
    $Table.Rows.Add()
    $Table.Cell($i,1).Range.Text = $counter
    $Table.Cell($i,2).Range.Text = $arr.Name
    $Table.Cell($i,3).Range.Text = $arr.DisplayName


    #инкрементируем счетчики
    $i = $i + 1
    $counter = $counter + 1
    }

    #Автоформатирование таблицы
    $Table.AutoFormat(20)

    #Конец таблицы, начать новую строку
    $Selection.EndKey(6, 0)

    #Новый параграф
    $Selection.TypeParagraph()

    #Вставляем заголовок по центру
    $Selection.paragraphFormat.Alignment = 0

    #Размер шрифта
    $Selection.Font.Size=14

    #Текст
    $Selection.TypeText("Урок создал")

    #Новый параграф
    $Selection.TypeParagraph()

    #Размер шрифта
    $Selection.Font.Size=12

    #Гиперссылка сайта
    $Selection.Hyperlinks.Add($Selection.Range,"http:#bezramok-tlt.ru")

    #Новый параграф
    $Selection.TypeParagraph()

    #Гиперссылка почты
    $Selection.Hyperlinks.Add($Selection.Range,"mailto:bezramok-tlt@mail.ru")

    #Новый параграф
    $Selection.TypeParagraph()

    #Текст
    $Selection.TypeText("Админ")

    #Новый параграф
    $Selection.TypeParagraph()

    #Размер шрифта
    $Selection.Font.Size=10

    #Текст
    $Selection.TypeText("Дата: " + $date)

    #Новый параграф
    $Selection.TypeParagraph()

    #СохранитьКак указываем путь куда и имя файла
    $doc.SaveAs([ref]"D:\temp\PsWord.docx")

    #Закрываем документ
    $doc.Close()

    #Закрываем приложение
    $word.Quit()
  

Поддержи проект:

No-name
Макс
Здравствуйте, не подскажите, как найти в файле ворда текст и заменить его другим текстом?

09/12/2023 09:07:32

Админ
Админ

Вот можете посмотреть в документации https://learn.microsoft.com/ru-ru/office/vba/api/word.find.execute

07/02/2024 13:50:50

No-name
Vlad
Приветствую. Подскажите пожалуйста , как в одну ячейку добавить несколько значений из переменной? смысл такой две переменные, мне нужно чтобы они отобразились в одной ячейке столбиком.

26/09/2023 18:24:43

Админ
Админ

Используйте конкатенацию для вставки в одну ячейку $message = 'Hello, ' + $first + ' ' + $last + '.'

24/11/2023 11:25:25

No-name
Flash
Как осуществляется перевод каретки, допустим мне необходимо, что то дописать в конце документа?

07/10/2016 16:37:48

Администрация
Администрация

Не совсем понял, но может Вы имели ввиду:

//Новый параграф
$Selection.TypeParagraph()

07/10/2016 19:06:45


Copyright © 2014 - 2024 All rights reserved.