Аннотация: Лекция посвящена описанию объектной модели MS Word и подробному описанию методов, свойств и событий Application.
9.1. Объектная модель MS Word
Microsoft Word 2007, как, впрочем, и другие приложения Office, имеет большую объектную модель, в которую входят множество объектов и коллекций. Однако на практике чаще всего используются лишь некоторые из них.
В частности, это следующие:
- Word (Microsoft Word) — чтобы вызывать объекты Microsoft Office Word из других приложений используется объект Word.
- Application (Приложение) — объект, который включает в себя все остальные объекты и коллекции. Сам объект Application включается в объект Word.
- Documents (Документы) — коллекция, которая включает в себя объекты Document (Документ). Объект Document представляет собой документ, с которым вы работаете в редакторе.
- Bookmarks (Закладки) — c помощью объектов этой коллекции можно задавать места в документе, в которые, при автоматическом создании, можно вставлять изменяемые части.
- Paragraphs (Абзацы), Sentences (Предложения), Words (Слова), Characters (Символы), Tables (Таблицы), OMath (Математические формулы), Эти коллекции, содержащие объекты, соответствующие их названиям, могут использоваться для обработки слов документа ( Words ), предложений ( Sentences ), отдельных символов ( Characters ) и т.д.
- Selection (Выделенная область) — представляет собой выделенную область документа или позицию, в которую будет осуществляться вставка очередного символа. Этот объект часто используют при создании простых документов. Однако у него есть существенные недостатки, что делает предпочтительнее использование объекта Range в большинстве случаев.
- Range (Диапазон) — входит в Document и другие объекты, представляет собой диапазон документа, ограниченный начальным и конечным символом.
Работая с объектной моделью MS Word следует понимать, что, например, объекты Document и Selection могут содержать одинаковые коллекции объектов, например, и там и там есть коллекция Characters, в которую входят объекты Character — то есть — символы. Однако в случае с объектом Document мы можем работать с любым символом документа, а в случае с Selection — лишь с символами в пределах выделенной области. Однако, несмотря на различия, и там и там коллекция Characters имеет одинаковые свойства и методы. То же самое касается и других коллекций и объектов.
Давайте начнем с объекта Application и здесь же поговорим об использовании объектных переменных.
9.2. Работа с объектными переменными
Объектные переменные — это переменные, которые хранят ссылки на объекты. Чтобы инициализировать объектную переменную, нужно использовать ключевое слово Set. Например, так (листинг 9.1.):
Set obj_NewWord = Word.Application
Листинг
9.1.
Связывание объекта с объектной переменной
Здесь вы можете видеть присваивание переменной ссылки на объект Word.Application. Код, подобный этому, нужен в других приложениях Microsoft Office для запуска нового экземпляра MS Word.
Для того чтобы вы могли работать с Microsoft Word из других приложений — подключите библиотеку Microsoft Word 12.0 Object Library. Сделать это можно, открыв в редакторе окно References командой Tools o References.
Немного ниже мы поговорим о том, что можно делать с объектными переменными, а пока сосредоточимся на их объявлении и инициализации.
Как видите, в листинге 9.1 мы не объявляли переменную — мы сразу присвоили ей ссылку на объект. При последующей работе с такой необъявленной объектной переменной, мы не сможем пользоваться подсказкой по свойствам и методам. Вспомните — когда вы набираете в редакторе имя элемента управления и ставите после него точку — вы видите подсказку. Это очень удобно, так как позволяет избежать ошибок и излишних «походов» в справочную систему VBA.
Для того чтобы справка по свойствам и методам работала, объектную переменную надо сначала объявить, а потом присвоить ей ссылку на объект. Например, так (листинг 9.2.):
Dim obj_NewWord As Word.Application Set obj_NewWord = Word.Application
Листинг
9.2.
Предварительное объявление объектной переменной
Ссылку на объект можно присвоить в процессе объявления переменной. Для этого нужно воспользоваться ключевым словом New (листинг 9.3.):
Dim obj_NewWord As New Word.Application
Листинг
9.3.
Ключевое слово New при объявлении переменной
Переменную, объявленную таким образом, мы можем сразу же использовать по назначению. Новый экземпляр объекта будет создан при первом обращении к нему.
О том, как же пользоваться объектными переменными, скорее даже не ими, а объектами, на которые они ссылаются, мы поговорим ниже.
9.3. Объект Application — приложение
09-01-With For Each.docm — пример к п. 9.3.
Объект Application можно представить в виде приложения Microsoft Word.
Такой код позволит вывести в окно сообщения информацию об имени приложения:
Как видите, здесь мы обратились к свойству Name (Имя) объекта Application. Вот, что будет выведено при его исполнении (рис. 9.1.).
Рис.
9.1.
Свойство Name объекта Application
Здесь мы обходимся без объектных переменных, работая с уже существующим объектом. Ведь если этот код исполняется в Microsoft Word, это значит, что сам Microsoft Word уже запущен.
Чтобы упростить обращение к нескольким свойствам объекта, можно воспользоваться оператором With-End With. Этот оператор позволяет обращаться к нескольким свойствам или методам объекта в упрощенной форме. Например, чтобы вывести имя приложения и узнать номер сборки программы нужно воспользоваться таким построением (листинг 9.4.):
With Application MsgBox .Name MsgBox .Build End With
Листинг
9.4.
Оператор With — End With
Здесь мы использовали объект Application — вместо него может быть любой другой объект или объектная переменная.
Еще один оператор, которым удобно пользоваться при работе с объектами и коллекциями — это For Each…Next.
Например, для вывода в окнах сообщений имен всех открытых документов, можно написать такой код (листинг 9.5.):
Dim var_Doc For Each var_Doc In Application.Documents MsgBox var_Doc.Name Next var_Doc
Листинг
9.5.
Оператор For Each — Next
Var_Doc — это переменная типа Variant. Коллекция Application.Documents содержит все открытые документы. При каждом проходе цикла в переменную var_Doc записывается ссылка на очередной объект в коллекции.
Чтобы выйти из цикла, можно воспользоваться оператором Exit For.
Сейчас мы кратко опишем важнейшие методы, свойства и события объекта Application.
9.4. Методы объекта Application
9.4.1. BuildKeyCode, KeyString — горячие клавиши
BuildKeyCode возвращает уникальный цифровой код для заданной комбинации клавиш. Используется при назначении «горячих клавиш» для выполнения различных операций.
KeyString возвращает комбинацию клавиш для переданного кода.
Ниже мы рассмотрим пример программного назначения клавиатурной комбинации для вызова макроса.
9.4.2. ChangeFileOpenDirectorу — путь для работы с файлами
ChangeFileOpenDirectory позволяет установить директорию, в которой Microsoft Word ищет файлы для открытия. В установленной папке программа будет искать файлы при программном открытии файлов и при вызове окна открытия файлов.
Выбранная директория будет использоваться для открытия файлов по умолчанию лишь до тех пор, пока Word не будет перезапущен.
Например, чтобы установить папку » C:Новые документы » в качестве папки по умолчанию, можно использовать такой код (листинг 9.6.):
Application.ChangeFileOpenDirectory ("C:Новые документы")
Листинг
9.6.
Установка новой папки по умолчанию
Следует отметить, что если мы вызываем метод или свойство объекта Application из макроса Microsoft Word, мы можем опускать вызов Application — то есть, в вышеприведенном примере можно написать так:
ChangeFileOpenDirectory ("C:Новые документы")
9.4.3. CleanString — очистка строк
CleanString очищает переданную строку от непечатаемых и специальных символов, превратив ее в обычный текст. Такой же текст можно получить, если скопировать текст из Microsoft Word в Блокнот, а потом — обратно. Например, с помощью такого кода можно получить очищенную строку из выделенной области документа (листинг 9.7.).
str_Clean = Application.CleanString(Selection.Text)
Листинг
9.7.
Очистка строки
9.4.4. Keyboard — программное переключение раскладки
Keyboard позволяет программно переключать раскладку клавиатуры. При переключении используется идентификатор языковых и клавиатурных установок. Чтобы включить русскую раскладку, можно воспользоваться таким кодом (листинг 9.8.):
Application.Keyboard 1049
Листинг
9.8.
Переключение на русскую раскладку клавиатуры
Очевидно, что 1049 — это код русского языка. Для включения английской раскладки используйте этот метод с идентификатором 1033.
9.4.5. ListCommands — справка по горячим клавишам
ListCommands это необычный метод — если вызвать его с параметром True (листинг 9.9.) — он создаст новый документ, содержащий таблицу со списком клавиатурных сочетаний, назначенных командам MS Word. Таблица содержит несколько десятков страниц.
Application.ListCommands True
Листинг
9.9.
Вывод информации о горячих клавишах
9.4.6. NewWindow — копия окна активного документа
09-02-New Window.docm — пример к п. 9.4.6.
NewWindow создает копию окна активного документа. Это может быть полезным например, для того, чтобы вывести один и тот же документ на два монитора при работе с расширенным рабочим столом и т.д. Например, метод можно вызвать так:
Application.NewWindow
Листинг
9.10.
Создание копии окна активного документа
При необходимости можно задать, для какого именно документа вы хотите создать копию окна. Однако, это потребует использования других объектов. Например — коллекции Windows, содержащей окна документов. Такой код (листинг 9.11.) создаст одну копию для каждого открытого окна:
For i = Application.Windows.Count To 1 Step -1 Application.Windows.Item(i).NewWindow Next i
Листинг
9.11.
Создание копии для каждого открытого окна
Мы не случайно запустили цикл обхода открытых окон в обратном порядке. Дело в том, что иначе будет создано несколько копий одного и того же документа.
В этом примере вам встретились неизвестные ранее свойства Count и Item. Первое обычно содержит количество элементов в коллекции, второе позволяет обращаться к элементам по индексам или именам.
При создании копии после имени документа появляется двоеточие с номером окна, например, «:1» для первого, «:2» для второго и т.д.
9.4.7. OnTime — запуск макросов по расписанию
09-03-OnTime.docm — пример к п. 9.4.7.
OnTime позволяет устанавливать таймер, по которому можно запустить макрос в определенное время. Например, чтобы выполнить макрос MyMacros, который хранится в том же документе, что и исполняемый макрос, достаточно выполнить такой код (листинг 9.12.).
Application.OnTime When:="08:37:00", Name:="MyMacros"
Листинг
9.12.
Установка таймера запуска макроса
Параметр When указывает на время запуска, параметр Name — на имя макроса. Важно, чтобы макрос был доступен как в момент запуска таймера, так и в момент запуска самого макроса. Для того чтобы это условие соблюдалось, желательно хранить макросы, запускаемые по таймеру, в Normal.dotm, в другом глобальном шаблоне, или в том же документе, в котором произошел запуск таймера.
Как видите, мы привели пример лишь для запуска макроса в строго определенное время. А как же быть, если нужно запустить макрос, например, через пятнадцать секунд после выполнения какой-либо процедуры? Ответ прост (листинг 9.13.)
Application.OnTime _ When:=Now + TimeValue("00:00:15"), _ Name:="MyMacros"
Листинг
9.13.
Запуск макроса по расписанию
Здесь мы запускаем тот же самый макрос, но уже через 15 секунд после установки таймера. Функция Now имеет тип Date и возвращает текущую дату и время, а функция TimeValue преобразует переданное ей время в формат Date.
Если вы хотите, чтобы какой-то макрос запускался с некоторой периодичностью — установку таймера на запуск этого макроса можно установить в нем. Первый запуск макроса можно произвести вручную или каким-то другим способом (например — по событию приложения, с помощью автоматически выполняемого макроса), а последующие запуски этот макрос будет инициировать самостоятельно.
title | description | ms.date | ms.topic | dev_langs | helpviewer_keywords | author | ms.author | manager | ms.technology | ms.workload | ||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Word object model overview |
The Word object model consists of classes and interfaces that are provided in the primary interop assembly for Word and are defined in the Word namespace. |
02/02/2017 |
conceptual |
|
|
John-Hart |
johnhart |
jmartens |
office-development |
office |
Word object model overview
[!INCLUDE Visual Studio]
When you develop Word solutions in Visual Studio, you interact with the Word object model. This object model consists of classes and interfaces that are provided in the primary interop assembly for Word, and are defined in the xref:Microsoft.Office.Interop.Word namespace.
[!INCLUDEappliesto_wdalldocapp]
This topic provides a brief overview of the Word object model. For resources where you can learn more about the entire Word object model, see Use the Word object model documentation.
For information about using the Word object model to perform specific tasks, see the following topics:
-
Work with documents
-
Work with text in documents
-
Work with tables
Understand the Word object model
Word provides hundreds of objects with which you can interact. These objects are organized in a hierarchy that closely follows the user interface. At the top of the hierarchy is the xref:Microsoft.Office.Interop.Word.Application object. This object represents the current instance of Word. The xref:Microsoft.Office.Interop.Word.Application object contains the xref:Microsoft.Office.Interop.Word.Document, xref:Microsoft.Office.Interop.Word.Selection, xref:Microsoft.Office.Interop.Word.Bookmark, and xref:Microsoft.Office.Interop.Word.Range objects. Each of these objects has many methods and properties that you can access to manipulate and interact with the object.
The following illustration shows one view of these objects in the hierarchy of the Word object model.
At first glance, objects appear to overlap. For example, the xref:Microsoft.Office.Interop.Word.Document and xref:Microsoft.Office.Interop.Word.Selection objects are both members of the xref:Microsoft.Office.Interop.Word.Application object, but the xref:Microsoft.Office.Interop.Word.Document object is also a member of the xref:Microsoft.Office.Interop.Word.Selection object. Both the xref:Microsoft.Office.Interop.Word.Document and xref:Microsoft.Office.Interop.Word.Selection objects contain xref:Microsoft.Office.Interop.Word.Bookmark and xref:Microsoft.Office.Interop.Word.Range objects. The overlap exists because there are multiple ways you can access the same type of object. For example, you apply formatting to a xref:Microsoft.Office.Interop.Word.Range object; but you may want to access the range of the current selection, of a particular paragraph, of a section, or of the entire document.
The following sections briefly describe the top-level objects and how they interact with each other. These objects include the following five:
-
Application object
-
Document object
-
Selection object
-
Range object
-
Bookmark object
In addition to the Word object model, Office projects in Visual Studio provide host items and host controls that extend some objects in the Word object model. Host items and host controls behave like the Word objects they extend, but they also have additional functionality such as data-binding capabilities and extra events. For more information, see Automate Word by using extended objects and Host items and host controls overview.
Application object
The xref:Microsoft.Office.Interop.Word.Application object represents the Word application, and is the parent of all of the other objects. Its members usually apply to Word as a whole. You can use its properties and methods to control the Word environment.
In VSTO Add-in projects, you can access the xref:Microsoft.Office.Interop.Word.Application object by using the Application
field of the ThisAddIn
class. For more information, see Program VSTO Add-ins.
In document-level projects, you can access the xref:Microsoft.Office.Interop.Word.Application object by using the xref:Microsoft.Office.Tools.Word.Document.Application%2A property of the ThisDocument
class.
Document object
The xref:Microsoft.Office.Interop.Word.Document object is central to programming Word. It represents a document and all of its contents. When you open a document or create a new document, you create a new xref:Microsoft.Office.Interop.Word.Document object, which is added to the xref:Microsoft.Office.Interop.Word.Documents collection of the xref:Microsoft.Office.Interop.Word.Application object. The document that has the focus is called the active document. It is represented by the xref:Microsoft.Office.Interop.Word._Application.ActiveDocument%2A property of the xref:Microsoft.Office.Interop.Word.Application object.
The Office development tools in Visual Studio extend the xref:Microsoft.Office.Interop.Word.Document object by providing the xref:Microsoft.Office.Tools.Word.Document type. This type is a host item that gives you access to all features of a xref:Microsoft.Office.Interop.Word.Document object, and adds additional events and the ability to add managed controls.
When you create a document-level project, you can access xref:Microsoft.Office.Tools.Word.Document members by using the generated ThisDocument
class in your project. You can access members of the xref:Microsoft.Office.Tools.Word.Document host item by using the Me or this keywords from code in the ThisDocument
class, or by using Globals.ThisDocument
from code outside the ThisDocument
class. For more information, see Program document-level customizations. For example, to select the first paragraph in the document, use the following code.
C#
:::code language=»csharp» source=»../vsto/codesnippet/CSharp/Trin_VstcoreWordAutomationCS/ThisDocument.cs» id=»Snippet120″:::
VB
:::code language=»vb» source=»../vsto/codesnippet/VisualBasic/Trin_VstcoreWordAutomationVB/ThisDocument.vb» id=»Snippet120″:::
In VSTO Add-in projects, you can generate xref:Microsoft.Office.Tools.Word.Document host items at run time. You can use the generated host item to add controls to the associated document. For more information, see Extend Word documents and Excel workbooks in VSTO Add-ins at run time.
Selection object
The xref:Microsoft.Office.Interop.Word.Selection object represents the area that is currently selected. When you perform an operation in the Word user interface, such as bolding text, you select, or highlight the text and then apply the formatting. The xref:Microsoft.Office.Interop.Word.Selection object is always present in a document. If nothing is selected, then it represents the insertion point. In addition, a selection can encompass multiple blocks of text that are not contiguous.
Range object
The xref:Microsoft.Office.Interop.Word.Range object represents a contiguous area in a document, and is defined by a starting character position and an ending character position. You are not limited to a single xref:Microsoft.Office.Interop.Word.Range object. You can define multiple xref:Microsoft.Office.Interop.Word.Range objects in the same document. A xref:Microsoft.Office.Interop.Word.Range object has the following characteristics:
-
It can consist of the insertion point alone, a range of text, or the entire document.
-
It includes non-printing characters such as spaces, tab characters, and paragraph marks.
-
It can be the area represented by the current selection, or it can represent an area different from the current selection.
-
It is not visible in a document, unlike a selection, which is always visible.
-
It is not saved with a document and exists only while the code is running.
When you insert text at the end of a range, Word automatically expands the range to include the inserted text.
Content control objects
A xref:Microsoft.Office.Interop.Word.ContentControl provides a way for you to control the input and presentation of text and other types of content in Word documents. A xref:Microsoft.Office.Interop.Word.ContentControl can display several different types of UI that are optimized for use in Word documents, such as a rich text control, a date picker, or a combo box. You can also use a xref:Microsoft.Office.Interop.Word.ContentControl to prevent users from editing sections of the document or template.
Visual Studio extends the xref:Microsoft.Office.Interop.Word.ContentControl object into several different host controls. Whereas the xref:Microsoft.Office.Interop.Word.ContentControl object can display any of the different types of UI that are available for content controls, Visual Studio provides a different type for each content control. For example, you can use a xref:Microsoft.Office.Tools.Word.RichTextContentControl to create a rich text control, or you can use a xref:Microsoft.Office.Tools.Word.DatePickerContentControl to create a date picker. These host controls behave like the native xref:Microsoft.Office.Interop.Word.ContentControl, but they have additional events and data-binding capabilities. For more information, see Content controls.
Bookmark object
The xref:Microsoft.Office.Interop.Word.Bookmark object represents a contiguous area in a document, with both a starting position and an ending position. You can use bookmarks to mark a location in a document, or as a container for text in a document. A xref:Microsoft.Office.Interop.Word.Bookmark object can consist of the insertion point, or be as large as the entire document. A xref:Microsoft.Office.Interop.Word.Bookmark has the following characteristics that set it apart from the xref:Microsoft.Office.Interop.Word.Range object:
-
You can name the bookmark at design time.
-
xref:Microsoft.Office.Interop.Word.Bookmark objects are saved with the document, and thus are not deleted when the code stops running or your document is closed.
-
Bookmarks can be hidden or made visible by setting the xref:Microsoft.Office.Interop.Word.View.ShowBookmarks%2A property of the xref:Microsoft.Office.Interop.Word.View object to false or true.
Visual Studio extends the xref:Microsoft.Office.Interop.Word.Bookmark object by providing the xref:Microsoft.Office.Tools.Word.Bookmark host control. The xref:Microsoft.Office.Tools.Word.Bookmark host control behaves like a native xref:Microsoft.Office.Interop.Word.Bookmark, but has additional events and data-binding capabilities. You can bind data to a bookmark control on a document in the same way that you bind data to a text box control on a Windows Form. For more information, see Bookmark control.
Use the Word object model documentation
For complete information about the Word object model, you can refer to the Word primary interop assembly (PIA) reference and the Visual Basic for Applications (VBA) object model reference.
Primary interop assembly reference
The Word PIA reference documentation describes the types in the primary interop assembly for Word. This documentation is available from the following location: Word 2010 primary interop assembly reference.
For more information about the design of the Word PIA, such as the differences between classes and interfaces in the PIA and how events in the PIA are implemented, see Overview of classes and interfaces in the Office primary interop assemblies.
VBA object model reference
The VBA object model reference documents the Word object model as it is exposed to VBA code. For more information, see Word 2010 object model reference.
All of the objects and members in the VBA object model reference correspond to types and members in the Word PIA. For example, the Document object in the VBA object model reference corresponds to the xref:Microsoft.Office.Interop.Word.Document object in the Word PIA. Although the VBA object model reference provides code examples for most properties, methods, and events, you must translate the VBA code in this reference to Visual Basic or Visual C# if you want to use them in a Word project that you create by using Visual Studio.
See also
- Office primary interop assemblies
- Automate Word by using extended objects
- Work with documents
- Work with text in documents
- Work with tables
- Host items and host controls overview
- Programmatic limitations of host items and host controls
- Optional parameters in Office solutions
Имя
Описание
Методы
Activate
Передает фокус
документу
AutoFormat
Автоматически
форматирует документ. Свойство Kindиспользуется для указания типа формата
CheckGrammar
Запускает проверку
правописания и грамматики для документа
CheckSpelling
Запускает проверку
правописания для документа
Close
Закрывает документ
ClosePrintPreview
Переходит из режима
предварительного просмотра к
предыдущему режиму. Исключение
возникает, если документ не находится
в режиме предварительного просмотра
CopyStylesFromTemplate
Копирует стили из
указанного шаблона в документ
CountNumberedItems
Возвращает число
маркированных или нумерованных
элементов и полей LISTNUMв документе
DetectLanguage
Анализирует текст
документа, чтобы определить язык, на
котором написан текст
DowngradeDocument
Изменяет формат
документа на формат документа Word
97-2003, чтобы его можно было редактировать
в предыдущей версии Microsoft Word
ExportAsFixedFormat
Сохраняет документ
в формате PDF или XPS
GoTo
Возвращает объект
Microsoft.Office.Interop.Word.Range, представляющий
начальное положение указанного
элемента, например, страницы, закладки
или поля
ManualHyphenation
Включает расстановку
переносов в документе вручную, по
одной строке. Пользователю предлагается
принять или отклонить предложенные
варианты переноса слов
PresentIt
Открывает Microsoft
PowerPoint с загруженным документом
PrintOut
Выводит на печать
целый документ или его часть
PrintPreview
Переключает в режим
предварительного просмотра
Range
Возвращает объект
Microsoft.Office.Interop.Word.Rangeв пределах
указанных положений начального и
конечного знака
Redo
Выполняет последнее
действие, которое было отменено
(обращает метод Undo)
Repaginate
Выполняет разбиение
всего документа на страницы
ResetFormFields
Очищает все поля
форм в документе, подготавливая форму
для повторного заполнения
RunAutoMacro
Запускает автоматический
макрос, хранящийся в документе
Save
Сохраняет документ.
Если документ ранее не сохранялся,
выводится диалоговое окно Сохранить
как, в котором пользователь должен
задать имя файла
SaveAs
Сохраняет документ
с новым именем или форматом. Некоторые
аргументы для данного метода
соответствуют параметрам в диалоговом
окне Сохранить как
Select
Выделяет весь
документ
SetDefaultTableStyle
Задает стиль таблицы
для использования во вновь созданных
таблицах в документе
Undo
Отменяет последнее
действие или последовательность
действий, отображаемых в списке
Отменить. Значениеtrueвозвращается, если действия были
успешно отменены
UndoClear
Очищает список
действий, которые можно отменить для
документа. Соответствует списку
элементов, который отображается при
нажатии стрелки рядом с кнопкой
Отменитьна панели инструментовСтандартная
Unprotect
Удаляет защиту
документа
WebPagePreview
Отображает окно
предварительного просмотра документа
в том виде, как она будет выглядеть
при сохранении в качестве веб-страницы
Свойства
ActiveWindow
Возвращает объект
Window, представляющий активное окно
Application
Возвращает объект
Application, представляющий создателя
документа
AttachedTemplate
Возвращает или
задает коллекцию Template, в которой
хранятся все шаблоны, присоединенные
к документу
AutoHyphenation
Возвращает или
задает значение, указывающее, включена
ли функция автоматического переноса
слов в указанном документе
Background
Возвращает
или задает Shape,
представляющий фоновое изображение
в указанном документе
Bookmarks
Возвращает
коллекцию Microsoft.Office.Interop.Word.Bookmarks,
в которой хранятся все закладки в
документе
Characters
Возвращает
коллекцию Characters,
в которой хранятся знаки в документе
CommandBars
Возвращает
коллекцию CommandBars,
представляющую строку меню и все
панели инструментов в Word
Comments
Возвращает
коллекцию Comments,
в которой хранятся все примечания в
документе
Container
Возвращает
приложение-контейнер для документа
Creator
Возвращает приложение,
в котором был создан документ
DefaultExtension
Получает расширение
по умолчанию для данного объекта
Document
DefaultTableStyle
Возвращает
стиль таблицы, примененный ко всем
вновь созданным таблицам в документе
DefaultTabStop
Возвращает
или задает интервал в пунктах между
позициями табуляции в документе
Extension
Получает настраиваемое
расширение для данного объекта
Document
FormFields
Возвращает
коллекцию FormFields,
хранящую все поля форм в документе
FullName
Возвращает имя
документа, включая путь к диску или
Web-путь
GrammarChecked
Возвращает
или задает значение, указывающее,
была ли для документа выполнена
проверка грамматики
GridDistanceHorizontal
Возвращает
или задает интервал по горизонтали
между невидимыми линиями сетки,
которые используются в документе
Word при рисовании, перемещении или
изменении размеров автофигур или
знаков восточно-азиатских языков
GridDistanceVertical
Возвращает
или задает интервал по вертикали
между невидимыми линиями сетки,
которые используются в Word при рисовании,
перемещении или изменении размеров
автофигур или знаков восточно-азиатских
языков в документе
HasPassword
Возвращает
значение, которое позволяет определить,
требуется ли для открытия документа
ввод пароля
Hyperlinks
Возвращает
коллекцию Hyperlinks,
хранящую все гиперссылки в документе
HyphenateCaps
Возвращает
или задает значение, указывающее,
можно ли переносить слова из прописных
букв
HyphenationZone
Возвращает или
задает ширину области переноса в
пунктах
JustificationMode
Возвращает или
задает интервал между знаками в
документе
LanguageDetected
Возвращает или
задает значение, указывающее, удалось
ли приложению Word определить язык
текста в документе
ListParagraphs
Возвращает коллекцию ListParagraphs,
хранящую все нумерованные абзацы в
документе
Lists
Возвращает коллекцию Lists,
хранящую все форматированные списки
в документе
ListTemplates
Возвращает коллекцию ListTemplates,
в которой хранятся все форматы списков
для документа
Name
Возвращает имя
документа
OMathFontName
Возвращает или
задает имя шрифта, используемого в
документе для отображения формул
OMathJc
Возвращает
или задает значение, определяющее
выравнивание по умол-чанию (по левому
краю, по правому краю или по центру)
для формул
OMaths
Получает коллекцию
объектов OMath в документе
OpenEncoding
Возвращает кодировку,
используемую для открытия документа
Paragraphs
Возвращает
коллекцию Paragraphs,
хранящую все абзацы в документе
Parent
Возвращает родительский
объект документа
Password
Задает пароль,
который должен быть введен для открытия
документа
Path
Возвращает путь к
диску или Web-путь
документа
Saved
Возвращает или
задает значение, указывающее, не
изменился ли документ со времени
последнего сохранения
SaveEncoding
Возвращает или
задает кодировку, используемую при
сохранении документа
SaveFormat
Возвращает формат
файла документа
Sections
Возвращает коллекцию Sections,
хранящую разделы в документе
Sentences
Возвращает
коллекцию Sentences,
хранящую все предложения в документе
Shapes
Возвращает
коллекцию Shapes,
хранящую все объекты Shape
в документе
ShowGrammaticalErrors
Возвращает
или задает значение, указывающее,
были ли граммати-ческие ошибки в
документе помечены волнистой зеленой
линией
ShowRevisions
Возвращает
или задает значение, показывающее,
отображаются ли на экране отслеженные
изменения в документе
ShowSpellingErrors
Возвращает
или задает значение, указывающее,
подчеркивает ли приложение Microsoft Word
орфографические ошибки в документе
SnapToGrid
Возвращает
или задает значение, позволяющее
определить, выполняется ли автоматическое
выравнивание по невидимой сетке для
автофигур и знаков восточно-азиатских
языков при их рисовании, перемещении
или изменении их размеров в документе
SpellingChecked
Возвращает
или задает значение, указывающее,
была ли выполнена проверка правописания
в документе
SpellingErrors
Возвращает
коллекцию ProofreadingErrors,
в которой хранятся слова с орфографическими
ошибками в документе
Styles
Возвращает коллекцию Stylesдля документа
Tables
Возвращает коллекцию Tables,
хранящую все таблицы в документе
TablesOfFigures
Возвращает коллекцию TablesOfFigures,
хранящую таблицы фигур в документе
TrackRevisions
Возвращает или
задает значение, показывающее,
отслеживаются ли изменения в документе
Windows
Возвращает коллекцию Windows,
в которой хранятся все окна документа
(например, Sales.doc:1 и Sales.doc:2)
WritePassword
Устанавливает
пароль, необходимый для сохранения
изменений в документе
WriteReserved
Возвращает значение,
которое позволяет определить, защищен
ли документ паролем на запись
События
ActivateEvent
Происходит, когда
документ становится активным окном
BeforeClose
Происходит
непосредственно перед закрытием
документа
BeforePrint
Происходит перед
выводом документа на печать
BeforeSave
Возникает перед
сохранением документа
BuildingBlockInsert
Происходит при
вставке в документ стандартного блока
CloseEvent
Происходит при
закрытии документа
Deactivate
Происходит, когда
активный документ теряет фокус
New
Возникает при
создании нового документа
Open
Возникает при
открытии документа
SelectionChange
Возникает при
изменении выделения в окне документа
Startup
Происходит после
запуска документа и всех кодов
инициализации в сборке
WindowSize
Возникает после
перемещения окна документа или
изменения его размеров
2.1.1 Модель документа Microsoft Word
Огромное количество электронных версий учебно-методических материалов в образовательных учреждениях России представлено в формате Microsoft Word. Это объясняется широкой популярностью приложений Microsoft Office среди пользователей и простотой освоения и использования данного программного продукта. Поэтому весьма актуальной является задача автоматизации процесса конвертирования образовательного контента из представления Microsoft Word в формат Moodle.
Документ Microsoft Word представляет собой специализированное СОМ-ориентированное хранилище данных — структурированное хранилище (Structured Storage), организованное по иерархическому принципу. Документ может содержать различные типы данных: структурированный текст, графику, математические выражения, организационные диаграммы и т.д.
Концепция структурированного хранилища является составной частью современной парадигмы программирования на основе модели компонентных объектов (Component Object Model — COM). По сути, структурированное хранилище — это технология объединения в одной логической единице хранения данных (файле) объектов с различной природой и свойствами. Технология СОМ предлагает стандартную реализацию концепции структурированного хранилища в виде составного файла (Compound File): файловая система внутри файла. СОМ-хранилище представляет собой иерархическую структуру коллекций объектов двух типов: хранилищ (Storage) и потоков (Stream), которым в традиционной файловой системе соответствуют каталоги и файлы. Данный подход позволяет существенно снизить издержки хранения в одном файле объектов различной природы.
Объект-хранилище, аналогично каталогу файловой системы, может содержать потоки и другие хранилища. Фактически это означает, что хранилище содержит записи с информацией о местоположении, размере и других свойствах размещенных в нем объектов-потоков и других хранилищ. Объект-поток является последовательностью байтов, интерпретация которых, как и для обычного файла, зависит от типа потока (файла). Составной файл обязательно должен содержать корневое хранилище (Root Storage), которое, в свою очередь содержит как минимум один объект-поток, представляющий данные о самом хранилище (Native Stream), рис. 5. Кроме этого, корневое хранилище содержит имя составного файла в нотации файловой системы, к которой он принадлежит.
Каждый объект документа в составном файле представлен отдельным хранилищем, которое может содержать:
- один или несколько объектов-потоков, соответствующих экземплярам данного объекта;
- другие объекты-хранилища, представляющие встроенные в негообъекты (Inline Storage), и т.д.
Таким образом, глубина вложенности объектов в хранилище теоретически не ограничена, документ может быть сколь угодно сложным.
В общем случае технология СОМ предоставляет набор средств уровня API для работы с произвольными структурированными хранилищами. Так, объекты-хранилища и объекты-потоки поддерживают стандартный набор интерфейсов:
- IRootStorage — связывает хранилище с содержащим его файлом;
- IStorage — содержит методы для создания, открытия, модификации,перемещения, копирования, переименования, удаления объектовхранилища;
- IStream — поддерживает операции с потоком, аналогичные файловым операциям в файловой системе: чтение, запись, управлениеуказателем и т.д.;
- ILockBytes — реализует байтовый буфер для работы с носителямиданных;
- IPersist — идентификация объектов на уровне операционной системы;
- IPersistStorage — поддержка иерархической структуры хранилища;
- IPersistStream — реализует сериализацию объектов хранилища;
- IPersistFile — доступ к объектам, содержащимся в других файлах.Кроме этого, имеется Structured Storage API, содержащий следующие
основные группы функций:
- функции-ярлыки, выполняющие пакетные вызова других API-функций и интерфейсных методов для решения стандартных задач;
- функции доступа к реализации структурированного хранилища исоставному файлу;
- функции конвертирования и эмуляции объектов, которые дают возможность OLE-серверу работать с объектами, созданными другимсервером;
- функции конвертирования объектов формата OLE 1 в структурированное хранилище.
Конкретные реализации СОМ-приложений, использующие структурированные хранилища, как правило, имеют собственные библиотеки объектов-оберток API-интерфейса. Так, Microsoft Word предоставляет в распоряжение прикладных программ сотни объектов. Отношения наследования и агрегации объединяют эти объекты в иерархическую структуру — объектную модель Microsoft Word.
На рис. 6 представлен концептуальный уровень объектной модели Microsoft Word, который включает в себя шесть базовых объектов:
Рис. 6. Объектная модель Microsoft Word
- Application;
- Document;
- Selection;
- Rang e;
- Bookmark.
К особенностям модели в первую очередь относится наличие множественных перекрытий. Так, Document и Selection являются компонентами объекта Application, однако Document так же является свойством объекта Selection. Среди свойств Document и Selection имеются объекты Bookmark и Range. Перекрытия обеспечивают множественный доступ к объектам модели. Например, операция форматирования применима к объекту Range, который может быть определен как текущее выделение (Selection), абзац, раздел либо документ целиком.
Объект Application представляет приложение Microsoft Word и содержит все остальные объекты модели. Свойства и методы Application дают возможность полностью контролировать среду приложения Word.
Базовым компонентом, обеспечивающим доступ и манипулирование документами, является объект Document. В пространстве имен сборки Office Primary Interop для операционной среды .NET этот объект имеет вид:
Microsoft.Office.Interop.Word.Document
Объект Document содержит непосредственно данные документа (текст, графику и т.д.), сведения о структуре и форматировании документа. Структурные компоненты документа (абзацы, разделы, страницы, колонтитулы, стили и т.д.) представлены коллекциями экземпляров соответствующих свойств объекта. При создании нового или загрузке существующего документа Word создает новый экземпляр объекта Document и помещает его в коллекцию Documents объекта Application. Коллекция поддерживает указатель активного документа, который всегда представлен значением свойства ActiveDocument объекта Application.
Объект Selection представляет текущую выделенную область документа. Все операции форматирования документа применяются к текущему экземпляру объекта Selection. Экземпляр Selection существует всегда: если в документе отсутствует выделение, то он представляет текущую позицию ввода.
Объект Range представляет непрерывную область документа, определенную начальным и конечным символами. Он характеризуется следующими свойствами:
- Range может представлять текущую позицию ввода, непрерывнуюобласть текста или документ целиком;
- Range включает управляющие символы — отступы, табуляции, разрывы срок, границы абзацев и т.д.;
- Range может представлять текущее выделение или другой участокдокумента;
- участок документа, представляемый объектом Range не выделяетсявизуально;
- если новый текст вводится в конец диапазона, представленного объектом Range, то он включается в состав объекта;
- объекты Range не сохраняются вместе с документом.Возможно определение нескольких экземпляров объекта Range в одном и том же документе.
Объект Bookmark, аналогично Range, представляет непрерывную область документа и может использоваться как контейнер для текста. В отличии от Range, объекты Bookmark:
- именуются;
- сохраняются вместе с документом;
- могут быть видимыми — свойство ShowBookmarks = True объектаView.
В общем случае документ Microsoft Word является сложной композитной структурой, содержащей различные типы данных. Для извлечения данных из конкретного документа необходимо произвести его синтаксический анализ — парсинг (Parsing): определить типы хранящихся данных (текст, графика, таблицы, OLE-объекты) и выявить структуру документа.
Решение задач парсинга и извлечения контента из документа Microsoft Word связано, в основном, с использованием свойств и методов объекта Document. Имеет смысл построить модель документа, ориентированную на решение данного типа задач: среди порядка сотни свойств и методов объекта Document выявим необходимые для достижения поставленной цели и определим порядок их использования.
Основными типами данных документа Microsoft Word являются: текст, графика и таблицы. Таким образом, задача структурного анализа документа разделяется на три подзадачи:
Range является свойством объекта Paragraph. Текстовое содержание абзаца доступно через свойство Range.Text объекта Range. Общая модель парсинга текста документа Microsoft Word представлена на рис. 7.
Объект Range представляет собой базовый компонент модели структурного анализа документа (рис. 8).
Range предоставляет доступ ко всем основным типам данных документа. Среди его свойств — коллекции абзацев (Paragraphs), графических изображений (InlineShapes, ShapeRange), таблиц (Tables), рамок (Frames).
Объекты-таблицы (Table) содержатся в коллекции Tables и имеют структуру, представленную на рис. 9. Данные таблицы располагаются в ячейках — объектах Cell, объединенных в коллекции Cells. Имеется несколько вариантов получения доступа к экземплярам коллекций:
- коллекция ячеек таблицы является свойством её объекта Range;
- коллекция ячеек строки — свойство объекта Row из коллекции Rows;
- коллекция ячеек столбца — свойство объекта Colum n из коллекции
Columns;
Можно получить прямой доступ к ячейке с помощью метода объекта-таблицы Table.Cell(Row, Column), который возвращает заданный объект Cell.
На примере таблиц проявляется важное свойство, необходимое для четкого понимания модели документа Microsoft Word — рекурсивный характер структуры документа. Свойство Range объекта-ячейки Cell может, в свою очередь, содержать коллекции таблиц, графики и абзацев (рис. 9). Это дает основания для применения рекурсивных алгоритмов анализа структуры документа.
Графические данные документа Microsoft Word могут содержаться в двух типах объектов: Shape и InlineShape. InlineShape представляет графический объект в текстовом слое документа (рисунок, OLE-объект, ActiveX-элемент). Shape — это графический объект в слое рисования документа или так называемом полотне (Canvas). Данный объект характеризуется параметрами обтекания текстом и имеет привязку (Anchor) к абзацу или диапазону. Модель парсинга графических объектов документа представлена на рис. 10.
Графические объекты текстового слоя составляют коллекцию Inline-Shapes объекта-диапазона, графические объекты полотна — коллекцию ShapeRange. Кроме этого, графику могут содержать объекты-рамки (Frame) из контейнера Frames.
Доступ к графическим объектам рамки осуществляется по той же схеме через его свойство Range. Следует отметить, что содержимое объекта-рамки можно скопировать в буфер обмена Windows.