Объект Word ListFormat — создание списков в word

Объект Word ListFormat — создание списков в word Объектная модель Microsoft Word

Здравствуйте уважаемые читатели и подписчики блога scriptcoding.ru. В этой статье мы рассмотрим объект ListFormat, который отвечает за создание списков в Word.

По сути, данный объект позволяет применить шаблон заданного MS WORD списка к выбранному диапазону текста или ко всему тексту. Конечно, у класса ListFormat есть еще много других полезных свойств и методов, которые мы рассмотрим. Давайте для начала рассмотрим теоретическую часть этой публикации, а потом приступим к программированию. Мы напишем два примера программного кода на языке VBScript и JScript, которые работают под управлением сервера сценариев Windows Script Host. Параллельно можете почитать статьи по тема: «Многоуровневые списки в Word» и «Маркированные Microsoft Word списки«.

Класс ListFormat – списки в в Word

Свойства – MS Word списки

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

ListLevelNumber— Возвращает или устанавливает уровень форматирования списка для первого абзаца в указанном ListFormat.

ListString— Возвращает строку, которая представляет внешний вид значения списка первого абзаца в диапазоне для заданого ListFormat.

ListType— Возвращает тип списков, которые содержатся в диапазоне для указанного ListFormat . Значение константы WdListType:

  • wdListNoNumbering — 0 — Список без маркеров, нумерации или уровней.
  • wdListListNumOnly — 1 — LISTNUM поля, которые могут быть использованы в теле абзаца.
  • wdListBullet — 2 — Маркированный список.
  • wdListSimpleNumbering — 3 — Простой числовой Microsoft Word список.
  • wdListOutlineNumbering — 4 – Многоуровневый MS Word список.
  • wdListMixedNumbering — 5 — Смешанный числовой список в Word.
  • wdListPictureBullet — 6 — Маркированный список из картинок.

ListValue— Возвращает числовое значение первого абзаца в диапазоне для указанного ListFormat.

SingleList– Вернет логическое TRUE, если указанный диапазон содержит только один форматированный список.

Методы – Microsoft Word списки

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

ApplyListTemplate(ListTemplate, ContinuePreviousList, ApplyTo, DefaultListBehavior) – Позволяет применить заданный шаблон со списком в Word. Обязательным является только параметр ListTemplate.

ListTemplate – Содержит шаблон.

ContinuePreviousList – True – нумерация продолжается с предыдущего списка Ms Word, false – сформировать список с новой нумерацией.

ApplyTo – Определяет, к чему должен быть применен шаблон. Значение константы WdListApplyTo:

  • wdListApplyToWholeList — 0 — Весь список.
  • wdListApplyToThisPointForward — 1 – С позиции курсора до конца текста.
  • wdListApplyToSelection — 2 — Выбор.

DefaultListBehavior – Содержит значение константы WdDefaultListBehavior:

  • wdWord8ListBehavior — 0 — Использовать форматирование списков совместимое с Microsoft Word 97.
  • wdWord9ListBehavior — 1 — Использовать веб-ориентированное форматирование списков, введенное в Microsoft Word 2000.
  • wdWord10ListBehavior — 2 — Использовать форматирование совместимое с Microsoft Word 2002.

ApplyListTemplateWithLevel(ListTemplate, ContinuePreviousList, ApplyTo, DefaultListBehavior, ApplyLevel) – Позволяет применить заданный шаблон к заданному уровню.

ApplyLevel – Уровень, к которому применяется шаблон.

ApplyBulletDefault(DefaultListBehavior) – Метод добавляем маркированный список Microsoft Word к заданному выбору.

ApplyNumberDefault(DefaultListBehavior) – Методы добавляют нумерованный список (определенный программой по умолчанию) к указанному диапазону.

ApplyOutlineNumberDefault(DefaultListBehavior) – Аналогично предыдущему методу.

CanContinuePreviousList(ListTemplate) – Указывает, можно ли продолжить форматирование из предыдущего списка в Word. Метод возвращает константу WdContinue:

  • wdContinueDisabled — 0 — Форматирование нельзя продолжить.
  • wdResetList — 1 – Нумерацию можно перезапустить.
  • wdContinueList — 2 — Форматирование можно продолжить.

CountNumberedItems() — Возвращает количество маркированных или нумерованных пунктов и для заданного объекта ListFormat .

ListIndent() – Увеличивает уровень.

ListOutdent() – Уменьшает уровень.

RemoveNumbers() — Удаляет нумерацию или маркеры из указанного списка.

По сути, сам класс ListfFormat, как и остальные с аналогичным префиксом, является довольно раздутым, так как большая часть методов и свойств практически не используются, или не представляют практического интереса. Поэтому, я просто приведу два примера программного кода на языке VBScript и JScript, в которых происходит создание документа Word, добавление текста и создание списков в Word с указанным шаблоном, а далее происходит различное форматирование.

Программный код на языке vbscript:

' ----------------------------------------------------------------------------
' Списки в Word
' List_Format.vbs
' ----------------------------------------------------------------------------
Option Explicit
 
dim oWord, oDoc, oSel, oRange, oPars
dim LT, REnd, x, i
 
set oWord = WScript.CreateObject("Word.Application")                    ' класс Word
set oDoc = oWord.Documents                                                  ' Коллекция Documents
oDoc.Add()                                                                               ' Создаем новый документ
set oSel = oWord.Selection                                                    ' Объект Selection
oWord.Visible = True                                                                ' Делаем документ видимым
set oRange = oDoc(1).Range()                                                  ' класс Range
 
For i=0 to 40
    oSel.TypeText "MS Word списки. "
    oSel.TypeParagraph                                                         ' Вставляем абзац
Next
 
set oPars = oRange.Paragraphs                                                             'Коллекция Paragraphs
set LT = oDoc(1).ListTemplates.Add(true)                                          ' Объект Template
 
' Определяем формат для каждого уровня - Microsoft Word списки
For x = 1 To 9
    With LT.ListLevels(x)
        .NumberStyle = 0                                                                                                                                                             ' стиль
        .NumberPosition = oWord.InchesToPoints(0.25 * (x - 1))
        .TextPosition = oWord.InchesToPoints(0.25 * x)
    End With
Next
 
' Конечная позиция для текста
REnd = oPars(oPars.Count).Range.End       
 
'-------------------------------------------------------------------------------------
' Формирование для разных абзацев       
'-------------------------------------------------------------------------------------              
With         oRange.ListFormat                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  'создание списков в Word     
     call LRange(1,20)
     .ApplyListTemplate LT,false, 2, 2
     call LRange(2,12)
     .ListIndent
     call LRange(4,10)
     .ListIndent
     call LRange(6,8)
     .ListIndent
     call LRange(14,17)
     .ApplyListTemplate LT,false, 2, 2
     call LRange(22,25)
     .ApplyBulletDefault 2
     call LRange(27,29)
     .ApplyNumberDefault 2
     call LRange(3,4)
     .ListLevelNumber = 9
'-------------------------------------------------------------------------------------
 
     MsgBox .ListString
     MsgBox .ListType
End With
 
' Процедура выбора диапазона и вставки уровня
Sub LRange(a, b)
    oRange.setRange 0, REnd
    oRange.setRange oPars(a).Range.Start, oPars(b).Range.End
End Sub

Программный код на языке vbscript:

// ----------------------------------------------------------------------------
// Списки в Word
// List_Format.js
// ----------------------------------------------------------------------------
var oWord1, oDoc1, oSel1, oRange1, oPars1;
var LT, REnd, x, i;
 
oWord1 = WScript.CreateObject("Word.Application");
oDoc1 = oWord1.Documents;
oDoc1.Add();
oSel1 = oWord1.Selection;
oWord1.Visible = true;
oRange1 = oDoc1(1).Range();   
 
for(i=0; i<=40; i++){
    oSel1.TypeText("MS Word списки. ");
    oSel1.TypeParagraph();
}
 
oPars1 = oRange1.Paragraphs;                        
LT = oDoc1(1).ListTemplates.Add(true);        
 
// Определяем формат для каждого уровня - Microsoft Word списки
for(x=1; x<=9; x++){
    with (LT.ListLevels(x)){
        NumberStyle = 0;    
        NumberPosition = oWord1.InchesToPoints(0.25 * (x - 1));
        TextPosition = oWord1.InchesToPoints(0.25 * x);
    }
}
 
// Конечная позиция для текста
REnd = oPars1(oPars1.Count).Range.End;       
 
//-------------------------------------------------------------------------------------
// Формирование для разных абзацев       
//-------------------------------------------------------------------------------------    
with (oRange1.ListFormat){      
     LRange1(1,20);
     ApplyListTemplate(LT,false, 2, 2);
     LRange1(2,12);
     ListIndent();
     LRange1(4,10);
     ListIndent();
     LRange1(6,8);
     ListIndent();
     LRange1(14,17);
     ApplyListTemplate(LT,false, 2, 2);
     LRange1(22,25);
     ApplyBulletDefault(2);
     LRange1(27,29);
     ApplyNumberDefault(2);
     LRange1(3,4);
     ListLevelNumber = 9;           
//-------------------------------------------------------------------------------------                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           создание списков в Word
 
WScript.Echo(ListString);
WScript.Echo(ListType);
 
}
// Процедура выбора диапазона
function LRange1(a, b){
    oRange1.setRange(0, REnd);
    oRange1.setRange(oPars1(a).Range.Start, oPars1(b).Range.End);
}

На первый взгляд, программный код сценариев может показаться запутанным, но все не так страшно. Имена переменных практически одинаковые, использование оператора WITH позволяет экономить программный код, так как не надо писать лишний раз имя классов. Создание списков в Word. Процедура LRange служит для выделения нужных диапазонов текста, ее передаются два параметра, которые определяют начальный и конечный параграф для выбора – смотрите статьи – «Word Paragraphs — работа с абзацами» и «Word Range — Выбор текста«. Также обратите внимание на синтаксис цикла FOR в языке vbscript — «Урок 6 по VBScript: Циклы for…next и for each…next» и jscript — «Урок 9 по JScript — оператор цикла for«.

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