Коллекция Word ListGalleries и объект ListGallery — как сделать список в word

Коллекция Word ListGalleries и объект ListGallery — как сделать список в word Объектная модель Microsoft Word

Доброго времени суток всем подписчикам и читателям блога scriptcoding.ru. Сегодня мы рассмотрим, как сделать список в Word документе программным путем, с помощью коллекции ListGalleries объектной модели Word.

Коллекция ListGalleries является отправной точкой, чтобы сделать маркированный или нумерованный список в Word с помощью макросов VBA, или сценариев сервера Windows Script Host. По сути, коллекция хранит объекты ListGallery, которые представляют индивидуальный список, но, ни ListGalleries и ListGallery не содержат средств для формирования списка Word с нужными параметрами. Так, с практической стороны вам понадобится только одно свойство и один метод из коллекции и два свойства и один метод.

Для доступа к коллекции ListGalleries используется одноименное свойство класса Word.Application. Так как данный материал немного запутан, то давайте для начала рассмотрим свойства и метода коллекции и класса, а уже потом я постараюсь показать и объяснить, что и для чего нужно…

ListGalleries – свойства и методы, маркированный и нумерованный список в Word

создание нумерованного и маркированного списка в word

Count– Количество классов ListGallery в текущей коллекции

Item(index) – Позволяет получить доступ к ListGallery заданного типа.

index – Определяет тип списка в Word, содержит значение константы WdListGalleryType:

  • wdBulletGallery — 1 — маркированный список Word.
  • wdNumberGallery — 2 — нумерованный список Word.
  • wdOutlineNumberGallery — 3 — многоуровневый список.

ListGallery – свойства и методы, нумерованный и маркированный список в Word

создание маркированного и нумерованного списка в 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

типы Word списков

Count– Количество классов ListTemplate. Только чтение.

Add(OutlineNumbered, Name) — Возвращает ListTemplate, представляющий новый шаблон списка. Оба параметра являются дополнительными.

OutlineNumbered – True — список будет многоуровневым, False — список содержит только один уровень вложенности.

Name – имя шаблона.

Item(count) — Возвращает отдельный объект ListTemplate в коллекции.

ListTemplate – свойства и методы, типы списков в Word

как сделать 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.

Оцените статью
Технологии программирования и ведение блога
Добавить комментарий