Доброго времени суток всем подписчикам и читателям блога scriptcoding.ru. Продолжая тему «Как в ворде сделать список», в этой статье мы рассмотрим маркированный список в ворде, процесс его создания ручным и программным способом.
Фактически, частично, данную тему мы рассмотрели в статье «Как создать маркированный список в ворде«. Поэтому, тут мы больше сосредоточимся на программировании. Маркированный список в ворде в большинстве случае нужен тогда, когда надо просто перечислить некоторые свойства или параметры описываемого предмета. Например: значения константы, параметры игры и так далее. Все довольно просто, мы выбираем нужные абзацы и применяем к ним пункт «Маркеры» на панели Word. Там же есть семь готовых маркеров, при желании можно сформировать собственный маркер, который будет содержать заданный символ, размер или цвет. Как сделать список в ворде.
Как в ворде сделать список
Если реализовать аналогичную задачу программным путем чтобы показать как создать список в ворде, то тут надо обращаться к объектной модели Word и ее классам, методам и свойствам. Я приведу примеры кода на языках VBScript и JScript, которые используются сервером сценариев Windows Script Host. По сути, код на языке VBScript будет аналогичным и для языка VBA (макросы), с мелкими изменениями.
Вначале я приведу пример кода для обоих сценариев, а далее дам комментарии к ним.
Как создать список в ворде
Программный код на языке VBSCRIPT:
' ---------------------------------------------------------------------------- ' Маркированные списки в ворд ' spiski_v_word.vbs ' ---------------------------------------------------------------------------- Option Explicit dim oWord, oDoc, oSel, i, oPars, MyText, oRange dim MarkerList1, MarkerList2, MarkerList3, REnd Set oWord = CreateObject("Word.Application") Set oDoc = oWord.Documents oDoc.Add() Set oSel = oWord.Selection oWord.Visible = True For i=0 to 22 oSel.TypeText "Как создать список в ворд. " oSel.TypeParagraph Next set oRange = oDoc(1).Range() ' Класс Range set oPars = oRange.Paragraphs 'Коллекция Paragraps set MarkerList1 = oDoc(1).ListTemplates.Add(false) ' Первый шаблон set MarkerList2 = oDoc(1).ListTemplates.Add(false) ' Второй шаблон set MarkerList3 = oDoc(1).ListTemplates.Add(false) ' Второй шаблон ' Конечная позиция для текста REnd = oPars(oPars.Count).Range.End '-------------------------------------------------------------- ' Заполняем шаблоны '-------------------------------------------------------------- With MarkerList1.ListLevels(1) .NumberPosition = oWord.InchesToPoints(0) .TextPosition = oWord.InchesToPoints(0.25) .TrailingCharacter = 0 .NumberFormat = chr(74) .Font.ColorIndex = 6 .Font.Name = "Wingdings" .Font.Bold = true End With With MarkerList2.ListLevels(1) .NumberPosition = oWord.InchesToPoints(0) .TextPosition = oWord.InchesToPoints(0.25) .TrailingCharacter = 0 .NumberFormat = chr(75) .Font.ColorIndex = 11 .Font.Name = "Wingdings" .Font.Bold = true End With With MarkerList3.ListLevels(1) .NumberPosition = oWord.InchesToPoints(0) .TextPosition = oWord.InchesToPoints(0.25) .TrailingCharacter = 0 .NumberFormat = chr(76) .Font.ColorIndex = 12 .Font.Name = "Wingdings" .Font.Bold = true End With '-------------------------------------------------------------- call LList '-------------------------------------------------------------- ' Изменяем шаблон '-------------------------------------------------------------- With oWord.ListGalleries(1).ListTemplates(3).ListLevels(1) .NumberPosition = oWord.InchesToPoints(0.5) .TextPosition = oWord.InchesToPoints(0.5) .NumberStyle = 23 .TrailingCharacter = 0 .NumberFormat = chr(79) With .Font .Bold =true .Size = 15 .Shadow = true .ColorIndex = 5 End With End With '-------------------------------------------------------------- With oRange.ListFormat call LRange(10,11) .ApplyListTemplateWithLevel MarkerList1, false, 0, 2 call LRange(13,14) .ApplyListTemplateWithLevel MarkerList2, false, 0, 2 call LRange(16,17) .ApplyListTemplateWithLevel MarkerList3, false, 0, 2 call LRange(19,20) .ApplyListTemplateWithLevel oWord.ListGalleries(1).ListTemplates(3), false, 0, 2 End With ' как в ворд сделать список Sub LList() dim j j = 1 for i = 1 to 7 call LRange(j,j+1) oRange.ListFormat.ApplyListTemplateWithLevel oWord.ListGalleries(1).ListTemplates(i), false, 0, 2 j = j + 1 next End Sub Sub LRange(a, b) oRange.setRange 0, REnd oRange.setRange oPars(a).Range.Start, oPars(b).Range.End End Sub |
Программный код на языке VBSCRIPT:
// ---------------------------------------------------------------------------- // Маркированные списки в ворд // spiski_v_word.vbs // ---------------------------------------------------------------------------- var oWord1, oDoc1, oSel1, i, oPars1, MyText, oRange1; var MarkerList1, MarkerList2, MarkerList3, REnd oWord1 = WScript.CreateObject("Word.Application"); oDoc1 = oWord1.Documents; oDoc1.Add(); oSel1 = oWord1.Selection; oWord1.Visible = true; for(i=0; i<=22; i++){ oSel1.TypeText("Как создать список в ворд. "); oSel1.TypeParagraph(); } oRange1 = oDoc1(1).Range(); //Класс Range oPars1 = oRange1.Paragraphs; //Коллекция Paragraps MarkerList1 = oDoc1(1).ListTemplates.Add(false); // Первый шаблон MarkerList2 = oDoc1(1).ListTemplates.Add(false); // Второй шаблон MarkerList3 = oDoc1(1).ListTemplates.Add(false); // Второй шаблон // Конечная позиция для текста REnd = oPars1(oPars1.Count).Range.End; //WScript.Echo(String.fromCharCode(74)); //-------------------------------------------------------------- // Заполняем шаблоны //-------------------------------------------------------------- with(MarkerList1.ListLevels(1)){ NumberPosition = oWord1.InchesToPoints(0); TextPosition = oWord1.InchesToPoints(0.25); TrailingCharacter = 0; NumberFormat = String.fromCharCode(74); Font.ColorIndex = 6; Font.Name = "Wingdings"; Font.Bold = true; } with(MarkerList2.ListLevels(1)){ NumberPosition = oWord1.InchesToPoints(0); TextPosition = oWord1.InchesToPoints(0.25); TrailingCharacter = 0; NumberFormat = String.fromCharCode(75); Font.ColorIndex = 11; Font.Name = "Wingdings"; Font.Bold = true; } with(MarkerList3.ListLevels(1)){ NumberPosition = oWord1.InchesToPoints(0); TextPosition = oWord1.InchesToPoints(0.25); TrailingCharacter = 0; NumberFormat = String.fromCharCode(76); Font.ColorIndex = 12; Font.Name = "Wingdings"; Font.Bold = true; } //-------------------------------------------------------------- LList() //-------------------------------------------------------------- // Изменяем шаблон //-------------------------------------------------------------- with(oWord1.ListGalleries(1).ListTemplates(3).ListLevels(1)){ NumberPosition = oWord1.InchesToPoints(0.5); TextPosition = oWord1.InchesToPoints(0.5); NumberStyle = 23; TrailingCharacter = 0; NumberFormat = String.fromCharCode(79); with(Font){ Bold =true; Size = 15; Shadow = true; ColorIndex = 5; } } //-------------------------------------------------------------- with(oRange1.ListFormat){ LRange(10,11); ApplyListTemplateWithLevel(MarkerList1, false, 0, 2); LRange(13,14); ApplyListTemplateWithLevel(MarkerList2, false, 0, 2); LRange(16,17); ApplyListTemplateWithLevel(MarkerList3, false, 0, 2); LRange(19,20); ApplyListTemplateWithLevel(oWord1.ListGalleries(1).ListTemplates(3), false, 0, 2); } // как в ворд сделать список function LList(){ var j=1; for(i=1; i<=7; i++){ LRange(j,j+1); oRange1.ListFormat.ApplyListTemplateWithLevel(oWord1.ListGalleries(1).ListTemplates(i), false, 0, 2); j++; } } function LRange(a, b){ oRange1.setRange(0, REnd); oRange1.setRange(oPars1(a).Range.Start, oPars1(b).Range.End); } |
Разбираем коды – маркированный список в ворде
Программный код создает новый документ Word и добавляет в него строку текста 20 раз, метод TypeParagraph объекта Selection вставляет абзац. Далее происходит создание трех переменных (MarkerList1, MarkerList2 и MarkerList3), которые будут содержать класс ListTemplate, являющийся шаблоном списка. После происходит заполнение каждого шаблона с помощью свойств объекта ListLevels:
NumberPosition и TextPosition задают отступы в пунктах, что не очень эффективно, поэтому используется функция InchesToPoints, которая преобразует число дюймов в число пунктов (1 дюйм равен 2,54 см). Как в ворде сделать список.
NumberFormat позволяет задать символ, который будет отображаться в качестве маркера. Обратите внимание, что мы использовали разные функции (chr для VBScript и fromCharCode для JScript) для получения символа по его коду. Если вы будете писать макрос, то вам придется использовать функцию ChrW языка VBA.
.Font.Name позволяет задать имя шрифта для задаваемого символа. Имя шрифта можно легко узнать, если открыть меню Символ документа Word, для каждого выбранного символа отображается имя используемого шрифта.
Далее происходит вызов процедуры LList, которая позволяет применить маркированный список в ворде к документу. В самой процедуре происходит вызов метода ApplyListTemplateWithLevel объекта ListFormat и вызов процедуры LRange, которая отвечает за выбор заданных абзацев. Как сделать списки в ворд.
После происходит изменение шаблона маркированного списка в ворд:
With oWord.ListGalleries(1).ListTemplates(3).ListLevels(1) …….. EndWith |
Теперь, любой вызов данного шаблона приведет к формированию не стандартного маркированного списка в ворде, а измененного – мы изменили цвет, размер и стиль маркера.
Далее следует вызов процедуры LRange и применение созданного ранее шаблона списка.