Коллекция Word Characters — количество символов

Коллекция Word Characters — количество символов Объектная модель Microsoft Word

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

И так, прежде чем приступать к рассмотрению самого компонента, мы сначала рассмотрим теоретическую часть для самого редактора ворд версии 2007, а именно – как происходит подсчет количества символов.

Количество символов в ворде

И так, что бы узнать количество знаков в Word 2007:

Сразу при вводе текста, да, собственно, при создании нового документа, количество символов отображается в самом низу справа, точнее, количество слов. Если навести указатель мыши в данную область и нажать левой кнопкой мыши, то появится окно «Статистика», в котором будет отображаться количество:

  • Страниц
  • Слов
  • Знаков (без пробелов)
  • Знаков (с пробелами)
  • Абзацев
  • Строк

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

С вордом 2007 все вроде ясно, но вот давайте сразу рассмотрим, как можно подсчитать количество символов в других версиях Word:

  • 2010 – суть действий аналогична версии 2007.
  • 2003 – для подсчета знаков в данной версии ворд, нужно войти в меню «Сервис» и выбрать пункт «Статистика».

Стоит отменить тот факт, что в ворд можно просмотреть не только количество знаков для всего документа, но и для выделенной области текста, достаточно выбрать нужный фрагмент, и статистика будет показана только для него. Если вы любитель различных сочетаний клавиш, то для просмотра количества символов и слов в Word достаточно ввести комбинацию клавиш «Ctrl + Shift +G«.

Хорошо, с теоретической часть разобрались, теперь можно приступить к программной части статьи, а именно, к коллекции Characters.

word - количество знаков
количество символов в ворде
количество символов в word

Коллекция Characters – количество знаков в Word

Коллекция Characters содержит количество символов для заданного выделения (Selection), выбора (Range) и документа (Document). Стоит учитывать тот факт, что в коллекции Characters нет отдельного объекта Character, поскольку каждый отдельный элемент, а по сути – символ, является объектом Range, который представляет отдельный знак.

Для доступа к коллекции используется одноименное свойство объекта Document, Range или Selection.

Методы и свойства

Characters(index) – тут мы задаем номер желаемого символа, с которым хотим работать.

Count– общее количество символов в ворде для заданного выбора, выделения или документа.

Firstи Last– возвращает объект Range, которые представляет предыдущий и следующий элемент в коллекции.

Теперь, как и следует ожидать, я перейду к практической части данной публикации. Я приведу два примера программного кода, которые работают под управлением сервера сценариев Windows Script Host. Оба примера выполняют одну задачу, но их логика работы немного отличается…

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

' ----------------------------------------------------------------------------' Коллекция Characters' Подсчет количества знаков в документе Word' Characters.vbs' ----------------------------------------------------------------------------OptionExplicit dim oWord, oDoc, oSel, i, oPars, MyText, oRange Set oWord = CreateObject("Word.Application")Set oDoc = oWord.DocumentsoDoc.Add()Set oSel = oWord.SelectionSet oRange = oDoc(1).RangeSet oPars = oRange.ParagraphsoWord.Visible = True MyText = "Определяем количество символов в ворде. " For i=0 to 5oSel.TypeText MyText & MyText & MyTextoSel.TypeParagraphNext CharDocLSelLRange 1,3 ' ********************************************************' количество знаков в Word для всего документа' ********************************************************Sub CharDoc Statistic oWord.ActiveDocument.Characters.CountEndSub ' **************************************************' количество знаков в Word для выделения' **************************************************Sub LSel dim SEnd oWord.Documents(1).Select' выделяем весь текстSEnd = oSel.End' конец выделения  ' выделяем заданный диапазон With oSel .Start= 0 .End= Round(SEnd / 4) EndWith  Statistic oSel.Characters.Count oSel.Collapse' убираем выделениеEndSub ' **************************************************' количество знаков в Word для выбора' **************************************************Sub LRange(a, b) oRange.SetRange oPars(a).Range.Start, oPars(b).Range.End Statistic oRange.Characters.CountEndSub ' *************************************************************' подсчет статистики по количеству символов в Word' *************************************************************Sub Statistic (d)dim j, a1, a2, a3, a4a1 = 0' перевод строкиa2 = 0' пробелa3 = 0' прочие символыfor j=1 to d Selectcase oWord.ActiveDocument.Characters(j)case chr(13) a1=a1+1case chr(32) a2=a2+1caseelse a3 = a3 + 1 EndSelectnext MsgBox "символов без пробелов" & vbTab & a3 & vbCrLf &_"символов с пробелами" & vbTab & a3 + a2 & vbCrLf &_"пробелов" & vbTab & a2 & vbCrLf &_"абзацев" & vbTab & a1,, "Статистика"EndSub

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

