Основы офисного программирования и документы Word


Гипертекстовый документ. Закладки и гиперссылки


Гипертекстом называется текст, содержащий ссылки. Конечно, настоящим гипертекстовым документом может быть только документ в электронной форме, поскольку в этом случае становится возможным непосредственный переход по ссылкам. Гипертекстовый документ перестает быть линейным текстом, читаемым от начала до конца. Порядок его чтения (работы с документом) определяется в момент просмотра документа и зависит от выбора гиперссылок лицом, работающим с документом. Когда я говорю о гипертекстовом документе, то применительно к документам Office 2000 это не отражает в полной мере истинную картину. В Office 2000 следует говорить о системе гипертекстовых документов, связанных ссылками. Действительно ссылки в документе Word могут задавать переход к:

  • элементу того же документа, заданного с помощью закладки или стиля Heading,
  • элементу другого документа Word,
  • элементу, расположенному на Web-странице,
  • именованному элементу рабочей книги Excel,
  • именованному слайду Power Point,
  • другому документу, файлу или Web-странице.

Гиперссылки и закладки это два основных инструмента, используемых при создании гипертекстовых документов. Закладка создается в точке, в которую производится переход, точке назначения, а гиперссылка - в точке, из которой производится переход, точке отправки.

Гипертекстовые документы являются одним из широко используемых типов документов. Так строятся сегодня практически все справочные системы. Пожалуй, для всех учебных пособий, особенно в электронной форме, гипертекстовая форма представления материала является наиболее подходящей, поскольку позволяет самому ученику определять оптимальный путь изучения учебного материала. Замечу, что, несмотря на всю полезность гиперссылок, злоупотреблять этим средством не стоит. Изобилие ссылок также плохо, как и линейный текст.

Давайте рассмотрим теперь пример, в котором два документа Word и один документ Excel будут связаны между собой взаимными гиперссылками. Я покажу, как программно устанавливаются закладки и гиперссылки. В документе Excel роль закладок играют имена элементов. Вот процедура, устанавливающая закладки:


Public Sub CreateBookmarks() 'Создание закладок 'Создадим закладку в документе DocOne и свяжем ее с рисунком Dim MyPath As String Documents("DocOne").Activate With ActiveDocument MyPath = .Path .InlineShapes(1).Select 'рисунок мышки .Bookmarks.Add "PictureOfMouse", Selection.Range End With 'Создадим закладку в документе ExampleOfTable и свяжем ее с таблицей Documents.Open (MyPath & "\ExampleOfTable") Documents("ExampleOfTable").Activate With ActiveDocument .Tables(1).Select 'таблица Менделеева .Bookmarks.Add "ТаблицаМенделеева", Selection.Range End With End Sub

Листинг 1.40.

(html, txt)

Здесь, в двух разных документах создаются две закладки. Одна из них связывается с рисунком, вторая с таблицей. Конечно, чаще всего, закладки связываются с текстом, обычно с началом параграфа или определением понятия.

Рассмотрим теперь создание гиперссылок, некоторые из них будут ссылаться на только что созданные закладки:

Листинг 1.41.

(html, txt)

Обратите внимание, метод Add при создании гиперссылок имеет больше параметров, чем при создании закладок. При создании закладки достаточно указать имя закладки и область, с ней связанную. При создании гиперссылки указывается область, связанная с гиперссылкой, точка отправления и точка назначения, заданная двумя параметрами. Параметр Address указывает имя документа, к которому будет осуществлен переход, а параметр SubAddress указывает имя элемента внутри этого документа. Если поле адреса не указано, то переход осуществляется внутри того же документа, где находится точка отправления. Может быть опущено поле, задающее имя элемента, тогда осуществляется переход к самому документу. Одно из этих полей должно быть задано. Именем элемента в документах Word чаще всего выступает имя закладки. В документах Excel, как уже говорилось, в качестве имени элемента может выступать имя, содержащееся в коллекции именNames данного документа, как показано в нашем примере. Заметьте, для двух первых точек отправления, определяющих положение гиперссылки, я выбрал текст, расположенный достаточно глубоко внутри группового объекта TableOfFigures. Сделано это специально, чтобы продемонстрировать некоторые особенности коллекции Hyperlinks документов Word. Взгляните, как выглядит эта часть документа, после установления гиперссылок:


увеличить изображение
Рис. 1.13.  Документ с закладками

Конечно, чаще всего, установление закладок и гиперссылок делается вручную, а вот обработку уже созданных коллекций этих объектов приходится иногда выполнять программно. В следующем примерах я продемонстрирую работу по просмотру и удалению закладок и гиперссылок в процессе диалога с пользователем. Начнем с удаления закладок активного документа. Вот код процедуры, решающей эту задачу:



Public Sub RemoveBookmarks() ' Удаляет по запросу закладки активного документа Dim MyBM As Bookmark Dim Answer As String With ActiveDocument For Each MyBM In .Bookmarks Answer = InputBox(Prompt:="Удалить закладку? " & vbCrLf _ & "Имя закладки - " & MyBM.Name, _ Title:="Удаление закладок", Default:="Да") If Answer = "Да" Then MyBM.Delete

Next MyBM End With End Sub



Листинг 1.42.

(html, txt)

Все делается достаточно естественно, свойствоName позволяет в диалоге указать имя закладки, а метод Delete удалить ее, если получено согласие пользователя. Аналогичная процедура просмотра и удаления гиперссылок выглядит немного сложнее:

Листинг 1.43.

(html, txt)

Как видите, для определения имени объекта, связанного с гиперссылкой, приходится вначале определить тип объекта, в зависимости от которого выбирается способ доступа к имени объекта. Однако главное, на что следует обратить внимание, это то, что коллекция Hyperlinks документа не содержит всех установленных в документе гиперссылок. В частности, в ней не содержатся те гиперссылки, которые я связал с текстами, находящимися внутри группового объекта TableOfFigures и показанными на предыдущем рисунке. Добраться программно до этих гиперссылок конечно можно, но через коллекцию Hyperlinks соответствующего объекта Range.

В следующем примере показано применение метода Follow, позволяющего осуществить переход по ссылке. Процедура позволяет перейти по ссылке в результате диалога с пользователем. Вот ее текст:

Листинг 1.44.

(html, txt)

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

До сих пор в этом параграфе я много говорил о гипертекстовых документах и переходах по гиперссылке. Но хочу напомнить, что переходы внутри документа могут быть организованы и другими средствами. В частности в этой лекции я рассматривал работу с объектом Browser, который позволяет организовать переходы от элемента к элементу уже рассмотренных нами коллекций таблицам, комментариям, страницам, разделам, элементам других коллекций, среди которых есть, конечно же, и закладки. Говоря о роли закладок, следует отметить, что они используются не только для организации гипертекстовых документов. Их роль велика и в документах типа справочников, где приходится осуществлять частый поиск внутри документа. Закладки позволяют создать систему индексов, ускоряя поиск. Всем хорошо знаком этот прием при работе с обычным словарем, когда делаются закладки на каждой из букв алфавита. Я не буду приводить сейчас примера реализации этой идеи.



Public Sub CreateBookmarks() 'Создание закладок 'Создадим закладку в документе DocOne и свяжем ее с рисунком Dim MyPath As String Documents("DocOne").Activate With ActiveDocument MyPath = .Path .InlineShapes(1).Select 'рисунок мышки .Bookmarks.Add "PictureOfMouse", Selection.Range End With 'Создадим закладку в документе ExampleOfTable и свяжем ее с таблицей Documents.Open (MyPath & "\ExampleOfTable") Documents("ExampleOfTable").Activate With ActiveDocument .Tables(1).Select 'таблица Менделеева .Bookmarks.Add "ТаблицаМенделеева", Selection.Range End With End Sub

Листинг 1.40.

Здесь, в двух разных документах создаются две закладки. Одна из них связывается с рисунком, вторая с таблицей. Конечно, чаще всего, закладки связываются с текстом, обычно с началом параграфа или определением понятия.

Рассмотрим теперь создание гиперссылок, некоторые из них будут ссылаться на только что созданные закладки:

Public Sub CreateHyperLinks() 'Создание гиперссылок 'Создадим три гиперссылки в документе DocOne Dim MyPath As String Documents("DocOne").Activate

With ActiveDocument MyPath = .Path 'гиперссылка- элемент группового объекта TableOfFigures 'свяжем ее с закладкой этого же документа .shapes(2).GroupItems(6).TextFrame.TextRange.Select .Hyperlinks.Add Anchor:=Selection.Range, _ Address:="", SubAddress:="PictureOfMouse"

'гиперссылка- элемент группового объекта TableOfFigures 'свяжем ее с закладкой другого документа .shapes(2).GroupItems(7).TextFrame.TextRange.Select .Hyperlinks.Add Anchor:=Selection.Range, _ Address:=MyPath & "\ExampleOfTable.doc", _ SubAddress:="ТаблицаМенделеева", _ ScreenTip:="Переход к документу," _ & " содержащему таблицу Менделеева" 'гиперссылка- объект TableOfFigures 'свяжем ее с URL .shapes(1).Select .Hyperlinks.Add Anchor:=Selection.Range, _ Address:="http://www.microsoft.ru/offext/", _ SubAddress:="", _ ScreenTip:="Переход к Web- странице" _ & " программы Office Extensions" End With 'Создадим гиперсссылку в документе ExampleOfTable 'и свяжем ее с закладкой документа DocOne Documents("ExampleOfTable").Activate With ActiveDocument 'Установка гиперссылки возврата в документ Word DocOne .Tables(1).Select 'таблица Менделеева Selection.MoveDown Selection.Expand .Hyperlinks.Add Anchor:=Selection.Range, _ Address:=MyPath & "\DocOne.doc", _ SubAddress:="PictureOfMouse", _ ScreenTip:="Возврат к документу DocOne" 'Установка гиперссылки перехода 'к именованному элементу документа Excel - BookOne Selection.MoveDown Selection.Expand .Hyperlinks.Add Anchor:=Selection.Range, _ Address:=MyPath & "\BookOne.xls", _ SubAddress:="ТаблицаПродаж", _ ScreenTip:="Переход к элементу" _ & " c именем ТаблицаПродаж документа Excel - BookOne"



End With End Sub

Листинг 1.41.

Обратите внимание, метод Add при создании гиперссылок имеет больше параметров, чем при создании закладок. При создании закладки достаточно указать имя закладки и область, с ней связанную. При создании гиперссылки указывается область, связанная с гиперссылкой, точка отправления и точка назначения, заданная двумя параметрами. Параметр Address указывает имя документа, к которому будет осуществлен переход, а параметр SubAddress указывает имя элемента внутри этого документа. Если поле адреса не указано, то переход осуществляется внутри того же документа, где находится точка отправления. Может быть опущено поле, задающее имя элемента, тогда осуществляется переход к самому документу. Одно из этих полей должно быть задано. Именем элемента в документах Word чаще всего выступает имя закладки. В документах Excel, как уже говорилось, в качестве имени элемента может выступать имя, содержащееся в коллекции именNames данного документа, как показано в нашем примере. Заметьте, для двух первых точек отправления, определяющих положение гиперссылки, я выбрал текст, расположенный достаточно глубоко внутри группового объекта TableOfFigures. Сделано это специально, чтобы продемонстрировать некоторые особенности коллекции Hyperlinks документов Word. Взгляните, как выглядит эта часть документа, после установления гиперссылок:


увеличить изображение
Рис. 1.13.  Документ с закладками

Конечно, чаще всего, установление закладок и гиперссылок делается вручную, а вот обработку уже созданных коллекций этих объектов приходится иногда выполнять программно. В следующем примерах я продемонстрирую работу по просмотру и удалению закладок и гиперссылок в процессе диалога с пользователем. Начнем с удаления закладок активного документа. Вот код процедуры, решающей эту задачу:

Public Sub RemoveBookmarks() ' Удаляет по запросу закладки активного документа Dim MyBM As Bookmark Dim Answer As String With ActiveDocument For Each MyBM In .Bookmarks Answer = InputBox(Prompt:="Удалить закладку? " & vbCrLf _ & "Имя закладки - " & MyBM.Name, _ Title:="Удаление закладок", Default:="Да") If Answer = "Да" Then MyBM.Delete



Next MyBM End With End Sub

Листинг 1.42.

Все делается достаточно естественно, свойствоName позволяет в диалоге указать имя закладки, а метод Delete удалить ее, если получено согласие пользователя. Аналогичная процедура просмотра и удаления гиперссылок выглядит немного сложнее:

Public Sub RemoveHyperlinks() ' Удаляет по запросу гиперссылки активного документа Dim MyHL As Hyperlink Dim Answer As String,NameHL As String With ActiveDocument Debug.Print .Hyperlinks.Count For Each MyHL In .Hyperlinks 'определение объекта, с которым связана гиперссылка If MyHL.Type = msoHyperlinkRange Then NameHL = MyHL.Range.Text Else:NameHL = MyHL.Shape.Name End If Answer = InputBox(Prompt:="Удалить гиперссылку? " & vbCrLf _ & "связана с объектом - " &NameHL & vbCrLf _ & "Имя целевого документа - " & MyHL.Address & vbCrLf _ & "Имя целевого элемента - " & MyHL.SubAddress, _ Title:="Удаление гиперссылок", Default:="Да") If Answer = "Да" Then MyHL.Delete

Next MyHL End With End Sub

Листинг 1.43.

Как видите, для определения имени объекта, связанного с гиперссылкой, приходится вначале определить тип объекта, в зависимости от которого выбирается способ доступа к имени объекта. Однако главное, на что следует обратить внимание, это то, что коллекция Hyperlinks документа не содержит всех установленных в документе гиперссылок. В частности, в ней не содержатся те гиперссылки, которые я связал с текстами, находящимися внутри группового объекта TableOfFigures и показанными на предыдущем рисунке. Добраться программно до этих гиперссылок конечно можно, но через коллекцию Hyperlinks соответствующего объекта Range.

В следующем примере показано применение метода Follow, позволяющего осуществить переход по ссылке. Процедура позволяет перейти по ссылке в результате диалога с пользователем. Вот ее текст:

Public Sub FollowHyperlinks() ' Переход по запросу,следуя гиперссылке активного документа Dim MyHL As Hyperlink Dim Answer As String,NameHL As String With ActiveDocument For Each MyHL In .Hyperlinks 'определение объекта, с которым связана гиперссылка If MyHL.Type = msoHyperlinkRange Then NameHL = MyHL.Range.Text Else:NameHL = MyHL.Shape.Name End If Answer = InputBox(Prompt:="Перейти, следуя гиперссылке? " ;amp; vbCrLf _ & "связана с объектом - " &NameHL & vbCrLf _ & "Имя целевого документа - " & MyHL.Address & vbCrLf _ & "Имя целевого элемента - " & MyHL.SubAddress, _ Title:="Переход по гиперссылке", Default:="Да") If Answer = "Да" Then MyHL.Follow MsgBox ("Продолжаем работать!") Exit For End If



Next MyHL End With End Sub

Листинг 1.44.

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

До сих пор в этом параграфе я много говорил о гипертекстовых документах и переходах по гиперссылке. Но хочу напомнить, что переходы внутри документа могут быть организованы и другими средствами. В частности в этой лекции я рассматривал работу с объектом Browser, который позволяет организовать переходы от элемента к элементу уже рассмотренных нами коллекций таблицам, комментариям, страницам, разделам, элементам других коллекций, среди которых есть, конечно же, и закладки. Говоря о роли закладок, следует отметить, что они используются не только для организации гипертекстовых документов. Их роль велика и в документах типа справочников, где приходится осуществлять частый поиск внутри документа. Закладки позволяют создать систему индексов, ускоряя поиск. Всем хорошо знаком этот прием при работе с обычным словарем, когда делаются закладки на каждой из букв алфавита. Я не буду приводить сейчас примера реализации этой идеи.


Содержание раздела