Создание многоуровневого списка в 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
' ----------------------------------------------------------------------------
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
 
' Вставляем текст 20 раз
For i=0 to 20
    oSel.TypeText "Многоуровневый список в word"
    oSel.TypeParagraph                                                                           ' Вставляем абзац
Next
 
set oPars = oRange.Paragraphs                                                             ' Коллекция Paragraps
set LT = oDoc(1).ListTemplates.Add(true)                                          ' Объект Template
 
' Определяем формат для каждого уровня
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                               
 
' применяем созданный шаблон
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
     End With
End Sub

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

// ----------------------------------------------------------------------------
// Создание простого многоуровневого списка Word
// 1_spiski_v_word.js
// ----------------------------------------------------------------------------
 
var oWord1, oDoc1, oSel1, oRange1, oPars1;
var LT, REnd, x, i;
 
oWord1 = WScript.CreateObject("Word.Application");                                              // Объект Word
oDoc1 = oWord1.Documents;                                                  // Коллекция Documents
oDoc1.Add();                                                                            // Создаем новый документ
oSel1 = oWord1.Selection;                                                                   // Объект Selection
oWord1.Visible = true;                                                                          // Делаем документ видимым
oRange1 = oDoc1(1).Range();                                                  //Объект Range
 
// Вставляем текст 22 раз
for(i=0; i<=20; i++){
    oSel1.TypeText("Многоуровневый список в word");
    oSel1.TypeParagraph();                                                                     // Вставляем абзац
}
 
oPars1 = oRange1.Paragraphs;                                                  //Коллекция Paragraphs
LT = 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
' ----------------------------------------------------------------------------
Option Explicit
 
dim oWord, oDoc, oSel, oRange, oPars
dim LT, REnd, x, i, LText
 
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
 
LText= "Многоуровневый список в word. "
 
For i=0 to 20
    oSel.TypeText LText & LText
    oSel.TypeParagraph
Next
 
set oPars = oRange.Paragraphs                                             'Коллекция Paragraps
set LT = oDoc(1).ListTemplates.Add(true)                         ' Объект Template
 
For x = 1 To 9
    With LT.ListLevels(x)
        .NumberStyle = 0
        .NumberPosition = oWord.InchesToPoints(0.25 * (x - 1))
        .TextPosition = oWord.InchesToPoints(0.25 * x)
 
         select case x
            case 1
                .NumberFormat = "%" & x & "."
                With .Font
                    .Bold =true
                    .Shadow = true
                End With
            case 2
                .NumberFormat = "%1" & "." & "%" & x
                With .Font
                    .Bold =true
                    .ColorIndex = 2
                End With
            case 3
                .NumberFormat = "%1.%2." & "%" & x 
                .Font.ColorIndex = 11
            case else
                .NumberFormat = "* дополнительный пункт"
         end select
    End With
Next
 
REnd = oPars(oPars.Count).Range.End                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             ' как в word создать список
oRange.ListFormat.ApplyListTemplate LT
call 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
     End With
End Sub

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

// ----------------------------------------------------------------------------
// Создание простого многоуровневого списка Word
// 2_spiski_v_word.js
// ----------------------------------------------------------------------------
 
var oWord1, oDoc1, oSel1, oRange1, oPars1;
var LT, REnd, x, i, LText;
 
oWord1 = WScript.CreateObject("Word.Application");                                  // Класс Word
oDoc1 = oWord1.Documents;                                                // Коллекция Documents
oDoc1.Add();                                                                        // Создаем новый документ
oSel1 = oWord1.Selection;                                                    // Объект Selection
oWord1.Visible = true;                                                        // Делаем документ видимым
oRange1 = oDoc1(1).Range();                                                //Класс Range
 
LText= "Многоуровневый список в word. ";
 
for(i=0; i<=20; i++){
    oSel1.TypeText(LText + LText);
    oSel1.TypeParagraph();                                        
}
 
oPars1 = oRange1.Paragraphs;                                             //Коллекция Paragraps
LT = 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){
            case 1:
                NumberFormat = "%" + x + ".";
                with(Font){
                    Bold =true;
                    Shadow = true;
                }
                break;
            case 2:
                NumberFormat = "%1" + "." + "%" + x;
                with(Font){
                    Bold =true;
                    ColorIndex = 2;
                }
                break;
            case 3:
                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
' ----------------------------------------------------------------------------
Option Explicit
 
dim oWord, oDoc, oSel, oRange, oPars
dim LT, REnd, x, i, LText
 
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
 
LText= "Многоуровневый список в word. "
 
For i=0 to 20
    oSel.TypeText LText & LText
    oSel.TypeParagraph
Next
 
set oPars = oRange.Paragraphs                                             'Коллекция Paragraps
set LT = oDoc(1).ListTemplates.Add(true)                         ' Объект Template
 
For x = 1 To 9
    With LT.ListLevels(x)
        .NumberStyle = 0
        .NumberPosition = oWord.InchesToPoints(0.25 * (x - 1))
        .TextPosition = oWord.InchesToPoints(0.25 * x)
         select case x
            case 1
                .NumberFormat = "%" & x & "."
                With .Font
                    .Bold =true
                    .Shadow = true
                End With
            case 2
                .NumberFormat = "%" & x & " пункт"
                With .Font
                    .Bold =true
                    .ColorIndex = 2
                End With
            case 3
                .NumberFormat = "%-"
                .Font.ColorIndex = 11
            case else
                .NumberFormat = "%*"
         end select
    End With
Next
 
REnd = oPars(oPars.Count).Range.End
oRange.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
     End With
End Sub

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

// ----------------------------------------------------------------------------
// Создание форматированого комбинированого многоуровневого списка  в Word
// 3_spiski_v_word.js
// ----------------------------------------------------------------------------
var oWord1, oDoc1, oSel1, oRange1, oPars1;
var LT, REnd, x, i, LText;
 
oWord1 = WScript.CreateObject("Word.Application");                                              // Объект Word
oDoc1 = oWord1.Documents;                                                // Коллекция Documents
oDoc1.Add();                                                                        // Создаем новый документ
oSel1 = oWord1.Selection;                                                    // Объект Selection
oWord1.Visible = true;                                                        // Делаем документ видимым
oRange1 = oDoc1(1).Range();                                                //Объект Range
 
LText= "Многоуровневый список в word. ";
 
for(i=0; i<=20; i++){
    oSel1.TypeText(LText + LText);
    oSel1.TypeParagraph();                                        
}
 
oPars1 = oRange1.Paragraphs;                                             //Коллекция Paragraps
LT = 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){
            case 1:
                NumberFormat = "%" + x + ".";
                with(Font){
                    Bold =true;
                    Shadow = true;
                }
                break;
            case 2:
                NumberFormat = "%"+ x + " пункт";
                with(Font){
                    Bold =true;
                    ColorIndex = 2;
                }
                break;
            case 3:
                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). Обратите внимание, что параметры текста, определенные в нашем шаблоне автоматически были применены к маркированному списку.

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