Доброго времени суток друзья. Я уже рассказывал, как можно работать с 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 .
#Получаем текущую дату
$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()
09/12/2023 09:07:32
Вот можете посмотреть в документации https://learn.microsoft.com/ru-ru/office/vba/api/word.find.execute
07/02/2024 13:50:50
26/09/2023 18:24:43