Vba excel internet explorer методы

Обновлено: 29.06.2024

Web страницу в 1С Предприятии можно запросить разными способами. На встроенном языке 1С есть специальные объекты для работы с Интернетом.

Кроме всех перечисленных выше способов получить web страницу, так же можно с помощью COM объекта "InternetExplorer.Application". Данный объект принадлежит браузеру InternetExplorer в операционной системе Windows. При работе с InternetExplorer.Application можно программно запрашивать страницы и выполнять различные действия с HTML страницами.

Запрос страницы через InternetExplorer.Application

1. Создание объектов

Пример создания OLE-объекта InternetExplorer:

Пример размещения ActivX-объекта WebBrowser на Web-странице:

2. Свойства

3. Методы

3.1. Метод ExecWB

Выполняет команду и возвращает статус выполнения. Доступен в InternetExplorer и WebBrowser.

Возможные значения параметра "CmdExecOpt":

Команда исполняется так, как принято по умолчанию.
1Перед выполнением выводится окно диалога или дополнительных настроек.
2Не запрашивать ввод пользователя (не задается никаких вопросов).
3Выводится справка по запрошенному действию, но сама команда не выполняется.

3.2. Метод QueryStatusWB

Возвращает статус указанной команды. Доступен в InternetExplorer.

1Команда поддерживается.
2Команда доступна и разрешена.
4Команда является переключателем и в данный момент включена.
8Команда зарезервирована для будущего использования.

3.3. Метод ShowBrowserBar

Показывает или скрывает указанную панель обозревателя. Доступен в InternetExplorer.

    vCls > Некоторые возможные значения параметра "vClsID":

Search
Favorites
History
Folders

3.4. Метод Navigate

Осуществляет навигацию к указанному ресурсу (инициирует операцию открытия документа). Доступен в InternetExplorer и WebBrowser.

Возможные значения флагов параметра "Flags":

Возможные значения параметра "TargetFrameName" (кроме собственно имени конкретного фрейма):

_BLANKЗагружать ресурс в новое безымянное окно.
_SELFЗагружать документ в тот же фрейм, в котором находится ссылающийся на него документ.
_PARENTЗагружать документ в непосредственный родительский фрейм этого фрейма в наборе фреймов FRAMESET. Это значение эквивалентно _SELF, если текущий фрейм не имеет родительского фрейма.
_TOPЗагружать документ в полное окно (закрывая все остальные фреймы). Это значение эквивалентно _SELF, если у текущего фрейма нет родительского фрейма.

3.5. Метод Refresh2

Аналогичен методу Refresh, но имеет единственный необязательный параметр, который задаёт "уровень" обновления. Заголовок "pragma:nocashe" запрещает серверу возвращать кэшированную копию документа, обеспечивая самую свежую информацию, однако этот заголовок может послужить причиной проблем на некоторых серверах.

Особенности задачи

Для всего этого вполне подходит любое приложение Microsoft Office. Так, для работы со ссылками или числовыми показателями удобно импортировать информацию из Internet прямо на рабочие листы Excel. Тексты можно записывать в документы Word, компоненты Web Parts генерировать непосредственно из Outlook. А реализовать задуманное, как всегда, поможет VBA. Для этого необходимо научиться программным путем запускать Internet Explorer из приложений Office.

В отличие от других задач связывания различных приложений работа с Internet Explorer имеет ряд особенностей. Общая схема «создать объект Application => открыть документ => выполнить обработку => закрыть документ и приложение» в случае с Internet Explorer неприменима. Для документов Internet Explorer не существует метода Open. Вместо этого используется метод Navigate, который только инициирует операцию открытия документа. Каждый, кто работал с браузерами Internet, не мог не заметить, что эти приложения работают в фоновом режиме, оставляя массу свободного времени для других программ. То же самое происходит и при запуске Internet Explorer из Microsoft Office. Internet Explorer немедленно возвратит управление вызывающему модулю, хотя до окончания загрузки необходимого документа еще далеко. Чтобы не заблокировать систему, необходимо решить задачу синхронизации параллельно работающих приложений. Обычно для этой цели в VBA используется таймер в сочетании с функцией DoEvents, передающей управление операционной системе для обработки событий и выполнения других программ. В языке VB подобные действия проще выполнить с помощью функции Sleep.

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

