Объект Word Selection — выделение фрагмента текста, методы #1

Объект Word Selection — выделение фрагмента текста, методы #1 Объектная модель Microsoft Word

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

Для начала давайте вспомним, что выделение фрагмента текста осуществляется следующим образом: в большинстве случаев нужно выбрать несколько фрагментов, для этого сначала выбираем один нужный фрагмент, далее удерживаем клавишу "Ctrl« и выбираем остальные фрагменты. Теперь перейдем к теме публикации…

Объект Word Selection содержит довольно много методов, большая часть из которых практически не используется, да и превращать блог в энциклопедию просто нет смысла. Поэтому, я решил разбить описание методов на две статьи, выбрав только те, которые чаще всего используются. В этой первой части я рассмотрю примеры работы с двумя категориями – методы с префиксомInsert и Move. Со второй частью можете ознакомиться в статье «Объект Word Selection — выделение текста, методы #2«.

Методы Insert… – выделение фрагментов текста в Word

как выделить фрагмент в тексте

Примеры будут как для редактора VBA, так и для сценариев Windows Script Host, и так, начнем…

Методы с префиксом Insert… позволяют вставить текст в документ:

InsertAfter(text) и InsertBefore(text) – Вставка текста (text) в конец или в начало выделения. При отсутствии выделения вставка производится там, где находится курсор. Сам материал остается выделенным.

InsertBreak(type) — Вставляет страницу, колонку или секцию. Параметр type содержит значение константы WdBreakType:

  • wdTextWrappingBreak — 11 — Конец текущей строки и продолжение вставки ниже изображения, таблицы или другого объекта. Материал продолжается на следующей пустой строке, которая не содержит таблицу, совмещенную с левой или правой границей.
  • wdLineBreakClearRight — 10 — Перевод на новую строку.
  • wdLineBreakClearLeft — 9 — Перевод на новую строку.
  • wdColumnBreak — 8 — Разрыв колонки.
  • wdPageBreak — 7 — Вставка новой страницы.
  • wdLineBreak — 6 — Перевод на новую строку.
  • wdSectionBreakOddPage — 5 — Начало нового раздела со следующей нечетной страницы.
  • wdSectionBreakEvenPage — 4 — Начало нового раздела со следующей четной страницы.
  • wdSectionBreakContinuous — 3 — Новый раздел без разрыва страницы.
  • wdSectionBreakNextPage — 2 — Начало нового раздела со следующей страницы.

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

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

' ----------------------------------------------------------------------------' Объект Word Selection - методы' Пример на языке VBScript - выделение фрагментов Word текста' Selection-1.vbs' ----------------------------------------------------------------------------OptionExplicit' Глобальные переменныеdim oWord, oDoc, oSel, i ' Процедура создания нового документаSub Create_Doc()Set oWord = CreateObject("Word.Application")Set oDoc = oWord.DocumentsoDoc.Add()Set oSel = oWord.SelectionoWord.Visible = TrueEndSub Sub Insert_After_Before() With oSel .Text = "как выделить фрагмент текста " .InsertAfter "............Конец" .InsertBefore "Начало......" .EndOf .InsertBreak 6 EndWithEndSub call Create_Doccall Insert_After_Before

Давайте посмотрим, что данный пример делает. При вызове процедуры Insert_After_Before происходит добавление в документ текстовой строки, далее в конец добавляется фраза » …………Конец», а в начало — «Начало…… «. Потом происходит перевод курсора в конец и добавление перевода строки.

Пример на JScript:

// ----------------------------------------------------------------------------// Объект Word Selection - методы// Пример на языке JScript - выделение фрагмента в тексте// Selection-1.js// ---------------------------------------------------------------------------- // глобальные переменныеvar oWord, oDoc, oSel,function Create_Doc(){oWord = WScript.CreateObject("Word.Application");oDoc = oWord.Documents;oDoc.Add();oSel = oWord.Selection;oWord.Visible=true;} function Insert_After_Before(){ with(oSel){ Text ="как выделить в документе фрагмент текста "; InsertAfter("............Конец"); InsertBefore("Начало......"); EndOf(); InsertBreak(6);}} Create_Doc();Insert_After_Before();

