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

Создание многоуровневого списка в Word Примеры скриптов и макросов для Word и WSH

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

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

Многоуровневый список в Word

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

многоуровневый  Word список

Создать многоуровневый список в документе Word, который состоит из трех уровней. Первый уровень будет содержать цифры ("1."), второй – маленькие латинские буквы ("a."), а третий – квадратные маркеры.

  • Выделяем весь текст и на панели выбираем список «Нумерация«.
  • Теперь выделим абзацы с 3 по 6 и нажмем кнопку табуляции. Программа автоматически покажет, как в Word создать список из маленьких латинских букв.
  • Теперь снова нажимаем кнопку табуляции для абзацев c и d, автоматически произойдет формирование многоуровневого списка Word, содержащего римские буквы.
  • Выделяем оба абзаца с арабскими буквами и применяем список «Маркер«, (смотрите статью «Создание маркированного списка в Word«)
  • Все, мы показали, как в Word создать многоуровневый список нужного формата.
смоздаем многоуровневые списки в word

Нужно создать многоуровневый Word список, каждый уровень будет содержать нумерацию – арабские цифры и отделятся табуляцией.

  • Можно проделать действия, аналогичные предыдущим, и для каждого уровня выбрать список в виде арабских цифр на панели задач.
как создать в word список

Создание многоуровневого списка в Word, содержащего два уровня, но, без табуляции.

  • В этом случае мы применяем ко всем абзацам нумерованный список, далее, выделяем нужные абзацы и нажимаем правую кнопку мыши.
  • В контекстном меню надо выбрать пункт «задать начальное значение«. Задаем число 1 и все, у нас появился вложенный нумерованный список.

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

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

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

' ----------------------------------------------------------------------------' Создание простого многоуровневого списка Word' 1_spiski_v_word.vbs' ----------------------------------------------------------------------------OptionExplicit dim oWord, oDoc, oSel, oRange, oParsdim LT, REnd, x, i set oWord = WScript.CreateObject("Word.Application")' Класс Wordset oDoc = oWord.Documents' Коллекция DocumentsoDoc.Add() ' Создаем новый документset oSel = oWord.Selection ' Объект SelectionoWord.Visible = True' Делаем документ видимымset oRange = oDoc(1).Range()' Класс Range ' Вставляем текст 20 разFor i=0 to 20oSel.TypeText "Многоуровневый список в word"oSel.TypeParagraph ' Вставляем абзацNext set oPars = oRange.Paragraphs ' Коллекция Paragrapsset LT = oDoc(1).ListTemplates.Add(true)' Объект Template ' Определяем формат для каждого уровняFor x = 1 To 9With LT.ListLevels(x).NumberStyle = 0 ' стиль.NumberPosition = oWord.InchesToPoints(0.25 * (x - 1)).TextPosition = oWord.InchesToPoints(0.25 * x)EndWithNext ' Конечная позиция для текстаREnd = oPars(oPars.Count).Range.End  ' применяем созданный шаблонoRange.ListFormat.ApplyListTemplate LT ' Вызываем процедуру LRange с разными параметрамиcall LRange(3,15):call LRange(5,15):call LRange(7,10):call LRange(8,10):call LRange(12,15) ' Процедура выбора диапазона и вставки уровнякак в word создать списокSub LRange(a, b) With oRange .setRange 0, REnd .setRange oPars(a).Range.Start, oPars(b).Range.End .ListFormat.ListIndent EndWithEndSub

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

// ----------------------------------------------------------------------------// Создание простого многоуровневого списка Word// 1_spiski_v_word.js// ---------------------------------------------------------------------------- var oWord1, oDoc1, oSel1, oRange1, oPars1;var LT, REnd, x, i; oWord1 = WScript.CreateObject("Word.Application");// Объект WordoDoc1 = oWord1.Documents;// Коллекция DocumentsoDoc1.Add();// Создаем новый документoSel1 = oWord1.Selection;// Объект SelectionoWord1.Visible=true;// Делаем документ видимымoRange1 = oDoc1(1).Range();//Объект Range // Вставляем текст 22 разfor(i=0; i<=20; i++){oSel1.TypeText("Многоуровневый список в word");oSel1.TypeParagraph();// Вставляем абзац} oPars1 = oRange1.Paragraphs;//Коллекция ParagraphsLT = oDoc1(1).ListTemplates.Add(true);// Объект Template // Определяем формат для каждого уровня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;  // применяем созданный шаблонoRange1.ListFormat.ApplyListTemplate(LT); // Вызываем процедуру LRange с разными параметрами как в word создать списокLRange(3,15);LRange(5,15);LRange(7,10);LRange(8,10);LRange(12,15); // Процедура выбора диапазона и вставки уровняfunction LRange(a, b){ with(oRange1){ setRange(0, REnd); setRange(oPars1(a).Range.Start, oPars1(b).Range.End); ListFormat.ListIndent();}}