В описываемом примере используются две самые распространенные библиотеки, обычно расположенные в папке C:WINDOWSSYSTEM, а именно: Microsoft Internet Controls (SHDOCVW.DLL) и Microsoft HTML Object Library (MSHTML.DLL). Для того чтобы описанные ниже процедуры выполнялись, необходимо в проекте VBA отметить применение указанных библиотек. Это достигается с помощью команды «Сервис. Ссылки…», выбираемой в меню редактора VBA.

Обращение к Internet Explorer

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

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

При открытии Internet Explorer устанавливаются два свойства: Silent и Visible. Свойство Silent разрешает или запрещает диалоговое общение Internet Explorer с пользователем, а свойство Visible определяет видимость окна Internet Explorer на экране дисплея. По умолчанию Internet Explorer запускается невидимым.

Вторая процедура выполняет прямо противоположные действия. Internet Explorer закрывается с помощью метода Quit, объектная переменная освобождается, и флаг открытого состояния сбрасывается:

Третья процедура выполняет более содержательную работу — инициирует поиск и загрузку необходимой Web-страницы. Как уже отмечалось выше, загрузка страницы только «заказывается», а что произойдет в действительности — зависит от состояния компонентов сети. На всякий случай «заказанный» URL (Uniform Resource Locator — стандартизованная строка символов, указывающая местонахождение документа в Internet) страницы запоминается в глобальной переменной. Это позволит в дальнейшем проверить, та ли страница открыта. Обратите внимание на параметры, которые передаются процедуре обработки события DocumentComplete. Один из этих параметров — URL открытой страницы. Именно его следует сравнивать с исходным значением. Здесь, как говорится, возможны варианты. Причина несоответствия URL заключается не только в отсутствии нужной страницы или отказе сервера. Проблемы возникают и при открытии страниц с фреймами. Так, например, если необходимая страница содержит три фрейма, то состояние DocumentComplete возникает целых семь раз: три раза с пустым значением URL в процессе разметки, три раза со значением URL страниц, загружаемых во фреймы, и наконец, со значением URL страницы, указанной при вызове метода Navigate.

Обработка HTML-документа

Все рассмотренные выше процедуры имеют общий характер и могут использоваться в разных приложениях в неизменном виде. Обработка загруженной Web-страницы зависит от конкретных потребностей. Ниже будут показаны только начальные возможности. Прежде всего следует уяснить, что введенный объект Internet Explorer построен на основе объектной модели Microsoft Internet Controls, которая не содержит каких-либо средств доступа непосредственно к содержимому документа. Свойство InternetExplorer.Document предоставляет только ссылку на некий обобщенный объект, не имеющий собственных свойств и методов. Очевидно, это сделано потому, что компонент Microsoft Internet Controls предназначен для реализации различных протоколов Internet, а не для работы с документами. Поэтому первое, что необходимо сделать, это обеспечить процедуру обработки необходимой объектной моделью документа.

Раз уж речь зашла о Web-страницах, то в качестве объектной модели следует использовать Microsoft HTML Object Library, то есть именно ту среду, с которой оперируют скрипты на языках JavaScript и VBScript, создаваемые Web-программистами.

В нашем случае процедура обработки документа вызывается обработчиком события DocumentComplete из модуля класса Internet Explorer With Events. Это означает, что некий документ полностью загружен и самое время создавать нужный объект. Создание объекта выполняется традиционно. Используются описание объектной переменной класса HTMLDocument и инструкция Set, присваивающая объектной переменной ссылку на объект, адресуемый свойством Document объекта Internet Explorer. Все остальные объявления зависят от конкретного применения процедуры. В приведенном ниже примере дополнительно описана объектная переменная класса HTMLLinkElement, обеспечивающая доступ к семейству гиперссылок. В начале процедуры выполняется сравнение URL (необходимость которого была обоснована выше):

В рассмотренной процедуре обработки документа выполняется хорошо знакомая всем офисным программистам конструкция For Each… Next. С помощью этой конструкции осуществляется просмотр всего множества ссылок в документе с целью выделения и печати ссылок с полным URL. Нечто подобное можно использовать и при анализе страниц порталов и поисковых систем.

После цикла обработки ссылок помещены два оператора, печатающие различные представления документа в целом. Аналогичные свойства можно использовать для разбора как текста, так и HTML-кода, с помощью собственного алгоритма.

Реализация процесса

