Коллекция Word TabStops и объекты TabStop — табуляция в ворде

Коллекция Word TabStops и объекты TabStop — табуляция в ворде Объектная модель Microsoft Word

Всем привет, с вами автор блога scriptcoding.ru. Сегодня мы рассмотрим такую тему, как табуляция в Word. А именно, мы рассмотрим коллекцию TabStops и объекты TabStop, которые позволяют программным путем задавать параметры табуляции в документе ворд.

Прежде чем приступать к программной части статьи, давайте рассмотрим, как происходит настройка табуляции на примере приложения Word 2007.

Прежде всего, для лучшего понимания поставленной задачи, нам нужно включить отображение специальных символов. Для этого, на вкладке Главная нажимаем на кнопку Отобразить все знаки, или комбинация клавиш Ctrl + * или Ctrl + Shift + 8.

Хорошо, теперь давайте разберемся, для чего нужна табуляция в документе Word. Довольно часто применяется такое выражение как табулированный текст – это текст, в котором для разделения элементов используется код табуляции (ASCII код с номером 12). Символ табуляции вводится с помощью клавиши TAB. По умолчанию, при нажатии на клавишу TAB отступ составляет 1,25 см, а выравнивание текста происходит по левому краю. Что это нам дает? В большинстве случаев табуляция в ворде используется для создания колонок, ну… или таблиц.

включаем отображение всех символов в word

Для примера, введем несколько слов в одну строку, но вместо пробела, будем использовать табуляцию, мы увидим, что между словами появились видимые промежутки, а если включена кнопка «Отобразить все знаки», то мы еще увидим стрелочки.

Естественно, в порой хочется чего то большего, чем просто отступы, для настройки табуляции есть два пути:

  • Первый – дважды щелкнуть мышью по линейке
  • Второй – на вкладке Главная открыть диалоговое окно Абзац и внизу нажать на кнопку Табуляция

В итоге, у нас появится диалоговое окно Ворд – Табуляция, давайте рассмотрим его детально:

По умолчанию – тут мы можем задать отступ, который будет автоматически формироваться при нажатии на кнопку TAB.

Позиции табуляции – вверху находится строка для ввода координат табулятора в см, а внизу список из введенных значений, для добавления заданной табуляции, удаления или очисти служат кнопки внизу. Обратите внимание, что если список с табуляцией пуст (хотя мы и нажимали кнопку TAB), то это говорит о том, что табуляция задана по умолчанию. Для разминки можно попробовать добавить собственный список с табуляцией ворд, например, с такими координатами:

  • 15 см
  • 10 см
  • 7 см
  • 5 мс
  • 2,5 см

Обратите внимание, что табуляция применяется к той строке, в которой находится курсор. Также не забываем, что мы вводим не расстояние, а координаты. Неважно, в какой последовательности мы вводит значения, список сортируется автоматически. В нашем случае, у нас будет отображаться 5 табуляторов, первый будет находиться на отметке 2,5 см, а последний – на отметке 15 см.

Выравнивание– тут мы можем установить параметры выравнивания текста в таблице, более детально данный пункт рассмотрен далее по тексту статьи, при описании компонента TabStops.

Заполнитель – выбираем заполнитель свободного пространства, например, точки или тире.

Обратите внимание, что параметры заполнителя и выравнивание мы можем выбрать для каждого отдельного табулятора.

параметры табуляции в Word

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

Коллекция TabStops — табуляция в ворде

Коллекция TabStops содержит набор объектов TabStop, которые представляют доступ к элементам табуляции. Доступ к коллекции осуществляется через одноименное свойство, например, класса Paragraph.

Свойства

Application— Возвращает объект Application, представляющий приложение Microsoft Word.

Count— Возвращает количество табуляции в коллекции, по сути, количество объектов TabStop.

Методы

Add(Position, Alignment, Leader) — Возвращает объект TabStop, который представляет табуляцию в документе.

Position — Координаты табуляции (в пунктах) по отношению к левому краю.

