Доброго времени суток всем подписчикам и читателям блога scriptcoding.ru. Сегодня мы рассмотрим, как сделать список в Word документе программным путем, с помощью коллекции ListGalleries объектной модели Word.
Коллекция ListGalleries является отправной точкой, чтобы сделать маркированный или нумерованный список в Word с помощью макросов VBA, или сценариев сервера Windows Script Host. По сути, коллекция хранит объекты ListGallery, которые представляют индивидуальный список, но, ни ListGalleries и ListGallery не содержат средств для формирования списка Word с нужными параметрами. Так, с практической стороны вам понадобится только одно свойство и один метод из коллекции и два свойства и один метод.
Для доступа к коллекции ListGalleries используется одноименное свойство класса Word.Application. Так как данный материал немного запутан, то давайте для начала рассмотрим свойства и метода коллекции и класса, а уже потом я постараюсь показать и объяснить, что и для чего нужно…
ListGalleries – свойства и методы, маркированный и нумерованный список в Word
Count– Количество классов ListGallery в текущей коллекции
Item(index) – Позволяет получить доступ к ListGallery заданного типа.
index – Определяет тип списка в Word, содержит значение константы WdListGalleryType:
- wdBulletGallery — 1 — маркированный список Word.
- wdNumberGallery — 2 — нумерованный список Word.
- wdOutlineNumberGallery — 3 — многоуровневый список.
ListGallery – свойства и методы, нумерованный и маркированный список в Word
ListTemplates— Возвращает ListTemplates, которая представляет все типы списков в Word для указанного списка в коллекции. Только чтение.
Modified(index) – Вернет значение True, если производились изменения в заданном шаблоне списка. Только чтение.
Reset(index) – Позволяет очистить созданный ранее шаблон (index – номер шаблона).
Хорошо, теперь давайте рассмотрим, как сделать список Word, и весь процесс….
Все мы знаем, чтобы сделать список в документе Word, в первую очередь надо выбрать нужные абзацы, после этого мы выбираем типы списков Word. За тип отвечают три вкладки:
- Маркеры – содержит 7 типов маркеров и позволяет создать собственный список-маркер.
- Нумерация – также содержит 7 вариантов нумерованного списка в Word и дает возможность создать собственный шаблон.
- Многоуровневый список – также на выбор дается 7 готовых шаблонов и возможность сформировать собственный.
Аналогичные действия происходят, и тогда, когда надо программно сделать список в Word:
Сначала нам нужно получить доступ к коллекции ListGalleries через одноименное свойство класса Word Application.
Далее нужно получить доступ к ListGallery – мы можем или использовать свойство item (смотрите выше) или задать значение напрямую:
oWord.ListGalleries(1) oWord.ListGalleries.Item(1) |
Обратите внимание, что мы передаем не номер класса, а его тип (всего три варианта).
После того, как мы определились с нужным типом списка в Word и получили доступ к ListGallery, нам нужно обратиться к свойству ListTemplates, которое позволяет получить доступ к одноименной коллекция:
oWord.ListGalleries(1).ListTemplates.Item(1) oWord.ListGalleries(1).ListTemplates(1) |
Хорошо мы получили доступ к коллекции ListTemplates, давайте рассмотрим, для чего она нужна. Как упоминалось выше, для каждого из трех типов списков Word есть 7 заготовленных шаблонов. Фактически, каждый такой шаблон является классом ListTemplate, входящим в состав коллекции. Как и с объектом ListGallery, тут та же ситуация – мы передаем не номер, а тип.
ListTemplates – свойства и методы, как сделать список в Word
Count– Количество классов ListTemplate. Только чтение.
Add(OutlineNumbered, Name) — Возвращает ListTemplate, представляющий новый шаблон списка. Оба параметра являются дополнительными.
OutlineNumbered – True — список будет многоуровневым, False — список содержит только один уровень вложенности.
Name – имя шаблона.
Item(count) — Возвращает отдельный объект ListTemplate в коллекции.
ListTemplate – свойства и методы, типы списков в Word
ListLevels— Возвращает ListLevels, представляющую все списки для указанного ListTemplate.
Name— Возвращает или задает имя указанного класса. Чтение и запись.
OutlineNumbered— Значение true, если указанный ListTemplate является многоуровневым. Чтение и запись.
Convert(level) – Позволяет конвертировать список: многоуровневый в одноуровневый, или наоборот.
level – Дополнительный параметр, который задает уровень вложенности списка Word. Этот аргумент может быть число от 1 до 9. Если этот аргумент опущен, то значение 1 — значение по умолчанию.
Последний этап, который, показывает как сделать список в Word – этап выбора уровня вложенности. По сути, нам надо получить доступ к коллекции ListLevels и объектам ListLevel. Так как данная коллекция и объект содержат довольно много методов и свойств, то я описал их в отдельной статье – «Коллекция Word ListLevels и объект ListLevel«. Но, чтобы не предоставлять вам материал без примеров, мы сделаем два списка в Word, которые сможем многократно использовать. Я сначала приведу вам примеры кода, а уже потом объясню, что и как.
Пример на языке VBScript
' ---------------------------------------------------------------------------- ' как сделать список в Word ' нумерованный список в Word ' маркированный список в Word ' ListGallery.vbs ' ---------------------------------------------------------------------------- Option Explicit dim oWord, oDoc, oSel, i, oPars, MyText, oRange dim REnd ' конец текста dim List1, List2 ' два объекта ListTemplate Set oWord = CreateObject("Word.Application") Set oDoc = oWord.Documents oDoc.Add() Set oSel = oWord.Selection oWord.Visible = True MyText = "типы списков в Word. " For i=0 to 10 oSel.TypeText MyText & MyText & MyText & MyText & MyText & MyText & MyText oSel.TypeParagraph Next set oRange = oDoc(1).Range() 'Создаем Range set oPars = oRange.Paragraphs 'Создаем Paragraps ' Определяем конечную позицию для текста REnd = oPars(oPars.Count).Range.End set List1 = oDoc(1).ListTemplates.Add(false) ' Первый шаблон set List2 = oDoc(1).ListTemplates.Add(false) ' Второй шаблон '-------------------------------------------------------------- ' Заполняем шаблоны '-------------------------------------------------------------- With List1.ListLevels(1) .Alignment = 1 .NumberPosition = 10 .NumberStyle = 3 .TextPosition = 20 .TrailingCharacter = 0 With .Font .Bold =true .Size = 20 .Shadow = true .ColorIndex = 6 End With End With With List2.ListLevels(1) .Alignment = 1 .NumberPosition = 20 .NumberStyle = 4 .TextPosition = 20 .TrailingCharacter = 0 With .Font .Bold =true .Size = 20 .Shadow = true .ColorIndex = 11 End With End With '-------------------------------------------------------------- ' выбираем диапазон от 2-го до 4-го абзаца oRange.SetRange oPars(2).Range.Start, oPars(4).Range.End ' Применяем первый шаблон списка oRange.ListFormat.ApplyListTemplateWithLevel List1, false, 0, 2 ' выделяем заново весь диапазон oRange.SetRange 0, REnd ' выбираем диапазон от 2-го до 4-го абзаца oRange.SetRange oPars(7).Range.Start, oPars(9).Range.End ' Применяем второй шаблон списка oRange.ListFormat.ApplyListTemplateWithLevel List2, false, 0, 2 |
Пример на языке JScript
// ---------------------------------------------------------------------------- // как сделать список в Word // нумерованный список в Word // маркированный список в Word // ListGallery.vbs // ---------------------------------------------------------------------------- var oWord1, oDoc1, oSel1, i, oPars1, MyText1, oRange1; var REnd; // конец текста var List1, List2; // два объекта ListTemplate oWord1 = WScript.CreateObject("Word.Application"); oDoc1 = oWord1.Documents; oDoc1.Add(); oSel1 = oWord1.Selection; oWord1.Visible = true; MyText1 = "типы списков в Word. "; for (i=0; i<=10; i++){ oSel1.TypeText(MyText1 + MyText1 + MyText1 + MyText1 + MyText1 + MyText1 + MyText1); oSel1.TypeParagraph(); } oRange1 = oDoc1(1).Range(); //Создаем Range oPars1 = oRange1.Paragraphs; //Создаем Paragraps // Определяем конечную позицию для текста REnd = oPars1(oPars1.Count).Range.End; List1 = oDoc1(1).ListTemplates.Add(false); // Первый шаблон List2 = oDoc1(1).ListTemplates.Add(false); // Второй шаблон //-------------------------------------------------------------- // Заполняем шаблоны //-------------------------------------------------------------- with(List1.ListLevels(1)){ Alignment = 1; NumberPosition = 10; NumberStyle = 3; TextPosition = 20; TrailingCharacter = 0; with(Font){ Bold =true; Size = 20; Shadow = true; ColorIndex = 6; } } with(List2.ListLevels(1)){ Alignment = 1; NumberPosition = 20; NumberStyle = 4; TextPosition = 20; TrailingCharacter = 0; with(Font){ Bold =true; Size = 20; Shadow = true; ColorIndex = 11; } } //-------------------------------------------------------------- // выбираем диапазон от 2-го до 4-го абзаца oRange1.SetRange(oPars1(2).Range.Start, oPars1(4).Range.End); // Применяем первый шаблон списка oRange1.ListFormat.ApplyListTemplateWithLevel(List1, false, 0, 2); // выделяем заново весь диапазон oRange1.SetRange(0, REnd); // выбираем диапазон от 2-го до 4-го абзаца oRange1.SetRange(oPars1(7).Range.Start, oPars1(9).Range.End); // Применяем второй шаблон списка oRange1.ListFormat.ApplyListTemplateWithLevel(List2, false, 0, 2); |
Хорошо, теперь давайте разберем программный код. В обоих сценариях объявление практически одинаковые переменные, в примере на JS к именам я добавил единицу. oWord – хранит доступ к приложению Ворд: «Объект Word Application — свойства«, oDoc – позволит создать новый документ: «Коллекция Word Documents«, oSel – позволит выделять нужный текст: «Объект Word Selection — выделить весь текст в ворде, свойства«, oPars – отвечает за обработку абзацев: «Объект Word Paragraph и коллекция Paragraphs — основные параметры абзаца«, MyText – собственно, текст для вставки в документ, oRange – отвечает за выбор содержимого: «Объект Word Range — Выбор текста«.
Видим, что в обоих сценариях мы создали два объекта List1 и List2, которые содержат отформатированный список Word. Далее происходит процесс вызова метода ApplyListTemplateWithLevelобъекта ListFormat для заданного выбора, к нему и будет применяться сделанный в список Word. Видим, что основные параметры определяются через свойства объекта ListLevel.