Коллекция Word ListLevels и объект ListLevel — работа со списками в Word

Коллекция Word ListLevels и объект ListLevel — работа со списками в Word Объектная модель Microsoft Word

Всем привет, с вами автор блога scriptcoding.ru. Сегодня мы рассмотрим работу со списками в Word с помощью коллекции ListLevels и классов ListLevel.

В прошлой статье мы рассмотрели две коллекции (ListGalleries и ListTemplates) и два объекта (Listgallery и ListTemplate), которые предназначены для работы со списками в ворде и позволяют выбрать нужный тип и нужный шаблон. В этой статье мы рассмотрим коллекцию ListLevels и класс ListLevel, которые при работе со списками в Word позволяют задать уровень вложенности.

Сначала рассмотрим коллекцию ListLevels, доступ к ней осуществляется через одноименное свойство объекта ListTemplate. Сама коллекция ничего особенно не содержит, одно свойство позволяет получить количество объектов и один метод, который отвечает за получение доступа к классу ListLevel, который и позволяет отформатировать будущий список.

ListLevels – методы и свойства, списки в ворде

создание списка в ворде

Count– Позволяет получить количество уровней список в коллекции. Только чтение.

Item(index) — Возвращает отдельный класс ListLevel в коллекции.

Index – Обязательный параметр, который задает уровень вложенности (числа от 1 до 9).

Что бы освежить вашу память, пример программного кода из прошлой статьи:

Set oWord = CreateObject("Word.Application")
oWord.ListGalleries(1).ListTemplates(1).ListLevels(1)

Тут мы создали ссылку на объект Word.Application, а далее, по цепочке определили тип — ListGalleries(1) и шаблон — ListTemplates(1). Команда ListLevels(1) говорит, что мы хотим получить доступ к классу ListLevel, который будет предоставлять одноуровневый список в ворде (значение 1). Напомню, что всего можно указать 9 уровней вложенности. Плюс, надо понимать, что тут мы получаем не объект под заданным номером, а объект заданного типа.

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

ListLevel – свойства и методы, список в ворде

работа с word списками

Свойства:

Alignment– Выравнивание, свойство вернет или задает константу WdListLevelAlignment:

  • wdListLevelAlignCenter — 1 – По центру
  • wdListLevelAlignLeft — 0 – По левому краю
  • wdListLevelAlignRight — 2 – По правому краю

Font— Возвращает или задает объект Font. Чтение и запись.

Index— Представляет позицию элемента в коллекции. Только чтение.

LinkedStyle— Вернет или устанавливает имя стиля, который связан с указанным объектом ListLevel, строковое значение.

NumberPosition— Вернет или задает отступ в пунктах.

NumberStyle— Возвращает или устанавливает стиль нумерации, значение константы WdListNumberStyle.

PictureBullet– Вернет класс InlineShape , представляющий изображение.

ResetOnHigher— Устанавливает или возвращает уровень списка в ворде.

StartAt— Вернет или устанавливает стартовый номер для указанного объекта ListLevel.

TabPosition— Возвращает или устанавливает позицию вкладки для указанного объекта ListLevel. TabPosition всегда возвращает значение 999999 или значение wdUndefined (для макросов), если оно не содержит установленного значения.

TextPosition— Возвращает или задает положение (в пунктах) для второй линии.

TrailingCharacter— Возвращает или задает символ, который вставляется после числа для заданного уровня списка ворд. Значение константы WdTrailingCharacter:

  • wdTrailingNone — 2
  • wdTrailingSpace — 1
  • wdTrailingTab — 0

NumberFormat— Возвращает или устанавливает формат чисел для заданного уровня списка в ворде. Строковое значение. Можно использовать подстановочный символ (%), рядок с которым могут находиться числа от 1 до 9. Далее можно вставить любую строку.

Методы:

ApplyPictureBullet(FileName) – Позволяет задать в качестве маркера изображение.

FileName – Обязательный параметр, который задает путь к изображению.

Хорошо, теперь можно приступить к практической стороне – к программированию. В прошлой статье при работе со списками в Word мы создали объекты-экземпляры с заданными параметрами списка в ворде, но, можно поступить и по-другому. Нам не обязательно создавать новый шаблон, можно изменить имеющийся.

Ниже привожу два примера на языке VBScript и JScript, после приведу некоторые пояснения.

Пример программного кода на языке VBScript:

' ----------------------------------------------------------------------------
' Работа со списками Word
' ListLevel.vbs
' ----------------------------------------------------------------------------
Option Explicit
 
dim oWord, oDoc, oSel, i, oPars, MyText, oRange
 
Set oWord = CreateObject("Word.Application")
Set oDoc = oWord.Documents
oDoc.Add()
Set oSel = oWord.Selection
oWord.Visible = True
 
MyText = "Списки в ворде. "
 
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
 
'--------------------------------------------------------------
'     Изменяем шаблоны
'--------------------------------------------------------------
With oWord.ListGalleries(2).ListTemplates(3).ListLevels(1)
    .Alignment = 1
    .NumberPosition = 10
    '.NumberStyle = 3
    .TextPosition = 20
    .TrailingCharacter = 0
    .NumberFormat = "%1 список"
        With .Font
            .Bold =true
            .Size = 14
            .Shadow = true
            .ColorIndex = 6
        End With
End With
 
' Применяем заданный шаблон
oRange.ListFormat.ApplyListTemplateWithLevel oWord.ListGalleries(2).ListTemplates(3), false, 0, 2

Пример программного кода на языке JScript:

// ----------------------------------------------------------------------------
// Работа со списками Word
// ListLevel.js
// ----------------------------------------------------------------------------
var oWord1, oDoc1, oSel1, i, oPars1, MyText1, oRange1;
 
oWord1 = WScript.CreateObject("Word.Application");
oDoc1 = oWord1.Documents;
oDoc1.Add();
oSel1 = oWord1.Selection;
oWord1.Visible = true;
 
MyText1 = "Списки в ворде. "
 
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
 
//--------------------------------------------------------------
//     Изменяем шаблоны
//--------------------------------------------------------------
with(oWord1.ListGalleries(2).ListTemplates(3).ListLevels(1)){
    Alignment = 1;
    NumberPosition = 10;
    //NumberStyle = 3;
    TextPosition = 20;
    TrailingCharacter = 0;
    NumberFormat = "%1 список";
        with(Font){
            Bold =true;
            Size = 14;
            Shadow = true;
            ColorIndex = 6;
        }
}
 
// Применяем заданный шаблон
oRange1.ListFormat.ApplyListTemplateWithLevel(oWord1.ListGalleries(2).ListTemplates(3), false, 0, 2);

Как видим, тут нам не надо было создавать ссылку на новый класс, мы просто изменили существующий. Мало того, свойство NumberStyle (я его закомментировал) также позволяет задать шаблон, фактически, оно перекрывает строку:

oWord.ListGalleries(2).ListTemplates(3).ListLevels(1)

То есть, мы можем определить тип — маркированный или нумерованный, изменяя только значение свойства NumberStyle. Обратите внимание, что в обоих сценариях мы использовали оператор WITH, который позволяет сократить программный код. Также, можете ознакомиться со статьей «Делаем маркированные списки в ворд«.

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