Представленные выше четыре процедуры составляют основу механизма взаимодействия проекта Office с Internet Explorer. Эти процедуры открывают приложение Internet Explorer, запускают процесс навигации, обрабатывают полученный результат и закрывают приложение. При этом процессы навигации и обработки могут повторяться многократно — сообразно интересам пользователя. Список URL открываемых страниц можно задавать заранее или формировать динамически, основываясь на анализе данных, полученных при обработке предшествующих страниц. Можно даже определенным образом повторить работу таких приложений, как Teleport Pro, скачивающих из сети целые сайты.

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

Если попытаться сформулировать требования к монитору, то получится, что эта программа должна обеспечивать следующие функции:

  • открывать и закрывать Internet Explorer, в том числе и по желанию пользователя;
  • хранить и обновлять список URL, запланированных для обработки;
  • хронометрировать продолжительность загрузки отдельной страницы и всего сеанса работы с Internet;
  • запускать очередной процесс навигации как после завершения обработки очередной страницы, так и по истечении заданного лимита времени;
  • переключать режим визуального отображения окна Internet Explorer;
  • отображать состояние процесса загрузки очередной страницы.

К этим требованием можно добавить и ведение протокола процесса, если, конечно, процедуры обработки не предусматривают вывод результатов непосредственно в открытые документы Office.

Совершенно очевидно, что для удовлетворения всех требований вполне подходит форма VBA c обычными элементами управления, оснащенная таймером. Пример такой формы приведен на рисунке.

Список URL хранится в элементе управления ListBox, что позволяет управлять им проще, чем в случае использования динамических массивов. Элементы управления CheckBox напрямую связаны с соответствующими свойствами объекта InternetExplorer. Запуск и остановка процесса выполняются с помощью командных кнопок. Время и состояние отображаются в обычных окнах TextBox. При этом номер шага и общее количество шагов берутся непосредственно из свойств ListIndex и ListCount списка URL. Наглядности ради продолжительность загрузки страницы изображается в виде имитации элемента ProgressBar.

Что же касается состояния процесса загрузки, то здесь необходимо дать некоторые пояснения. Объект InternetExplorer имеет очень полезное для контроля состояния свойство — readyState. Это свойство принимает пять значений: от 0 до 4. Значение 4 соответствует состоянию Complete, переход в которое в нашем примере осуществляется посредством прерывания и вызова процедуры обработки. Отображая значения указанного свойства в окне состояния, можно прекрасно ориентироваться в происходящем «за кадром».

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

Как видно из приведенного текста, переход к очередному этапу осуществляется с помощью булевой переменной blnDone, которая принимает значение ИСТИНА в случае исчерпания времени ожидания или появления значения свойства readyState = READYSTATE_COMPLETE. Поскольку прерывание от таймера наступает позже, чем событие DocumentComplete (предполагаем, что наша машина — однопроцессорная), то переход в это состояние означает, что обработка страницы уже завершена.

Справедливости ради следует отметить, что в ряде случаев обработку страницы можно начинать и при readyState = READYSTATE_INTERACTIVE. Это то самое состояние, когда Internet Explorer позволяет просматривать страницу в интерактивном режиме, хотя еще не все компоненты загружены. Начиная с этого момента HTML-код вполне пригоден для обработки. Если для решения задач пользователя кода HTML достаточно, то процесс можно несколько ускорить, поместив вызов обработчика страниц в приведенную выше процедуру в конструкцию Select Case для состояний READYSTATE_INTERACTIVE и READYSTATE_COMPLETE. В этом случае событие DocumentComplete нужно заблокировать. Для того чтобы совсем минимизировать время загрузки, необходимо использовать пару событий: NavigateComplete2 и DownloadComplete. Событие NavgateComplete2 возникает, когда документ объявляется найденным и его URL попадает в стек навигации и становится доступным для проверки. Событие DounloadComplete, не имеющее параметров вызова, возникает неоднократно — перед событием NavigateComplete2 и после него. Именно наступление события DounloadComplete вслед за событием NavigateComplete2 соответствует переходу в состояние READYSTATE_INTERACTIVE и может использоваться для вызова процедуры обработки кода Web-страницы.

Надеюсь, что приведенные примеры послужат хорошим подспорьем для разработчиков офисных приложений и стимулируют создание интересных проектов, использующих неисчерпаемый источник информации — Internet.