Для VBA мы просто запускаем редактор кода, добавляем новый модуль и прописываем код, в моем случае имя модуля — Module1:

Sub Module1()' ----------------------------------------------------------------------------' выделение в Word фрагментов текста' ---------------------------------------------------------------------------- Dim oWord1 AsObject, oDoc1 AsObject, oSel1 AsObject, i Set oWord1 = CreateObject("Word.Application")Set oDoc1 = oWord1.DocumentsoDoc1.AddSet oSel1 = oWord1.SelectionoWord1.Visible = True '***************************************With oSel1 .Text = "как выделить фрагмент текста " .InsertAfter "............Конец" .InsertBefore "Начало......" .EndOf .InsertBreak wdLineBreakEndWith'*************************************** EndSub

И так, с одной теоретической частью мы закончили и написали программный код, теперь можно приступить к следующей части.

Методы Insert… – выделение фрагментов текста в Word

InsertCaption(Label, Title, TitleAutoText, Position, ExcludeLabel) — Вставляет заголовок сразу после или перед указанным выбором. Обязательным является только параметр Label.

Label – Нумерационный заголовок. Параметр может быть строкой или значением константы WdCaptionLabelID:

  • wdCaptionEquation — Уравнение
  • wdCaptionFigure — Рисунок
  • wdCaptionTable – Таблица

Если метка (Label) не определена, то возникнет ошибка. Для определения метки надо использовать метод Add коллекции CaptionLabels, например:

Applicationd.CaptionLabels.Add Name:="Рисунок"

Title– Заголовок, который будет отображаться справа от метки.

TitleAutoText– Авто-заголовок, перекрывает параметр Title.

Position— Указывает, будет ли вставлен заголовок выше или ниже. Может быть одной из констант WdCaptionPosition:

  • wdCaptionPositionAbove — 0 — Метка название добавляется выше.
  • wdCaptionPositionBelow — 1 — Метка название добавляется ниже.

ExcludeLabel— TRUE — отключить метку, заданную в параметре Label. FALSE — включить метку. Дополнительно.

Ниже я приведу примеры, что бы не дублировать программный код, я привел только содержимое процедуры Sub Insert_Caption.

' VBScriptSub Insert_Caption() oWord3.CaptionLabels.Add "Номер"For i = 0 To 10 oSel3.InsertCaption "Номер", "как выделять фрагменты текста " & i oSel3.InsertBreak 6 NextEndSub

Тут используется цикл for для вставки нескольких фрагментов — «Урок 6 по VBScript: Циклы for…next и for each…next«.

//JScriptfunction Insert_Caption(){oWord4.CaptionLabels.Add("Номер");for(i =0; i<=10; i++){ oSel4.InsertCaption("Номер","выделение фрагмента текста "+ i); oSel4.InsertBreak(6);}}

Тут тоже используется цикл for, но уже для JS кода — «Урок 9 по JScript — оператор цикла for«.

' VBAoWord5.CaptionLabels.Add "Номер"For i = 0 To 10 oSel5.InsertCaption Label:="Номер", Title:="Фраза VBA Selection " & i oSel5.InsertBreak wdLineBreakNext

Обратите внимание, чтоимена переменных в примерах отличаются, это пришлось сделать с технических причин – в глазах поисковых систем статья становится заспамленой. Хорошо, давайте двигаться дальше.

Методы Insert… – выделение фрагментов текста в Word

как можно выделить фрагмент текста

InsertDateTime(DateTimeFormat) – Метод позволяет вставить дату или время в документ, или одновременно оба значения. Помимо параметра DateTimeFormat есть еще четыре, но они практически не используются.

DateTimeFormat – Необязательный параметр, позволяет указать формат даты и времени.

' VBScriptSub Insert_DateWith oSel4.Text = "как выделить фрагмент текста ".EndOf.InsertBreak 6.InsertDateTime.InsertBreak 6.InsertDateTime "MMMM dd, yyyy".InsertBreak 6.InsertDateTime "MMMM dd, yyyy - H:M:S"EndWithEndSub