В данном примере мы сначала создаем новый документ и вставляем в него текст 20 раз, в конце каждой строки добавляется абзац (метод TypeParagraph объекта Selection). Далее происходит объявление переменной LT, которая будет содержать новый шаблон списка. Шаблон формируется с помощью метода Add объекта ListTemplate. Обратите внимание, что методу передается логический параметр true, который говорит, что мы хотим создать многоуровневый список в Word.

Далее происходит перебор все уровней списка (всего их может быть 9). Тут мы особого ничего не делаем, просто выбираем стиль (свойство NumberStyle объекта ListLevel) – тут значение 0, любое другое значение вызовет ошибку, так как многоуровневый список Word автоматически считается нумерованным, и никакой другой стиль не подходит (например, маркер).

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

Далее происходит вызов процедуры LRange, в качестве параметров мы передаем два числа – номера абзацев, которые нужно выбрать. В самой процедуре происходит выбор заданного диапазона, и вызов метода ListIndent объекта ListFormat, который добавляет уровень к имеющемуся многоуровневому списку в Word.

В итоге, мы получим многоуровневый список Word состоящий из нескольких уровней.

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

многоуровневый список программным путем в word

Хорошо, давайте рассмотрим следующие примеры.

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

' ----------------------------------------------------------------------------' Создание форматированого многоуровневого списка Word' 2_spiski_v_word.vbs' ----------------------------------------------------------------------------OptionExplicit dim oWord, oDoc, oSel, oRange, oParsdim LT, REnd, x, i, LText set oWord = WScript.CreateObject("Word.Application")' Класс Wordset oDoc = oWord.Documents' Коллекция DocumentsoDoc.Add()' Создаем новый документset oSel = oWord.Selection' Объект SelectionoWord.Visible = True' Делаем документ видимымset oRange = oDoc(1).Range()' Класс Range LText= "Многоуровневый список в word. " For i=0 to 20oSel.TypeText LText & LTextoSel.TypeParagraphNext set oPars = oRange.Paragraphs 'Коллекция Paragrapsset LT = oDoc(1).ListTemplates.Add(true) ' Объект Template For x = 1 To 9With LT.ListLevels(x).NumberStyle = 0.NumberPosition = oWord.InchesToPoints(0.25 * (x - 1)).TextPosition = oWord.InchesToPoints(0.25 * x)  selectcase xcase 1.NumberFormat = "%" & x & "."With .Font.Bold =true.Shadow = trueEndWithcase 2.NumberFormat = "%1" & "." & "%" & xWith .Font.Bold =true.ColorIndex = 2EndWithcase 3.NumberFormat = "%1.%2." & "%" & x .Font.ColorIndex = 11caseelse.NumberFormat = "* дополнительный пункт"endselectEndWithNext REnd = oPars(oPars.Count).Range.End' как в word создать списокoRange.ListFormat.ApplyListTemplate LTcall LRange(3,10):call LRange(12,17):call LRange(7,10):call LRange(14,17):call LRange(15,17) Sub LRange(a, b) With oRange .setRange 0, REnd .setRange oPars(a).Range.Start, oPars(b).Range.End .ListFormat.ListIndent EndWithEndSub

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

// ----------------------------------------------------------------------------// Создание простого многоуровневого списка Word// 2_spiski_v_word.js// ---------------------------------------------------------------------------- var oWord1, oDoc1, oSel1, oRange1, oPars1;var LT, REnd, x, i, LText; oWord1 = WScript.CreateObject("Word.Application");// Класс WordoDoc1 = oWord1.Documents;// Коллекция DocumentsoDoc1.Add();// Создаем новый документoSel1 = oWord1.Selection;// Объект SelectionoWord1.Visible=true;// Делаем документ видимымoRange1 = oDoc1(1).Range();//Класс Range LText="Многоуровневый список в word. "; for(i=0; i<=20; i++){oSel1.TypeText(LText + LText);oSel1.TypeParagraph();} oPars1 = oRange1.Paragraphs;//Коллекция ParagrapsLT = oDoc1(1).ListTemplates.Add(true);// Объект Template 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);  switch(x){case1:NumberFormat ="%"+ x +".";with(Font){Bold =true;Shadow =true;}break;case2:NumberFormat ="%1"+"."+"%"+ x;with(Font){Bold =true;ColorIndex =2;}break;case3:NumberFormat ="%1.%2."+"%"+ x; Font.ColorIndex=11;break;default:NumberFormat ="* дополнительный пункт";}}} REnd = oPars1(oPars1.Count).Range.End;// как в word создать списокoRange1.ListFormat.ApplyListTemplate(LT);LRange(3,10);LRange(12,17);LRange(7,10);LRange(14,17);LRange(15,17); function LRange(a, b){ with(oRange1){ setRange(0, REnd); setRange(oPars1(a).Range.Start, oPars1(b).Range.End); ListFormat.ListIndent();}}

В данном примере происходит добавление форматирования нумерации для списка. Используя подстановочный знак процента, мы сформировали многоуровневый список в Word такого формата:

  • 1.
  • ……
  • 1.1.
  • ……
  • 1.1.1.
  • ……
  • * дополнительный пункт

Также, используя свойства объекта Font, мы задали форматирование текста для заданного пункта (цвет, жирный).

Как в Word создать список

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

И напоследок еще пара примеров.

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

' ----------------------------------------------------------------------------' Создание форматированого комбинированого многоуровневого списка в Word' 3_spiski_v_word.vbs' ----------------------------------------------------------------------------OptionExplicit dim oWord, oDoc, oSel, oRange, oParsdim LT, REnd, x, i, LText set oWord = WScript.CreateObject("Word.Application")' Класс Wordset oDoc = oWord.Documents' Коллекция DocumentsoDoc.Add()' Создаем новый документset oSel = oWord.Selection' Объект SelectionoWord.Visible = True' Делаем документ видимымset oRange = oDoc(1).Range()' Класс Range LText= "Многоуровневый список в word. " For i=0 to 20oSel.TypeText LText & LTextoSel.TypeParagraphNext set oPars = oRange.Paragraphs 'Коллекция Paragrapsset LT = oDoc(1).ListTemplates.Add(true) ' Объект Template For x = 1 To 9With LT.ListLevels(x).NumberStyle = 0.NumberPosition = oWord.InchesToPoints(0.25 * (x - 1)).TextPosition = oWord.InchesToPoints(0.25 * x) selectcase xcase 1.NumberFormat = "%" & x & "."With .Font.Bold =true.Shadow = trueEndWithcase 2.NumberFormat = "%" & x & " пункт"With .Font.Bold =true.ColorIndex = 2EndWithcase 3.NumberFormat = "%-".Font.ColorIndex = 11caseelse.NumberFormat = "%*"endselectEndWithNext REnd = oPars(oPars.Count).Range.EndoRange.ListFormat.ApplyListTemplate LT call LRange(3,10):call LRange(8,10)oRange.ListFormat.ApplyListTemplateWithLevel oWord.ListGalleries(1).ListTemplates(7), false, 2, 1 call LRange(15,18)oRange.ListFormat.ApplyListTemplateWithLevel oWord.ListGalleries(1).ListTemplates(7), false, 2, 1 ' как в word создать список call LRange(17,18)oRange.ListFormat.ApplyListTemplateWithLevel oWord.ListGalleries(1).ListTemplates(6), false, 2, 1 Sub LRange(a, b) With oRange .SetRange 0, REnd .SetRange oPars(a).Range.Start, oPars(b).Range.End .ListFormat.ListIndent EndWithEndSub

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

// ----------------------------------------------------------------------------// Создание форматированого комбинированого многоуровневого спискав Word// 3_spiski_v_word.js// ----------------------------------------------------------------------------var oWord1, oDoc1, oSel1, oRange1, oPars1;var LT, REnd, x, i, LText; oWord1 = WScript.CreateObject("Word.Application");// Объект WordoDoc1 = oWord1.Documents;// Коллекция DocumentsoDoc1.Add();// Создаем новый документoSel1 = oWord1.Selection;// Объект SelectionoWord1.Visible=true;// Делаем документ видимымoRange1 = oDoc1(1).Range();//Объект Range LText="Многоуровневый список в word. "; for(i=0; i<=20; i++){oSel1.TypeText(LText + LText);oSel1.TypeParagraph();} oPars1 = oRange1.Paragraphs;//Коллекция ParagrapsLT = oDoc1(1).ListTemplates.Add(true);// Объект Template 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);  switch(x){case1:NumberFormat ="%"+ x +".";with(Font){Bold =true;Shadow =true;}break;case2:NumberFormat ="%"+ x +" пункт";with(Font){Bold =true;ColorIndex =2;}break;case3:NumberFormat ="%-";Font.ColorIndex=11;break;default:NumberFormat ="%*";}}} REnd = oPars1(oPars1.Count).Range.End;oRange1.ListFormat.ApplyListTemplate(LT); LRange(3,10);LRange(8,10);oRange1.ListFormat.ApplyListTemplateWithLevel(oWord1.ListGalleries(1).ListTemplates(7),false,2,1);// как в word создать список LRange(15,18);oRange1.ListFormat.ApplyListTemplateWithLevel(oWord1.ListGalleries(1).ListTemplates(7),false,2,1); LRange(17,18);oRange1.ListFormat.ApplyListTemplateWithLevel(oWord1.ListGalleries(1).ListTemplates(6),false,2,1); function LRange(a, b){ with(oRange1){ setRange(0, REnd); setRange(oPars1(a).Range.Start, oPars1(b).Range.End); ListFormat.ListIndent();}}

В этом последнем примере, мы сначала сформировали многоуровневый список в Word на основе созданного шаблона, а потом применили список «Маркер» к отдельным пунктам (метод ApplyListTemplateWithLevel). Обратите внимание, что параметры текста, определенные в нашем шаблоне автоматически были применены к маркированному списку.

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