Его интеграция с Windows позволяет несколькими удивительными способами управлять Internet Explorer, используя сценарий Visual Basic для приложений (VBA) из любого приложения, которое его поддерживает, например Word, Outlook или Excel.

За прошедшие годы мы показали вам, как делать действительно классные вещи с VBA. Например, вы можете использовать его для отправки электронных писем непосредственно из Excel

, вы можете автоматически экспортировать задачи Outlook в электронную таблицу Excel

и вы даже можете создать свой собственный интернет-браузер

В этом случае вы собираетесь подключить Excel с IE. Почему IE? Поскольку Internet Explorer настолько хорошо интегрирован с операционной системой, что вам не нужно много делать, чтобы начать использовать автоматизацию IE в VBA в других продуктах Microsoft, таких как Word или Excel. В этом вся прелесть. В этой статье вы увидите, как работает эта автоматизация, а в следующей статье вы узнаете, как сделать то же самое с другими браузерами.

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

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

Автоматизация Internet Explorer с помощью VBA

IE-automation1

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

Спаси URLs

Затем перейдите в меню «Сервис» в верхней части редактора VBA, нажмите «Ссылки» в меню и прокрутите длинный список, чтобы найти ссылку «Microsoft Internet Controls». Установите флажок слева от него и нажмите кнопку ОК.

IE-automation3

Теперь вы готовы к работе. В текстовой области редактора вы должны увидеть строку «Private Sub cmdSaveURLs_Click ()». Если вы его не видите, щелкните левое раскрывающееся поле над текстовой областью и найдите cmdSaveURLs в списке. Выберите его, и он создаст функцию Click () для вас.

Это код, который вы хотите вставить в эту функцию:

Ссылка Microsoft Scripting Runtime позволяет вам получить доступ к объекту ShellWindows, который позволяет вам перебирать Windows и находить экземпляры IE, которые у вас открыты. Этот скрипт найдет все открытые вами URL-адреса и запишет их в электронную таблицу Excel.

IE-automation4

IE-automation5

С новым скриптом Excel просто нажмите кнопку «Загрузить URL-адреса», и он загрузится прямо в электронную таблицу.

IE-automation6

Одно предостережение. Если вы не используете строку заголовка, то вы захотите изменить строку «intRowPosition = 2» на «intRowPosition = 1», и она будет начинаться с первой строки, а не пропускать строку заголовка.

Открытие сохраненной рабочей области браузера

Здесь есть несколько шагов, но, как вы видите, код не такой длинный и сложный. Вы создаете новый экземпляр IE, делаете его видимым (это откроет IE без загрузки URL). Затем он загрузит первый URL в списке.

IE-automation8

