Программная работа с документами Word
Работа с текстовыми базами данных
Теперь, когда есть Access и FoxPro, Oracle и SQL Server говорить о текстовых базах данных просто неприлично. Тем не менее, возьму на себя смелость заявить, что и текстовые базы данных будут жить еще очень долго, в том числе и в электронной форме. Кто из нас не пользуется различными справочниками и словарями? Текстовая форма представления таких документов привычна для человека. Поэтому я решил в качестве более сложного примера работы с текстовым документом привести задачу работы с некоторым справочником.
Замечу, что хотя Word и не предназначен для решения подобных задач, в нем есть достаточно средств, используя которые программист может организовать выполнение всех функций, необходимых при работе с тем или иным справочником, словарем, той или иной текстовой базой данных, содержащей, например, информацию о сотрудниках предприятия или магазинах Москвы. О многих способах и объектах, задающих структуризацию текста, я уже говорил. Напомню, всегда есть возможность работы с объектами, задающими коллекции разделов, абзацев, предложений и слов. Добавлю к этому, что структуризация текста задается и за счет использования различных стилей, что широко может использоваться в работе с текстовыми базами данных. Нельзя не упомянуть и коллекцию закладок, специально предназначенных для быстрого поиска нужного фрагмента в текстовом документе. Есть в Word и другие средства, предназначенные для поиска, выделения и вставки фрагментов текста в документ. А что еще нужно при работе со справочником или словарем?
Справочник "Кто есть кто" в компьютерном мире
Задачей, которую собираюсь сейчас привести, я занимался пару лет назад. Известная фирма Dator ежегодно публиковала справочники "Кто есть кто" в компьютерном бизнесе. Готовился к изданию и электронный вариант этого справочника, а я предложил написать к этому варианту макрос, позволяющий пользователям выбрать из этой базы данных интересующих его персон и добавить их в папку "Контакты" приложения Outlook. Электронный вариант справочника так и не появился, и кнопка, преобразующая текстовую базу данных в контакты, так и не увидела свет. И хотя справочник, с которым я работал в то время, теперь уже устарел, но сама по себе задача, на мой взгляд, нисколько не устарела. Я с удовлетворением обнаружил, что, написанная для Office 97 программа прекрасно работает и в среде Office 2000, с удовольствием привожу ее в данной книге. В данном примере не рассматриваются классические задачи работы с электронным справочником по поиску, добавлению или удалению записей справочника, я занимаюсь экзотической, но не менее интересной задачей преобразования текстовой базы данных справочника "Кто есть кто" в базу данных приложения Outlook.
Преобразование данных справочника "Кто есть кто" в контакты Outlook
Приведу точную постановку задачи. Дан справочник персон. Необходимо дать возможность пользователю выбрать из общего списка интересующих его персон, всю возможную информацию о них перенести в базу данных приложения Outlook, в его папку "Контакты". Попутно для каждого из введенных контактов создать ежегодно повторяющееся событие с выдачей своевременного предупреждения о дне рождения контакта. Как видите, задача осложняется тем, что нам придется иметь дело не только с одним приложением Word, необходимо будет обеспечить взаимодействие с приложением Outlook, программно работать с его объектами. Но я предупреждал, что последний пример будет более сложным. Несмотря на то, что объекты Outlook еще не описаны, пример работы с такими объектами, мне кажется, представляет интерес и в данном месте. Что касается первой части этой задачи, собственно работы с документом Word, представляющим справочник, то хотелось бы отметить, что эта задача в тех или иных вариациях возникает при работе со многими подобными документами. Например, из справочника, задающего список товаров, необходимо выбрать нужные товары и сформировать заказ на их покупку.
Структура справочника "Кто есть кто", подготовленного фирмой Dator
Еще раз скажу, что в этой задаче я работал с вполне конкретным справочником, созданным не мной, а подготовленным фирмой Dator. Справочник этот опубликован, если не ошибаюсь, в 1998 году. Так что мне пришлось обрабатывать вполне реальную информацию, подготовленную для этого справочника самими персонами, фамилии которых вошли в справочник. Понятно, что эти персоны, будучи выдающимися личностями, не всегда выдерживали требования к структуре представляемой ими информации, что придавало прелесть программе, обрабатывающей эту информацию.
Данный справочник представляет организованную в алфавитном порядке совокупность записей о личностях российского компьютерного бизнеса. Чтобы придать структуру справочнику, использовались три стандартных способа структуризации текста. Скажу о них еще раз:
- Прежде всего, используется синтаксическая структура документа Word. Известно, что текст любого документа Word структурирован, - в документе можно выделить поддокументы, разделы, абзацы, предложения, слова.
- Другой общий способ структуризации состоит в разделении текста на части, главы, параграфы, подпараграфы за счет введения стилей и, прежде всего, заголовков соответствующего уровня. Очень часто создается специальная совокупность стилей для придания нужной структуры текстовому документу.
- Третий способ организации данных справочника состоит в использовании специальных ключевых слов для выделения тех или иных разделов и приданию документу тем самым нужной структуры.
В данном конкретном справочнике применяется все три способа структуризации. Начало каждой записи выделяется соответствующим стилем, именованным "Заголовок2". Этот заголовок содержит фамилию и, как правило, имя и отчество личности, включенной в справочник.
Записи справочника содержат определенные поля:
- Должность,
- Дату рождения,
- Адрес,
- Адрес электронной почты,
- Телефон,
- Факс,
- Увлечения,
- Разное.
Некоторые из этих полей обязательны и имеют фиксированное расположение. Так поле "Должность" занимает отдельный абзац, следующий непосредственно за заголовком. Положение остальных полей произвольно, они расположены, как правило, в отдельных абзацах и выделяются ключевыми словами, такими как "адрес", "e-mail" и другими. Абзацы позволяют найти очередное поле, а ключевые слова позволяют определить тип этого поля.
Заметьте, текстовые базы данных предъявляют значительно меньшие требования к структуре информации, чем любые классические системы баз данных. Как видите, длина записи произвольна, запись может содержать разное число абзацев. Некоторые поля могут отсутствовать в записях, порядок следования полей может быть произвольным. О других нарушениях структуры записи я еще расскажу по ходу дела. Система работы с записями в текстовых базах данных может справиться со многими подобными нарушениями структуры, лучше, чем многие специальные базы данных, в этом достоинство таких систем. Чтобы лучше представлять структуру справочника, приведу несколько первых записей этого справочника:
АГАМИРЗЯН Игорь Рубенович
ЗАО "Майкрософт", руководитель отдела.
Отвечает за проектную работу с крупными заказчиками.
Родился 21 марта 1957 года в Ленинграде. В 1979 году окончил мехмат ЛГУ, до 1992 года работал в АН СССР, одновременно до 1995 года преподавал в СПб Техническом университете, кандидат физико-математических наук, старший научный сотрудник, доцент. В 1991 году принял участие в создании компании "АстроСофт" и до 1995 года являлся техническим директором этой компании.
В 1993 году начал сотрудничать с Microsoft, с 1995 года является штатным сотрудником Microsoft Consulting Services. В 1996 году возглавляет российское отделение MCS. Имеет статус "Microsoft Certified Systems Engineer". Неоднократно попадал в различные опросы и рейтинги, в том числе в Дейтор top100 '94, "Кто есть кто в компьютерном мире Петербурга" 95 и 96 года. С 1993 года входит в Marquis "Who's Who in Science and Engineering" и "Who's Who in the World".
Старается совмещать работу техническую с организационной, и значительное время проводит с крупными российскими заказчиками, работая над проектами создания информационных систем на платформах Microsoft.
Основным своим достижением в компьютерном бизнесе считает участие в создании питерской фирмы "АстроСофт", оказавшейся на удивление живучей.
Любимый способ проведения досуга отсутствует в связи с отсутствием досуга, как такового.
Свободно владеет английским языком и может изъясняться по-русски в разговорах с клиентами.
Адрес: 125190, Москва, Чапаевский пер., 14, Microsoft.
Тел.: (095) 967-85-85
Факс: (095) 967-85-00
e-mail: IgorA@Microsoft.com
АЛЬТШУЛЕР Игорь Григорьевич
Фирма "Куб" (Н.Новгород), вице-президент, Первая Нижегородская гильдия профессиональных консультантов, вице-президент, еженедельник PC Week/RE, обозреватель, еженедельник "Биржа" (Н.Новгород), обозреватель.
Родился 28 сентября 1954 года в Горьком. По гороскопу - Весы, старается соответствовать.
В 1971 году окончил с отличием мехмат Горьковского университета. Работал прикладным и системным программистом, был начальником отдела автоматизации крупного проектного института. Имеет авторское свидетельство на изобретение, сертификат фирмы McDonnell Douglas (США). 1991-1993 гг. - директор по развитию АО "Диалог-Н.Новгород", 1993-1995 гг. - советник президента страховой компании "Утес", с 1995 года - независимый консультант и аналитик. В 1994 году проходил стажировку в США. Автор и соавтор нескольких популярных книг, связанных с обработкой текстов, электронными таблицами, применением компьютеров в экономике, Интернетом.
Основными достижениями последних лет считает "Консалтинг-бал", итоги которого были опубликованы в PC Week/RE, ряд "круглых столов".
Увлечение - стихи (пишет, читает "про себя" чужие и свои, читает вслух свои и чужие).
Досуг проводит на диване, там же и работает, так что понятия работы и досуга давно переплелись. Дочка - девятиклассница хочет стать журналистом, сын - семиклассник еще не решил, кем он хочет стать.
Умеет читать и писать по-английски, может поддержать светскую беседу. В качестве синхронного переводчика смотрится много хуже.
Тел.: (831-2) 94-20-55
Адрес: 603123, Нижний Новгород, А-123, а/я 176, Альтшулеру И.Г.
e-mail: altsh@kis.ru
Весь справочник содержит более двухсот подобных записей.