Alignment — Выравнивание табуляции, значения константы WdTabAlignment:

  • wdAlignTabLeft – по левому краю, 0. Самый распространенный тип выравнивания, так как применяется в основном к тексту.
  • wdAlignTabCenter – по центру,1. Применяется как правило к смешанному типу данных.
  • wdAlignTabRight – по правому краю,2. В большинстве случаев данный тип выравнивания табуляции ворд применяется для целых чисел.
  • wdAlignTabDecimal – по разделителю,3. Используется для действительных чисел или жен денежных единиц.
  • wdAlignTabBar – с чертой, 4. Если выбран данный тип выравнивания, то на месте табулятора будет появляется вертикальная черта.
  • wdAlignTabList – по списку, 5.

Leader — Тип заполнителя для табуляции. Может быть одной из констант WdTabLeader. Если этот аргумент опущен, то используется значение wdTabLeaderSpaces.

  • wdTabLeaderSpaces — нет, 0
  • wdTabLeaderDots — точка, 1
  • wdTabLeaderDashes — тире, 2
  • wdTabLeaderLines двойная линия, 3
  • wdTabLeaderHeavy — жирная линия, 4
  • wdTabLeaderMiddleDot – средняя линия, 5

After(Position) — Возвращает следующий объект TabStop справа от табуляции.

Position – Расположение табулятора на линейке, в пунктах.

Before(Position) — Возвращает следующий объект TabStop слева от табуляции.

ClearAll – Очистить текст от табуляции.

Item(index) — Возвращает отдельный объект TabStop в коллекции по его номеру.

Объект TabStop — табуляция в Word

Объект TabStop является членом коллекции TabStops, и представляет табуляцию, как отдельный элемент.

Свойства

Alignment— Возвращает или задает константу WdTabAlignment, которая представляет выравнивание для указанной табуляции.

Application— Возвращает объект Application, представляющий приложение Microsoft Word.

CustomTab– Возвращает логическое true, если указанная табуляция является обычной. Только чтение.

Leader— Возвращает или устанавливает тип заполнения для указанного объекта TabStop. Чтение и запись. Значение константы WdTabLeader.

Nextи Previous– Свойства возвращают следующий или предыдущий объект TabStop в коллекции TabStops.

Position— Возвращает или устанавливает позицию табуляции относительно левого края.

Методы

Clear() – Удаляет заданную табуляцию.

Как видим, коллекция TabStops и объекты TabStop не содержат много свойств и методов, и довольно просты в использовании. Ниже я приведу, как всегда, программный код для сценариев Windows Script Host на двух языках.

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

' ----------------------------------------------------------------------------
' Коллекция TabStops и класс TabStop
' Табуляция в ворде
' tabstop.vbs
' ----------------------------------------------------------------------------
Option Explicit
 
dim oWord, oDoc, oSel, i, oPars, MyText
dim oRange, oWords
 
Set oWord = CreateObject("Word.Application")
Set oDoc = oWord.Documents
oDoc.Add()
Set oSel = oWord.Selection
set oRange = oDoc(1).Range()
oWord.Visible = True
 
MyText = "табуляция в word "
 
' вставляем текст в документ
For i=0 to 5
    oSel.TypeText MyText & i
    oSel.TypeParagraph
Next
 
set oPars = oRange.Paragraphs                                             ' Коллекция Paragraps
 
' устанавливает значение табуляции ворд в 2 см
oWord.ActiveDocument.DefaultTabStop = oWord.CentimetersToPoints(2)
 
' вставляем стандартную табуляцию в документ Word
InsertTab 1
InsertTab 2
'устанавливаем параметры табуляции, выравниваем текст по левому краю
With oPars(2).TabStops
     .Add oWord.CentimetersToPoints(2),0
     .Add oWord.CentimetersToPoints(4.5),0
     .Add oWord.CentimetersToPoints(6),0
     .Add oWord.CentimetersToPoints(9),0
End With
 
InsertTab 3
'устанавливаем параметры табуляции, задаем разные параметры выравнивания
With oPars(3).TabStops
     .Add oWord.CentimetersToPoints(2),1
     .Add oWord.CentimetersToPoints(4.5),2
     .Add oWord.CentimetersToPoints(6),3
     .Add oWord.CentimetersToPoints(9),4
End With
 
InsertTab 4
'устанавливаем параметры табуляции, задаем разные заполнители
With oPars(4).TabStops
     .Add oWord.CentimetersToPoints(2),2, 1
     .Add oWord.CentimetersToPoints(4.5),2, 2
     .Add oWord.CentimetersToPoints(6),2, 3
     .Add oWord.CentimetersToPoints(9),2, 4
End With
 
' процедура отвечает за вставку табулятора
' после каждого слова для заданного абзаца
Sub InsertTab(NumPar)
     ' ссылка на коллекцию Words
     set oWords = oPars(NumPar).Range.Words
     dim maxCount                       ' максимальное количество слов
     maxCount = 10
     i=1                                                                 ' счетчик
     while i<=maxCount-1
                 oWords(i).InsertAfter vbTab
                 i=i+2
                 maxCount = oWords.Count-1
     wend
     set oWords = nothing
End Sub

Начнём с конца программного кода…. Видим, что у нас есть пользовательская процедура InsertTab, ей передается только один параметр – номер абзаца. В теле процедуры происходит обработка каждого слова, после которого идет вставка символа табуляции Word. Дело в том, что формирование параметров табуляции (координаты, выравнивание и заполнитель) ничего не даст, мы сможем увидеть появившиеся маркеры на линейке, но никаких отступов не будет. Уже нажимая на кнопку TAB (неважно, программно, или вручную) произойдет автоматическое формирование отступов между текстовыми элементами. В теле процедуры происходит создание ссылки на коллекцию Words, которая отвечает за обработку слов в заданном диапазоне, в нашем случае, это будет абзац, но есть одно но….

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

В начале скрипта происходит подключение нужных классов и вставка текста, который разбивается на абзацы. Обратите внимание, что сначала мы вызываем пользовательскую процедуру, а уже потом задаем параметры табуляции в ворде.

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

// ----------------------------------------------------------------------------
// Коллекция TabStops и класс TabStop
// Табуляция в ворде
// tabstop.js
// ----------------------------------------------------------------------------
var oWord1, oDoc1, oSel1, i, oPars1, MyText1
var oRange1, oWords1
 
oWord1 = WScript.CreateObject("Word.Application");
oDoc1 = oWord1.Documents;
oDoc1.Add();
oSel1 = oWord1.Selection;
oRange1 = oDoc1(1).Range();
oWord1.Visible = true;
 
MyText1 = "табуляция в word ";
 
// вставляем текст в документ
for(i=0; i<=5; i++){
    oSel1.TypeText(MyText1 + i);
    oSel1.TypeParagraph();
}
 
oPars1 = oRange1.Paragraphs;                                             // Коллекция Paragraps
 
// устанавливает значение табуляции ворд в 2 см
oWord1.ActiveDocument.DefaultTabStop = oWord1.CentimetersToPoints(2);
 
// вставляем стандартную табуляцию в документ Word
InsertTab(1);
InsertTab(2);
//устанавливаем параметры табуляции, выравниваем текст по левому краю
with(oPars1(2).TabStops){
     Add(oWord1.CentimetersToPoints(2),0);
     Add(oWord1.CentimetersToPoints(4.5),0);
     Add(oWord1.CentimetersToPoints(6),0);
     Add(oWord1.CentimetersToPoints(9),0);
}
 
InsertTab(3);
//устанавливаем параметры табуляции, задаем разные параметры выравнивания
with(oPars1(3).TabStops){
     Add(oWord1.CentimetersToPoints(2),1);
     Add(oWord1.CentimetersToPoints(4.5),2);
     Add(oWord1.CentimetersToPoints(6),3);
     Add(oWord1.CentimetersToPoints(9),4);
}
 
InsertTab(4);
//устанавливаем параметры табуляции, задаем разные заполнители
with(oPars1(4).TabStops){
     Add(oWord1.CentimetersToPoints(2),2, 1);
     Add(oWord1.CentimetersToPoints(4.5),2, 2);
     Add(oWord1.CentimetersToPoints(6),2, 3);
     Add(oWord1.CentimetersToPoints(9),2, 4);
}
 
// процедура отвечает за вставку табулятора
// после каждого слова для заданного абзаца
function InsertTab(NumPar){
     // ссылка на коллекцию Words
     oWords1 = oPars1(NumPar).Range.Words;
     var maxCount = 2;                 // максимальное количество слов
     var i=1;                                                                      // счетчик
     while(i<=(maxCount-1)){
                 oWords1(i).InsertAfter("\t");
                 i=i+2;
                 maxCount = oWords1.Count-1;
     }
}

Логика работы данного скрипта аналогична предыдущему, я только изменил имена переменных, в силу технических причин.

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

  1. Юлия

    Спасибо, статья интересная =)

    Ответить