Здравствуйте дорогие читатели блога scriptcoding.ru. Сегодня мы рассмотрим свойства объекта Selection, который позволяет программно выделить весть текст в Ворде.
Помним, что бы вручную выделить весть текст в Ворд , достаточно нажать комбинацию клавиш «Ctr + A«. Мы рассмотрим некоторые свойства объекта Word.Selection. Говорю «некоторые«, так как большинство используются редко, в случае чего – документация MSDN всегда под рукой. И так, сам объект Selection выполняет двойную функцию – с одной стороны он позволяет вставлять фразу в только что созданный документ, с другой стороны – позволяет обрабатывать выделение всего текста в ворде. Описание методов класса Selection можно просмотреть тут и тут.
Свойства класса Word.Selection – выделить весь текст в Ворде
В конце статьи я приведу три примера программного кода – два под Windows Script Host (язык VBScript и JScript) и один под Visual Basic for Application.
И так, сначала давайте познакомимся со свойствами:
Start и End – Если текст уже выделен, то Start и End будут содержать начальную и конечную позиции выделения. Так как они доступны и для записи, то можно задать диапазон для выделения всего текста в ворде.
Flags – Позволяет установить или получить параметры выбора. Flags может быть установлено в одной из следующих констант wdSelectionFlags:
- wdSelActive — 8 — активное выделение.
- wdSelAtEOL — 2 – конец строки.
- wdSelOvertype — 4 – замена символов.
- wdSelReplace — 16 — выбор был заменен.
- wdSelStartActive — 1 — начало активного документа.
Само свойство возвращает сумму констант wdSelectionFlags.
Information(Type) — Получить информацию относительно выделения или заданного диапазона. Только чтение. Параметр Type содержит значения константы wdInformation (я указал только основные значения):
- wdActiveEndAdjustedPageNumber – 1 — Номер страницы.
- wdActiveEndSectionNumber – 2 — Количество разделов.
- wdActiveEndPageNumber – 3 – Номер страницы начиная с начала.
- wdNumberOfPagesInDocument – 4 – Количество страниц в документе
- wdHorizontalPositionRelativeToPage – 5 — Горизонтальная позиция от левого края выделения к левому краю страницы в пунктах.
- wdVerticalPositionRelativeToPage – 6 – Вертикальная позиция от верхнего края выделения к верхнему краю страницы в пунктах.
- wdFirstCharacterColumnNumber – 9- Позиция первого слова в выделении начиная с начала документа.
- wdFirstCharacterLineNumber – 10 – Позиция строки, с которой начинается выделение, начиная с начала.
- wdFrameIsSelected – 11 – TRUE, если выделен весть текст в ворде.
- wdZoomPercentage — 19 – Масштаб в процентах
- wdCapsLock – 21 – TRUE если включен CapsLock.
- wdNumLock — 22 – TRUE если включен NumLock.
- wdRevisionMarking – 24 — Возвращает True, если отслеживание изменений в силу.
Все константы будут содержать значение -1, если информация выходит за пределы допустимой области.
IPAtEndOfLine —True — указатель ввода расположен в конце строки (в крайнем правом положении при выравнивании).
NoProofing — Отменяет (значение TRUE) для выбранного фрагмента проверку орфографии и грамматики.
StoryType – Возвращает тип истории для указанного выбора (только чтение). Константа WdStoryType:
- wdCommentsStory — 4 – Комментарии.
- wdEndnoteContinuationNoticeStory — 17 — Сноска продолжения уведомления.
- wdEndnoteContinuationSeparatorStory — 16 – Сноска продолжения разделителя.
- wdEndnoteSeparatorStory — 15 — Сноска разделитель.
- wdEndnotesStory — 3 – Примечания.
- wdEvenPagesFooterStory — 8 — Четные страницы футера.
- wdEvenPagesHeaderStory — 6 — Четные страницы заголовка.
- wdFirstPageFooterStory — 11 –Первый футер страницы.
- wdFirstPageHeaderStory — 10 – Первый заголовок страницы.
- wdFootnoteContinuationNoticeStory — 14 — Сноска продолжения уведомления.
- wdFootnoteContinuationSeparatorStory — 13 — Сноска продолжения разделителя.
- wdFootnoteSeparatorStory — 12 — Сноска разделитель.
- wdFootnotesStory — 2 – Сноски.
- wdMainTextStory — 1 — Основной текст.
- wdPrimaryFooterStory — 9 — Первичный футер.
- wdPrimaryHeaderStory — 7 — Первичный заголовок.
- wdTextFrameStory — 5 — Текст рамки.
Text – Получить или указать материал, который будет вставлен на месте выделения, или просто там, где расположен курсор. Чтение/Запись
Type – Возвращает тип выделения, константа WdSelectionType:
- wdNoSelection — 0 – Отсутствует.
- wdSelectionBlock — 6 – Блок.
- wdSelectionColumn — 4 – Столбец.
- wdSelectionFrame — 3 – Рамка.
- wdSelectionInlineShape — 7 – Рядовая форма.
- wdSelectionIP — 1 – Пункт.
- wdSelectionNormal — 2 – Нормальный.
- wdSelectionRow — 5 – Строка.
- wdSelectionShape — 8 – Форма.
Начинаем программировать – выделить весь текст в ворде
Ниже, как обещал, привожу примеры кода. По сути, все заключается в создании нового документа, в который сто раз вставляется заданная фраза, далее, мы указываем, что надо выделить весь текст в ворде. Потом происходит выбор фрагмента и вывод значений некоторых свойств.
Пример на языке VBScript:
' ---------------------------------------------------------------------------- ' Класс Word Selection ' Создание, ввод и выбор ' выделение текста в ворде ' Selection.vbs ' ---------------------------------------------------------------------------- Option Explicit dim oWord, oDoc, oSel, SelText, MyText, i, SEnd, SStart Set oWord = CreateObject("Word.Application") Set oDoc = oWord.Documents oDoc.Add() Set oSel = oWord.Selection oWord.Visible = True MyText="Пример работы с объектом Word Selection в VBScript, выделение всего текста в ворде " ' вставляем в документ фразу сто раз For i = 0 To 100 oSel.Text = MyText ' Перемещаем курсор в конец содержимого oSel.EndOf Next ' Выделяем весь текст в ворде oWord.Documents(1).Select ' задержка в пять секунд WScript.Sleep 5000 With oSel ' Определяем позиции SStart = oSel.Start SEnd = oSel.End ' Перемещаем курсор в конец .EndOf .Text = SStart & " " & SEnd .EndOf ' Выделяем заданный диапазон .Start= SStart +400 .End= SEnd -400 ' задержка в пять секунд WScript.Sleep 5000 ' Отменяем проверку .NoProofing = true ' Выводим значения выделить весь текст в документе ворд MsgBox "Information - " & .Information(19) & vbCrLf &_ "StoryType - " & .StoryType & vbCrLf &_ "Type - " & .Type & vbCrLf &_ "IPAtEndOfLine - " & .IPAtEndOfLine End With |
Пример на языке JScript:
// ---------------------------------------------------------------------------- // Объект Word Selection // Создание, ввод и выбор // выделение текста в ворде // Selection.js // ---------------------------------------------------------------------------- var oWord1, oDoc1, oSel, MyText, i, SEnd, SStart; oWord1 = WScript.CreateObject("Word.Application"); oDoc1 = oWord1.Documents; oDoc1.Add(); oSel = oWord1.Selection; oWord1.Visible = true; MyText="Пример работы с объектом Word Selection в JScript, выделение всего текста в ворде " // вставляем в документ фразу сто раз for(i=0; i<=100; i++){ oSel.Text = MyText; // Перемещаем курсор в конец текста oSel.EndOf(); } // Выделяем весь текст в ворд oWord1.Documents(1).Select(); // задержка в пять секунд WScript.Sleep(5000); with (oSel){ // Определяем позиции SStart = Start; SEnd = End; // Перемещаем курсор в конец EndOf(); Text = SStart + " " + SEnd; EndOf(); // Выбираем заданный диапазон выделить весь текст в документе ворд Start= SStart + 400; End= SEnd - 400; // задержка в пять секунд WScript.Sleep(5000); // Отменяем проверку текста NoProofing = true; // Выводим значения WScript.Echo ("Information - " + Information(19) + "\nStoryType - " + StoryType + "\nType - " + Type + "\nIPAtEndOfLine - " + IPAtEndOfLine) } |
Пример под Visual Basic for Application:
Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) Sub Module2() Dim oWord2 As Object Dim oDocument As Object Dim oSel As Object Set oWord2 = CreateObject("Word.Application") oWord2.Visible = True Set oDocument = oWord2.Documents.Add Set oSel = oWord2.Selection MyText = "Пример работы с объектом Word Selection в Visual Basic for Application - выделить весь текст в ворде " With oSel For i = 0 To 100 .Text = MyText .EndOf Next oWord2.Documents(1).Select Sleep 3000 SStart = .Start SEnd = .End .EndOf .Text = SStart & " " & SEnd .EndOf .Start = SStart + 400 .End = SEnd - 400 ' выделить весь текст в документе ворд Sleep 3000 .NoProofing = True End With End Sub |
И так, с теоретической частью мы разобрались, и даже немного попрограммировали, теперь стоит дать некоторые пояснения к программному коду. В последнем примере для VBA в самом начале есть такая строка:
Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) |
Дело в том, что функция Sleep (смотрите статью «Объект WScript — методы sleep, quit и echo и 8 свойств») доступна только в сценариях VBS и JS, что бы сделать задержку для макроса, мне пришлось обратиться к системной функции Windows. Для вставки материала в документ используется цикл for, его смотрите описание синтаксиса для JScript — «Урок 9 по JScript — оператор цикла for» и для VBScript — «Урок 6 по VBScript: Циклы for…next и for each…next«. В остальном коде я думаю, разобраться несложно, если есть вопросы, задавайте, буду рад ответить.