Часть скрипта «Пока IE.Busy» ждет, пока страница не загрузится полностью, а затем переходит к остальным URL-адресам в вашей электронной таблице, открывая новую вкладку (это то, что делает «CLng (2048)», пока он попадает в пустую ячейку вашей электронной таблицы, затем он прекращает открывать новые вкладки.Это мой браузер IE со всеми четырьмя исходными вкладками, восстановленными с помощью сценария автоматизации Excel IE.

IE-automation9

Резюме

Используете ли вы какой-либо вид автоматизации IE в своих приложениях VBA? Видите какие-нибудь другие интересные варианты использования такого элемента управления IE из Excel? Поделитесь своими мыслями и отзывами в разделе комментариев ниже!

Web страницу в 1С Предприятии можно запросить разными способами. На встроенном языке 1С есть специальные объекты для работы с Интернетом.

Кроме всех перечисленных выше способов получить web страницу, так же можно с помощью COM объекта "InternetExplorer.Application". Данный объект принадлежит браузеру InternetExplorer в операционной системе Windows. При работе с InternetExplorer.Application можно программно запрашивать страницы и выполнять различные действия с HTML страницами.

Запрос страницы через InternetExplorer.Application

1. Создание объектов

Пример создания OLE-объекта InternetExplorer:

Пример размещения ActivX-объекта WebBrowser на Web-странице:

2. Свойства

3. Методы

3.1. Метод ExecWB

Выполняет команду и возвращает статус выполнения. Доступен в InternetExplorer и WebBrowser.

Возможные значения параметра "CmdExecOpt":

Команда исполняется так, как принято по умолчанию.
1Перед выполнением выводится окно диалога или дополнительных настроек.
2Не запрашивать ввод пользователя (не задается никаких вопросов).
3Выводится справка по запрошенному действию, но сама команда не выполняется.

3.2. Метод QueryStatusWB

Возвращает статус указанной команды. Доступен в InternetExplorer.

1Команда поддерживается.
2Команда доступна и разрешена.
4Команда является переключателем и в данный момент включена.
8Команда зарезервирована для будущего использования.

3.3. Метод ShowBrowserBar

Показывает или скрывает указанную панель обозревателя. Доступен в InternetExplorer.

    vCls > Некоторые возможные значения параметра "vClsID":

Search
Favorites
History
Folders

3.4. Метод Navigate

Осуществляет навигацию к указанному ресурсу (инициирует операцию открытия документа). Доступен в InternetExplorer и WebBrowser.

Возможные значения флагов параметра "Flags":

Возможные значения параметра "TargetFrameName" (кроме собственно имени конкретного фрейма):

_BLANKЗагружать ресурс в новое безымянное окно.
_SELFЗагружать документ в тот же фрейм, в котором находится ссылающийся на него документ.
_PARENTЗагружать документ в непосредственный родительский фрейм этого фрейма в наборе фреймов FRAMESET. Это значение эквивалентно _SELF, если текущий фрейм не имеет родительского фрейма.
_TOPЗагружать документ в полное окно (закрывая все остальные фреймы). Это значение эквивалентно _SELF, если у текущего фрейма нет родительского фрейма.

3.5. Метод Refresh2

Аналогичен методу Refresh, но имеет единственный необязательный параметр, который задаёт "уровень" обновления. Заголовок "pragma:nocashe" запрещает серверу возвращать кэшированную копию документа, обеспечивая самую свежую информацию, однако этот заголовок может послужить причиной проблем на некоторых серверах.

Особенности задачи

Для всего этого вполне подходит любое приложение Microsoft Office. Так, для работы со ссылками или числовыми показателями удобно импортировать информацию из Internet прямо на рабочие листы Excel. Тексты можно записывать в документы Word, компоненты Web Parts генерировать непосредственно из Outlook. А реализовать задуманное, как всегда, поможет VBA. Для этого необходимо научиться программным путем запускать Internet Explorer из приложений Office.

В отличие от других задач связывания различных приложений работа с Internet Explorer имеет ряд особенностей. Общая схема «создать объект Application => открыть документ => выполнить обработку => закрыть документ и приложение» в случае с Internet Explorer неприменима. Для документов Internet Explorer не существует метода Open. Вместо этого используется метод Navigate, который только инициирует операцию открытия документа. Каждый, кто работал с браузерами Internet, не мог не заметить, что эти приложения работают в фоновом режиме, оставляя массу свободного времени для других программ. То же самое происходит и при запуске Internet Explorer из Microsoft Office. Internet Explorer немедленно возвратит управление вызывающему модулю, хотя до окончания загрузки необходимого документа еще далеко. Чтобы не заблокировать систему, необходимо решить задачу синхронизации параллельно работающих приложений. Обычно для этой цели в VBA используется таймер в сочетании с функцией DoEvents, передающей управление операционной системе для обработки событий и выполнения других программ. В языке VB подобные действия проще выполнить с помощью функции Sleep.

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

В описываемом примере используются две самые распространенные библиотеки, обычно расположенные в папке C:WINDOWSSYSTEM, а именно: Microsoft Internet Controls (SHDOCVW.DLL) и Microsoft HTML Object Library (MSHTML.DLL). Для того чтобы описанные ниже процедуры выполнялись, необходимо в проекте VBA отметить применение указанных библиотек. Это достигается с помощью команды «Сервис. Ссылки…», выбираемой в меню редактора VBA.

Обращение к Internet Explorer

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

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

При открытии Internet Explorer устанавливаются два свойства: Silent и Visible. Свойство Silent разрешает или запрещает диалоговое общение Internet Explorer с пользователем, а свойство Visible определяет видимость окна Internet Explorer на экране дисплея. По умолчанию Internet Explorer запускается невидимым.

Вторая процедура выполняет прямо противоположные действия. Internet Explorer закрывается с помощью метода Quit, объектная переменная освобождается, и флаг открытого состояния сбрасывается:

Третья процедура выполняет более содержательную работу — инициирует поиск и загрузку необходимой Web-страницы. Как уже отмечалось выше, загрузка страницы только «заказывается», а что произойдет в действительности — зависит от состояния компонентов сети. На всякий случай «заказанный» URL (Uniform Resource Locator — стандартизованная строка символов, указывающая местонахождение документа в Internet) страницы запоминается в глобальной переменной. Это позволит в дальнейшем проверить, та ли страница открыта. Обратите внимание на параметры, которые передаются процедуре обработки события DocumentComplete. Один из этих параметров — URL открытой страницы. Именно его следует сравнивать с исходным значением. Здесь, как говорится, возможны варианты. Причина несоответствия URL заключается не только в отсутствии нужной страницы или отказе сервера. Проблемы возникают и при открытии страниц с фреймами. Так, например, если необходимая страница содержит три фрейма, то состояние DocumentComplete возникает целых семь раз: три раза с пустым значением URL в процессе разметки, три раза со значением URL страниц, загружаемых во фреймы, и наконец, со значением URL страницы, указанной при вызове метода Navigate.

Обработка HTML-документа

Все рассмотренные выше процедуры имеют общий характер и могут использоваться в разных приложениях в неизменном виде. Обработка загруженной Web-страницы зависит от конкретных потребностей. Ниже будут показаны только начальные возможности. Прежде всего следует уяснить, что введенный объект Internet Explorer построен на основе объектной модели Microsoft Internet Controls, которая не содержит каких-либо средств доступа непосредственно к содержимому документа. Свойство InternetExplorer.Document предоставляет только ссылку на некий обобщенный объект, не имеющий собственных свойств и методов. Очевидно, это сделано потому, что компонент Microsoft Internet Controls предназначен для реализации различных протоколов Internet, а не для работы с документами. Поэтому первое, что необходимо сделать, это обеспечить процедуру обработки необходимой объектной моделью документа.

Раз уж речь зашла о Web-страницах, то в качестве объектной модели следует использовать Microsoft HTML Object Library, то есть именно ту среду, с которой оперируют скрипты на языках JavaScript и VBScript, создаваемые Web-программистами.

В нашем случае процедура обработки документа вызывается обработчиком события DocumentComplete из модуля класса Internet Explorer With Events. Это означает, что некий документ полностью загружен и самое время создавать нужный объект. Создание объекта выполняется традиционно. Используются описание объектной переменной класса HTMLDocument и инструкция Set, присваивающая объектной переменной ссылку на объект, адресуемый свойством Document объекта Internet Explorer. Все остальные объявления зависят от конкретного применения процедуры. В приведенном ниже примере дополнительно описана объектная переменная класса HTMLLinkElement, обеспечивающая доступ к семейству гиперссылок. В начале процедуры выполняется сравнение URL (необходимость которого была обоснована выше):

В рассмотренной процедуре обработки документа выполняется хорошо знакомая всем офисным программистам конструкция For Each… Next. С помощью этой конструкции осуществляется просмотр всего множества ссылок в документе с целью выделения и печати ссылок с полным URL. Нечто подобное можно использовать и при анализе страниц порталов и поисковых систем.

После цикла обработки ссылок помещены два оператора, печатающие различные представления документа в целом. Аналогичные свойства можно использовать для разбора как текста, так и HTML-кода, с помощью собственного алгоритма.

Реализация процесса

Представленные выше четыре процедуры составляют основу механизма взаимодействия проекта Office с Internet Explorer. Эти процедуры открывают приложение Internet Explorer, запускают процесс навигации, обрабатывают полученный результат и закрывают приложение. При этом процессы навигации и обработки могут повторяться многократно — сообразно интересам пользователя. Список URL открываемых страниц можно задавать заранее или формировать динамически, основываясь на анализе данных, полученных при обработке предшествующих страниц. Можно даже определенным образом повторить работу таких приложений, как Teleport Pro, скачивающих из сети целые сайты.

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

Если попытаться сформулировать требования к монитору, то получится, что эта программа должна обеспечивать следующие функции:

  • открывать и закрывать Internet Explorer, в том числе и по желанию пользователя;
  • хранить и обновлять список URL, запланированных для обработки;
  • хронометрировать продолжительность загрузки отдельной страницы и всего сеанса работы с Internet;
  • запускать очередной процесс навигации как после завершения обработки очередной страницы, так и по истечении заданного лимита времени;
  • переключать режим визуального отображения окна Internet Explorer;
  • отображать состояние процесса загрузки очередной страницы.

К этим требованием можно добавить и ведение протокола процесса, если, конечно, процедуры обработки не предусматривают вывод результатов непосредственно в открытые документы Office.

Совершенно очевидно, что для удовлетворения всех требований вполне подходит форма VBA c обычными элементами управления, оснащенная таймером. Пример такой формы приведен на рисунке.

Список URL хранится в элементе управления ListBox, что позволяет управлять им проще, чем в случае использования динамических массивов. Элементы управления CheckBox напрямую связаны с соответствующими свойствами объекта InternetExplorer. Запуск и остановка процесса выполняются с помощью командных кнопок. Время и состояние отображаются в обычных окнах TextBox. При этом номер шага и общее количество шагов берутся непосредственно из свойств ListIndex и ListCount списка URL. Наглядности ради продолжительность загрузки страницы изображается в виде имитации элемента ProgressBar.

Что же касается состояния процесса загрузки, то здесь необходимо дать некоторые пояснения. Объект InternetExplorer имеет очень полезное для контроля состояния свойство — readyState. Это свойство принимает пять значений: от 0 до 4. Значение 4 соответствует состоянию Complete, переход в которое в нашем примере осуществляется посредством прерывания и вызова процедуры обработки. Отображая значения указанного свойства в окне состояния, можно прекрасно ориентироваться в происходящем «за кадром».

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

Как видно из приведенного текста, переход к очередному этапу осуществляется с помощью булевой переменной blnDone, которая принимает значение ИСТИНА в случае исчерпания времени ожидания или появления значения свойства readyState = READYSTATE_COMPLETE. Поскольку прерывание от таймера наступает позже, чем событие DocumentComplete (предполагаем, что наша машина — однопроцессорная), то переход в это состояние означает, что обработка страницы уже завершена.

Справедливости ради следует отметить, что в ряде случаев обработку страницы можно начинать и при readyState = READYSTATE_INTERACTIVE. Это то самое состояние, когда Internet Explorer позволяет просматривать страницу в интерактивном режиме, хотя еще не все компоненты загружены. Начиная с этого момента HTML-код вполне пригоден для обработки. Если для решения задач пользователя кода HTML достаточно, то процесс можно несколько ускорить, поместив вызов обработчика страниц в приведенную выше процедуру в конструкцию Select Case для состояний READYSTATE_INTERACTIVE и READYSTATE_COMPLETE. В этом случае событие DocumentComplete нужно заблокировать. Для того чтобы совсем минимизировать время загрузки, необходимо использовать пару событий: NavigateComplete2 и DownloadComplete. Событие NavgateComplete2 возникает, когда документ объявляется найденным и его URL попадает в стек навигации и становится доступным для проверки. Событие DounloadComplete, не имеющее параметров вызова, возникает неоднократно — перед событием NavigateComplete2 и после него. Именно наступление события DounloadComplete вслед за событием NavigateComplete2 соответствует переходу в состояние READYSTATE_INTERACTIVE и может использоваться для вызова процедуры обработки кода Web-страницы.

Надеюсь, что приведенные примеры послужат хорошим подспорьем для разработчиков офисных приложений и стимулируют создание интересных проектов, использующих неисчерпаемый источник информации — Internet.

Сводка

В этой статье показано, как перейти к существующему документу Office и отобразить его в форме Visual Basic с помощью элемента управления WebBrowser.

Дополнительные сведения

Документы ActiveX — это внедряемые объекты OLE, которые ведут себя иначе, чем элементы управления ActiveX, чем традиционные объекты OLE. В отличие от традиционного внедренного объекта, документ ActiveX не предназначен для вложенного объекта в более крупном документе. Вместо этого он считается полным документом, который просто просматривается (например, с помощью Microsoft Internet Explorer), или собираются в отдельном ресурсе с другими документами (например, с помощью файла подшивки Microsoft Office). Документ ActiveX, размещенный в элементе управления WebBrowser, всегда активен; Таким образом, в отличие от традиционных внедренных объектов OLE, нет смысла на активацию на месте.

Создание приложения Visual Basic, открывающего документы Office

Если для создания приложения Visual Basic, открывающего документы Office, используется два метода, необходимо изменить код в Visual Studio 2005. По умолчанию Visual Basic добавляет одну форму в проект при создании проекта Windows Forms. Форма называется Form1. Два файла, представляющие форму, называются Form1. vb и Form1. Designer. vb. Вы пишете код в файле Form1. vb. В файле Form1. Designer. vb конструктор Windows Forms записывает код, который реализует все действия, выполненные путем перетаскивания элементов управления с панели инструментов.

Способ 1

Note (Примечание ) В Visual Studio 2005 вам не нужно выполнять шаг 2.

С помощью панели элементов добавьте в форму Form1 элемент управления WebBrowser, элемент управления OpenFileDialog и элемент управления "Кнопка". На этом этапе в класс Form1 добавляется переменная члена AxWebBrowser1, переменная члена OpenFileDialog1 и переменная члена Button1.

Определите частный член в классе Form1 следующим образом.

Вставьте следующий код в класс Form1.

Способ 2

Добавьте экземпляр элемента управления WebBrowser, элемент управления CommonDialog и CommandButton в форму Form1.

Затем добавьте следующий код в окно кода для Form1:

Рекомендации по использованию элемента управления WebBrowser

При использовании элемента управления WebBrowser следует учитывать следующее:

Элемент управления WebBrowser выполняет асинхронный просмотр документов. При вызове WebBrowser1. Navigate вызов возвращает управление приложению Visual Basic до того, как документ будет полностью загружен. Если вы планируете автоматизировать документ, необходимо использовать событие NavigateComplete2, чтобы получать уведомления о завершении загрузки документа. Используйте свойство Document объекта WebBrowser, передаваемое для получения ссылки на объект документа Office, который в предыдущем коде имеет значение Одокумент.

Элемент управления WebBrowser не поддерживает слияние меню.

Как правило, элемент управления WebBrowser скрывает все закрепленные панели инструментов перед отображением документа Office. С помощью автоматизации можно отобразить плавающую панель инструментов с помощью следующего кода.

В более новых версиях Internet Explorer (5,0 и более поздних версий) также можно отобразить закрепленные панели инструментов с помощью следующего кода.

Существует несколько известных проблем, связанных с наличием нескольких элементов управления WebBrowser в проекте, которые загружаются с одним и тем же типом документа Office (то есть с документами Word или всеми таблицами Excel). Рекомендуется использовать только один элемент управления для каждого проекта и просматривать по одному документу за раз.

Чаще всего проблема связана с панелями команд Office, которые отключены. Если в одной и той же форме есть два элемента управления WebBrowser, которые загружаются с документами Word, а панели инструментов отображаются с помощью одного из описанных выше методов, только один набор панелей инструментов является активным и работает правильно. Другой отключен и не может использоваться.

Чтобы очистить браузер текущего содержимого, в диалоговом окне событие Click другой кнопки (или в другом подходящем месте кода) перейдите к пустой странице по умолчанию, используя следующий код:

Рекомендации по использованию элемента управления WebBrowser вместе с программой Microsoft Office 2007

По умолчанию приложения Office 2007 не открывают документы Office в веб-браузере. Такое поведение также влияет на элемент управления WebBrowser. Рекомендуется использовать настраиваемый контейнер документов ActiveX вместо элемента управления WebBrowser при разработке приложений, которые открывают документы Office для 2007.

Для существующих приложений, для которых требуется обратная совместимость с элементом управления WebBrowser, можно изменить реестр для настройки Internet Explorer. С помощью этого метода можно настроить Internet Explorer для открытия документа Office 2007 в веб-браузере. Чтобы получить дополнительные сведения, щелкните следующий номер статьи базы знаний Майкрософт:

927009 новое окно, которое открывается при попытке просмотреть документ 2007 Office в Windows Internet Explorer 7

Note (Примечание ) Изменение реестра с помощью метода, описанного в статье базы знаний 927009, влияет на элемент управления WebBrowser, который используется в приложении. Изменения также влияют на все экземпляры Internet Explorer. Кроме того, этот метод может не работать в будущих версиях наборов Microsoft Office. Поэтому мы рекомендуем использовать этот метод только для обеспечения совместимости с существующим приложением.

Ссылки

Для получения дополнительных сведений об использовании элемента управления WebBrowser щелкните следующий номер статьи базы знаний Майкрософт:

927009 новое окно, которое открывается при попытке просмотреть документ 2007 Office в Windows Internet Explorer 7

Читайте также: