Здравствуйте уважаемые читатели и подписчики блога scriptcoding.ru. В этой статье мы рассмотрим объект ListFormat, который отвечает за создание списков в Word.
По сути, данный объект позволяет применить шаблон заданного MS WORD списка к выбранному диапазону текста или ко всему тексту. Конечно, у класса ListFormat есть еще много других полезных свойств и методов, которые мы рассмотрим. Давайте для начала рассмотрим теоретическую часть этой публикации, а потом приступим к программированию. Мы напишем два примера программного кода на языке VBScript и JScript, которые работают под управлением сервера сценариев Windows Script Host. Параллельно можете почитать статьи по тема: «Многоуровневые списки в Word» и «Маркированные Microsoft Word списки«.
Класс ListFormat – списки в в 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 списки
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«.