Коллекция 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
' ----------------------------------------------------------------------------
Option Explicit
 
dim oWord, oDoc, oSel, i, oPars, MyText, oRange
 
Set oWord = CreateObject("Word.Application")
Set oDoc = oWord.Documents
oDoc.Add()
Set oSel = oWord.Selection
Set oRange = oDoc(1).Range
Set oPars = oRange.Paragraphs
oWord.Visible = True
 
MyText = "Определяем количество символов в ворде. "
 
For i=0 to 5
    oSel.TypeText MyText & MyText & MyText
    oSel.TypeParagraph
Next
 
CharDoc
LSel
LRange 1,3
 
' ********************************************************
' количество знаков в Word для всего документа
' ********************************************************
Sub CharDoc
     Statistic oWord.ActiveDocument.Characters.Count
End Sub
 
' **************************************************
' количество знаков в Word для выделения
' **************************************************
Sub LSel
     dim SEnd
     oWord.Documents(1).Select                         ' выделяем весь текст
    SEnd = oSel.End                                           ' конец выделения
 
     ' выделяем заданный диапазон 
     With oSel                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              
     .Start= 0
     .End= Round(SEnd / 4)
     End With
 
     Statistic oSel.Characters.Count
     oSel.Collapse  ' убираем выделение
End Sub
 
' **************************************************
' количество знаков в Word для выбора
' **************************************************
Sub LRange(a, b)
     oRange.SetRange oPars(a).Range.Start, oPars(b).Range.End
     Statistic oRange.Characters.Count
End Sub
 
' *************************************************************
' подсчет статистики по количеству символов в Word
' *************************************************************
Sub Statistic (d)
dim j, a1, a2, a3, a4
a1 = 0                              ' перевод строки
a2 = 0                              ' пробел
a3 = 0                              ' прочие символы
     for j=1 to d
                 Select case oWord.ActiveDocument.Characters(j)
                            case chr(13)
                 a1=a1+1
                            case chr(32)
                 a2=a2+1
                            case else
                 a3 = a3 + 1
                 End Select
     next
     MsgBox "символов без пробелов" & vbTab & a3 & vbCrLf &_
                                        "символов с пробелами" & vbTab & a3 + a2 & vbCrLf &_
                                        "пробелов" & vbTab & a2 & vbCrLf &_
                                        "абзацев" & vbTab & a1,, "Статистика"    
End Sub

Логика работы довольно проста: создается новый документ 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 выдает больше информации чем приведенный выше программный код, плюс, в ворде при подсчете количества знаков данные учитываются более «корректно», для примера, не учитывается пустой абзац. Конечно, если немного посидеть дольше, то можно получить аналогичные результаты и для программного кода, но…. Цель статьи – показать лишь пример, а не изобретать колесо.

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