Обратите внимание на оператор with, он позволяет не писать каждый раз имя класса.

//JScriptfunction Insert_Date(){with(oSel4){Text =" выделение фрагментов Word текста ";EndOf();InsertBreak(6);InsertDateTime();InsertBreak(6);InsertDateTime("MMMM dd, yyyy");InsertBreak(6);InsertDateTime("MMMM dd, yyyy - H:M:S");}}

Тут логика работы аналогична.

' VBAWith oSel5 .Text = " как выделить в Word фрагмент текста " .EndOf .InsertBreak wdLineBreak .InsertDateTime .InsertBreak wdLineBreak .InsertDateTime "MMMM dd, yyyy" .InsertBreak wdLineBreak .InsertDateTime "MMMM dd, yyyy - H:M:S"EndWith

Хорошо, осталось рассмотреть последнюю третью часть статьи.

Методы Insert… – выделение фрагментов текста в Word

InsertFile(FileName) – Позволяет вставить содержимое указанного файла в документ, параметр FileName хранит имя или путь к файлу, если путь отсутствует, то будет подразумеваться текущий каталог.

InsertNewPage — Вставляет новую страницу в место, где находится указатель.

InsertParagraph— Заменяет выделение знаком абзаца.

InsertParagraphAfter— Вставляет знак абзаца после выделения .

InsertParagraphBefore— Вставляет новый абзац перед выделением.

Методы с префиксом Move… также встречаются едва ли не в любой программе, связанной с вводом текста в Word. Самые важные и удобные из этих методов:

MoveLeft(), MoveRight(), MoveUp(), MoveDown() – Методы дают возможность переместить курсор влево, вправо, вверх и вниз. Все четыре метода принимают следующие параметры (Unit, Count, Extend), являющиеся необязательными:

Unit — Блок, по которым выбор должен быть перемещен. Параметр Unit содержит значения константы wdUnits.

Count – Единица перемещения. Значение по умолчанию 1.

Extend — Может быть либо wdMove (по умолчанию) или wdExtend.

MoveEnd(), MoveStart() – Перемещение курсора в конец или начало выделения, параметры — Unit, Count.

MoveStartUntil(), MoveStartWhile(), MoveEndUntil(), MoveEndWhile() – Позволяют переместить курсор к заданному символу или последовательности символов. Параметры Cset (обязательный) и Count (дополнительный):

Cset — Один или несколько символов. Аргумент является чувствительным к регистру.

Count – Задает целое или отрицательное значение, на которое происходит перемещение курсора.

Move(Unit, Count) – Фактически, тут мы может указать направление (Count) и текстовую единицу (Unit).

Логика работы для следующих примеров остается та же – меняется только код вызываемой процедуры. Фактически, код для языка VBScript и VBA является идентичным.

' VBScriptSub Get_Move()With oSel6 ' вставляем в документ фразу сто разFor i = 0 To 10 .Text = "как выделить фрагменты нужного текста "' Перемещаем курсор в конец .EndOf Next  For i = 0 To 300 .MoveLeft Next  For i = 0 To 100 .MoveRight Next  For i = 0 To 4 .MoveUp Next  .MoveStartUntil "Word"  For i = 0 To 15 .Move 2, 5 NextEndWithEndSub

Видим, что в данном коде мы использовали несколько операторов for.

//JScriptfunction Get_Move(){with(oSel6){for(i=0; i<=10; i++){ .Text="Текстовая строка: выделение фрагментов текста"; .EndOf();}  for(i=0; i<=300; i++){ .MoveLeft();}for(i=0; i<=100; i++){ .MoveRight();}for(i=0; i<=4; i++){ .MoveUp();} .MoveStartUntil("Word");for(i=0; i<=15; i++){ .Move(2,5);}}}

Обратите внимание на приведенные в самом начале статьи примеры кода для языков VBA и VBScript, в макросе мы можем использовать именованные константы объекта Word, но в теле Windows Script Host сценария нет, так как там они не доступны. Описание свойств класса Selection я рассмотрел в этой статье.

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