Statistic (d) – данная процедура вызывается из тела остальных подпрограмм, ей передается только один параметр, который показывает, от какого объекта происходит доступ к коллекции Characters. Переменные a1, a2 и a3 будут содержать количество пробелов, перевод строк и прочих символов, соответственно. Цикл For производит пробег по всем знакам, содержащимся в заданной области. Функция vbs – CHR позволяет получить символ по заданному коду, данные проверяются конструкцией Select Case.

CharDoc – самая простая процедура, так как тут мы просто вызываем Statistic с параметром oWord.ActiveDocument.Characters.Count.

LSel – тут происходит выделение части текста, в котором мы хотим произвести подсчет количества знаков.

LRange – отвечает за выбор заданных абзацев.

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

// ----------------------------------------------------------------------------// Коллекция Characters// Подсчет количества знаков в документе Word// Characters.vbs// ----------------------------------------------------------------------------var oWord, oDoc, oSel, i, oPars, MyText, oRange; oWord = WScript.CreateObject("Word.Application");oDoc = oWord.Documents;oDoc.Add();oSel = oWord.Selection;oRange = oDoc(1).Range();oPars = oRange.Paragraphs;oWord.Visible=true; MyText ="Определяем количество символов в ворде. "; for(i=0; i<=5; i++){oSel.TypeText(MyText + MyText + MyText);oSel.TypeParagraph();} CharDoc();LSel();LRange(1,3); // ********************************************************// количество знаков в Word для всего документа// ********************************************************function CharDoc(){ Statistic(oWord.ActiveDocument.Characters.Count);} // **************************************************// количество знаков в Word для выделения// **************************************************function LSel(){var SEnd = oSel.End;// конец выделения oWord.Documents(1).Select();// выделяем весь текст  // выделяем заданный диапазон  with(oSel){ Start=0; End=Math.round(SEnd /4);}  Statistic(oSel.Characters.Count); oSel.Collapse();// убираем выделение} // **************************************************// количество знаков в Word для выбора// **************************************************function LRange(a, b){ oRange.SetRange(oPars(a).Range.Start, oPars(b).Range.End); Statistic(oRange.Characters.Count);} // *************************************************************// подсчет статистики по количеству символов в Word// *************************************************************function Statistic(d){var a1 =0;// перевод строкиvar a2 =0;// пробелvar a3 =0;// прочие символыvar a4;for(j=1; j<=d; j++){if(oWord.ActiveDocument.Characters(j)==String.fromCharCode(13)){a1++;}else{if(oWord.ActiveDocument.Characters(j)==String.fromCharCode(32)){a2++;}else{a3++;}}} a4 = a3 + a2; WScript.Echo("символов без пробеловt"+ a3 +"nсимволов с пробеламиt"+ a4 +"nпробеловt"+ a2 +"nабзацевt"+ a1);}

В данном примере мне пришлось вместо конструкции Switch … Case использовать рядовой оператор IF, так как конструкция не хотела обрабатывать код символа. За получение символа пол его коду отвечает внутренняя функция объекта String – fromCharCode.

Важно отметить, что сам текстовый редактор Word выдает больше информации чем приведенный выше программный код, плюс, в ворде при подсчете количества знаков данные учитываются более «корректно», для примера, не учитывается пустой абзац. Конечно, если немного посидеть дольше, то можно получить аналогичные результаты и для программного кода, но…. Цель статьи – показать лишь пример, а не изобретать колесо.

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