Типы данных в microsoft word

Обновлено: 07.07.2024

В условиях недостатка времени на изучение такой темы, как “Базы данных”, для ознакомления учащихся с основными понятиями этой темы можно использовать текстовый редактор Microsoft Word. С этой целью может быть применена возможность редактора, которая называется “слияние данных”.

Напомним основные положения (см. также [1]). При проведении слияния задействованы две части: база данных и документ, а сама операция слияния как раз и позволяет объединить их (в документе используются данные из базы данных). Как правило, слияние применяется для оформления в документе текстового редактора писем, информация для которых (фамилии адресатов, их адреса и т.п.) хранится в базе данных. В статье [1] приведен ряд примеров использования слияния документов при решении задач “школьной” жизни. Возможны и другие примеры.

В простейшем случае в качестве базы данных можно использовать таблицу, оформленную в Microsoft Excel, в которой каждому полю соответствует отдельная колонка 1 .

Итак, пусть имеется лист электронной таблицы Microsoft Excel (см. рис. 1). На нем представлена информация об учениках школы: фамилия, имя, класс, пол и дата рождения, а также для каждого учащегося рассчитано число полных лет в его возрасте и определено, является ли он (она) именинником на текущей неделе. Этот лист и будем рассматривать как базу данных.

Сначала учащимся предлагается простое задание: в текстовом редакторе Microsoft Word напечатать список, скажем, 10а класса.

Задача решается следующим образом.

1. Открывается панель инструментов Слияние (Вид — Панели инструментов — Слияние).

2. Во вкладке Рассылки выбирается пункт Выбрать получателей — Использовать существующий список, после чего следует указать файл Excel со списком учеников (см. рис. 2), а в нем — соответствующий лист.

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

Если на этом и закончить работу, то будет отобран список всех учеников в таблице, причем на одном листе будут представлены фамилия, имя и обозначение класса лишь одного ученика. Поэтому для решения поставленной задачи надо воспользоваться фильтром — выбрать Изменить список получателей — Фильтр и в окне Фильтр и сортировка выбрать “Класс”, “равно” и “10а” (см. рис. 4).

4. Для объединения всех отобранных записей в одном документе необходимо выполнить команды Найти и объединить — Изменить отдельные документы — Объединить все.

5. Ну а для того, чтобы все фамилии были на одной странице, следует заменить разрыв раздела на знак абзаца по всему документу (см. рис. 5).

Конечный вид документа представлен на рис. 6.

Фактически мы только что продемонстрировали, как создать простейший запрос к базе данных.

После этого можно предложить ученикам самостоятельно выдать список всех, кто родился в текущем месяце, “невезучих”, родившихся 13-го числа, всех, кто родился в первой половине года, и т.п.

Можно также создавать запросы со сложными условиями. Например, получить список всех девочек, родившихся в феврале, или список всех Маш и Марий, список мальчиков для военкомата (тех, кому исполнилось 16 лет) и т.п.

Несколько более сложные запросы возникают, когда мы хотим получить, например, список всех мальчиков 7-х классов. Очень часто ученики не обращают внимания, что в графе (поле) “Класс” стоит обозначение класса с буквой. Это означает, что в фильтре запроса в списке Сравнение (см. рис. 4) необходимо использовать пункт “содержит”.

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

Интересным аспектом предложенной методики является обсуждение с учащимися преобразования логических выражений (сложных условий). Рассмотрим следующий запрос: “Требуется выдать список девочек старших классов, у которых в поле “Имя” записано Лена или Елена”.

Здесь мы имеем четыре условия:

1) поле “Имя” равно “Лена” (обозначим его для краткости — Л);

2) поле “Имя” равно “Елена” (Е);

3) поле “Класс” содержит 10 (К10);

4) поле “Класс” содержит 11 (К11).

После обсуждения с учащимися общего условия для отбора значений в список можно получить такое:
(Л ИЛИ Е) И (К10 ИЛИ К11), причем именно со скобками, так как операция конъюнкции выполняется раньше, чем операция дизъюнкции. Однако при работе с фильтром (см. рис. 4) скобки расставить нельзя. Как же быть? Ответ такой — надо раскрыть скобки, не забывая, что конъюнкция (И) — это аналог умножения, а дизъюнкция (ИЛИ) — аналог сложения:

(Л ИЛИ Е) И (К10 ИЛИ К11) = Л И К10 ИЛИ Л И К11 ИЛИ Е И К10 ИЛИ Е И К11.

Таким образом, фильтр будет следующим: Имя равно Лена И Класс содержит 10 ИЛИ Имя равно Лена И Класс содержит 11 ИЛИ Имя равно Елена И Класс содержит 10 ИЛИ Имя равно Елена И Класс содержит 11. Фрагмент окна Фильтр и сортировка с таким условием 3 приведен на рис. 7.

Рис. 7. Фрагмент окна Фильтр и сортировка

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

1. Сенокосов А.И. Слияние документов как лучшее средство от головной боли. / Информатика, № 2/2006.

Примечание редакции. Как отмечалось, при описании методики автор использует версию Microsoft Word 2007. В предыдущих версиях редактора вид панели инструментов Слияние отличается от представленного в статье. В таких версиях:

1) для выбора файла Excel со списком учеников в качестве источника данных следует использовать кнопку (Открыть источник данных);

2) для вставки в документ нужных полей слияния предназначена кнопка (Вставить поля слияния);

3) для отображения имен полей или отобранных значений используется кнопка (Поля/данные);

4) окно Фильтр и сортировка вызывается с помощью кнопки (Получатели). После этого надо щелкнуть на стрелке () рядом с надписью на заголовке столбца и выбрать пункт Дополнительно;

5) объединить все отобранные записи в одном документе можно с помощью кнопки (Слияние в новый документ);

6) замена разрыва раздела на знак абзаца по всему документу осуществляется “обычными” средствами Word (Правка — Заменить, с использованием специальных символов).

1 При создании этой таблицы целесообразно ознакомить учащихся с такими понятиями, как “база данных”, “поле”, “запись” и “запрос”. — Прим. ред.

2 Автор использует версию редактора Word 2007. — Прим. ред.

3 В окне условие представлено не полностью (используется вертикальная полоса прокрутки). — Прим. ред.

Тип данных – характеристика данных, которая определяет:

- диапазон возможных значений данных;

- допустимые операции, которые можно выполнять над этими значениями;

- способ хранения этих значений в памяти.

Тип данных поля вводится в поле ввода столбца Тип данных.

Видео YouTube

В MS Access допустимыми являются данные следующих типов:

  • Текстовый - Текст или комбинация текста и чисел, например, адреса, а также числа, не требующие вычислений, например, номера телефонов, инвентарные номера или почтовые индексы. Сохраняет до 255 знаков. Свойство Размер поля (FieldSize) определяет максимальное количество знаков, которые можно ввести в поле.
  • Поле МЕМО - Длинный текст или числа, например, примечания или описания.
  • Сохраняет до 65 536 знаков.
  • Числовой - Данные, используемые для математических вычислений, за исключением финансовых расчетов (для них следует использовать тип «Денежный»).
  • Сохраняет 1, 2, 4 или 8 байтов; 16 байтов для кодов репликации (GUID). Конкретный тип числового поля определяется значением свойства Размер поля (FieldSize).
  • Дата/время - Значения дат и времени. В поле данного типа может содержаться любая дата и любое время: от 1 января 100 г. до 31 декабря 9999 г. Сохраняет 8 байтов.
  • Денежный - Используется для денежных значений и для предотвращения округления во время вычислений. Сохраняет 8 байтов.
  • Счетчик - Автоматическая вставка уникальных последовательных (увеличивающихся на 1) или случайных чисел при добавлении записи. Предназначены для хранения данных, значения которых не редактируются, а устанавливаются автоматически при добавлении каждой новой записи в таблицу. Сохраняет 4 байта; 16 байтов для кодов репликации (GUID).
  • Логический - Данные, принимающие только одно из двух возможных значений, таких как «Да/Нет», «Истина/Ложь», «Вкл/Выкл». Значения Null не допускаются. Свойство Формат поля логического поля позволяет использовать специальные форматы или один из трех встроенных: Истина/Ложь, Да/Нет или Вкл/Выкл. При этом значения Истина, Да и Вкл эквивалентны логическому значению True, а значения Ложь, Нет и Выкл эквивалентны логическому значению False. Сохраняет 1 бит.
  • Поле объекта OLE - Объекты OLE (такие как документы Microsoft Word, электронные таблицы Microsoft Excel, рисунки, звукозапись или другие данные в двоичном формате), созданные в других программах, использующих протокол OLE . Сохраняет до 1 Гигабайта (ограничивается объемом диска).
  • MS Access позволяет хранить в таблицах изображения и другие двоичные данные (например, электронную таблицу MS Excel, документ MS Word, рисунок звукозапись). Для этих целей служит тип данных Поле объекта OLE. Фактический объем данных, который Вы можете ввести в поле данного типа, определяется объемом жесткого диска Вашего компьютера (до 1 Гигабайта).
  • Гиперссылка - Гиперссылки . Гиперссылка может иметь вид пути UNC либо адреса URL . Сохраняет до 64 000 знаков.
  • Мастер подстановок - Создает поле, позволяющее выбрать значение из другой таблицы или из списка значений, используя поле со списком. При выборе данного параметра в списке типов данных запускается мастер для автоматического определения этого поля. Для сохранения требуется тот же размер, что и у первичного ключа , соответствующего полю подстановок , — обычно 4 байта.
Новые типы данных и элементы управления Access 2007/2010
  • Вычисляемые поля - позволяют хранить результаты вычислений..

Можно создать поле, в котором будет отображаться значение, вычисляемое на основе других данных из той же таблицы. Для создания вычислений используется построитель выражений, который поддерживает функцию IntelliSense и обеспечивает удобный доступ к справочным сведениям о значениях в выражениях.

Access обновляет вычисляемые поля при редактировании записи, обеспечивая правильность значения в поле.

Например, чтобы добавить в таблицу вычисление [Количество] * [Цена за единицу], требуется ввести вычисление в режиме конструктора таблицы, как показано на рисунке.

- В вычисляемом поле нельзя использовать поля из других таблиц или запросов.

- Вычисляемые поля также не поддерживают некоторые выражения.

Появившиеся в Office Access 2007 многозначные поля могут хранить несколько значений на одну запись. Предположим, что необходимо назначить задачу нескольким сотрудникам или подрядчикам. В большинстве систем управления базами данных и в версиях Access, выпущенных до Office Access 2007, в таком случае потребовалось бы создать связь типа "многие-ко-многим".

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

Многозначные поля особенно удобны при работе со списком SharePoint, который содержит один из типов многозначных полей, используемых в Windows SharePoint Services. Приложение Access 2010 совместимо с этими типами данных.

Тип данных "Вложение" позволяет хранить все типы документов и двоичные файлы в базе данных без лишнего увеличения размера базы данных. Приложение Access автоматически выполняет сжатие вложений, когда это возможно, чтобы оставить как можно больше свободного пространства. Нужно вложить документ Word в запись или сохранить в базе данных несколько цифровых фотографий? Использование вложений значительно облегчает выполнение таких задач. Можно даже добавить к одной записи несколько вложений.

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


Всем привет!
Этой статьей мы открываем цикл, посвященный исследованию безопасности компонентов Microsoft Office. Речь в материале пойдет о форматах данных, шифровании и получении символов.
Когда в компании Microsoft задумывался и разрабатывался масштабный пакет офисных программ Microsoft Office, вероятно, создатели надеялись на успех. Сложно сказать, могли ли они рассчитывать на его триумфальное шествие по миру впоследствии, на то, что продукт станет фактическим стандартом, а существование его растянется на десятилетия. Однако можно уверенно утверждать, что массивность приложений, количество человеко-часов, затраченных на создание, развитие, поддержку обратной совместимости компонентов продукта способствовали появлению «тяжелого наследия» в виде устаревшего, написанного десятилетия назад программного кода, составляющего ядро приложений даже в последних версиях пакета. Требования, которые предъявлялись к коду двадцать лет назад, изменились. Сегодня во главу угла ставится кроссплатформенность, масштабируемость и безопасность. При этом, расходы на значительные изменения в продукте таковы, что Microsoft предпочитает подход «не сломано – не трогай», и старательно обеспечивает обратную совместимость с самыми древними форматами документов. Не обходится и без определенного давления со стороны коммерческих и государственных структур, которые также медленно и неохотно обновляют свои технологические парки, предпочитая привычные средства в ущерб развитию и безопасности.

Покопавшись в дебрях обработчиков файлов Microsoft Office, мы готовы представить вам это небольшое исследование.

Component Object Model и хранение данных



Так может выглядеть использование приложением-контейнером разнородных компонетов независимо от их местоположения

На практике обычно подразумевается не столько сам стандарт, сколько его реализация в ОС семейства Windows. Первые версии COM были разработаны еще для 16-разрядных Windows в качестве основания для OLE (оно же теперь ActiveX). Изначальной целью разработки этих подсистем была возможность создания (!) составных документов Word и Excel для Windows 3.x, и они были выпущено на свет около 1991 года (в разных источниках даты расходятся).


Работая с приложением, пользователь изменяет изображение, содержимое окна браузера и строки в полях ввода. Само приложение взаимодействует с компонентами, вызывая их методы и устанавливая их свойства, иными словами, изменяя внутреннее состояние объектов, о внутреннем устройстве которых не имеет представления.

В один прекрасный момент пользователь решает сохранить проделанную работу и нажимает кнопку «Save». Перед нашим приложением стоит грандиозная задача — записать на диск набор данных в совершенно разных форматах, о большей части которых (и данных, и форматов) приложению ничего не известно, да и находятся они для него в недосягаемости! Именно для решения этой задачи специалисты Microsoft и разработали одновременно с COM и «родной» для Component Object Model формат файла Compound File Binary Format, а вместе с ним систему интерфейсов для взаимодействия с этим форматом и их реализаций, объединяемых под именем Structured Storage.

Структурированное Хранилище COM

Для универсального доступа приложений и компонентов к сложному, к тому же закрытому, формату CFBF, для прозрачной как для контейнера, так и для компонентов замены одного формата другим, были разработаны библиотечные интерфейсы IStorage и IStream и соответствующие API. Виртуальная структура данных, к которой получает доступ приложение посредством этих интерфейсов, представлена системой вложенных каталогов – Хранилищ (Storages), каждый из которых может содержать некоторое число последовательностей байтов – Потоков (Streams), в которых и хранятся данные.


Виртуальное представление формата CFBF (StructuredStorage)

Информация в потоках может храниться в любом удобном виде, включая текст, изображение в любом формате, зашифрованные или сжатые данные, или даже другие файлы CFBF. Не составляет труда поместить в поток и исполняемый код (в т.ч. вредоносный).
Используя соответствующие API (см. Structured Storage Reference в MSDN), приложение может создать файл-хранилище и предоставить каждому компоненту хранилище второго (третьего и т.д.) уровня или поток (несколько потоков) для сохранения состояния в любом формате. Контейнеру нет необходимости знать, в каком виде компонент запишет свои данные, а о размещении информации в файле позаботится стандартная библиотека. Когда необходимо загрузить сохраненное состояние, контейнер открывает хранилище и предоставляет загруженным компонентам возможность считать потоки по мере надобности.

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

Последний пункт требует отдельного рассмотрения. Разработка Структурированного Хранилища велась на заре развития COM (начало 90х годов), когда существующие аппаратные ресурсы предъявляли повышенные требования к быстродействию сложных систем, в том числе при чтении и записи дисковых файлов. Поэтому система хранения данных должна была быть максимально оптимизирована для быстродействия. Это исключало использование, к примеру, текстовых форматов, требующих значительной предварительной обработки. Напротив, двоичные форматы, позволяющие копировать данные в память с минимальными модификациями, имели преимущество.

Результатом стала дисковая реализация Структурированного Хранилища – формат составных двоичных файлов Microsoft (Compound File Binary Format). Долгое время формат оставался закрытым, спецификации были опубликованы производителем в 2006 году.

Формат CFBF представляет собой «файловую систему внутри файла» и имеет таблицу размещения файлов (FAT), таблицу секторов, директории и «потоки» — аналог дисковых файлов.



Техническое представление формата CFBF

  • Ярлыки и списки быстрого доступа
  • Кэш изображений и результатов поиска
  • Файлы установки (msi и msp)
  • «Заметки» Windows

Формат Compound Binary File в приложениях пакета Microsoft Office

Формат документов, используемый Microsoft Office, изначально также представлял собой CFBF.



Документ Word, открытый утилитой для просмотра Structured Storage

Современные версии пакета в качестве основного используют открытый, основанный на XML, формат OfficeOpen XML, однако поддержка CFBF не прекращается с целью поддержания совместимости. Необходимо заметить, что значительная масса кода, отвечающего за работу со старыми форматами документов, была разработана давно (около 20 лет назад).

Word .doc Legacy Word document;
Microsoft Office refers to them as «Microsoft Word 97 2003 Document»
.dot Legacy Word templates;
officially designated «Microsoft Word 97 2003 Template»
.wbk Legacy Word document backup;
referred as «Microsoft Word Backup Document»
Excel .xls Legacy Excel worksheets;
officially designated «Microsoft Excel 97-2003 Worksheet»
.xlt Legacy Excel templates;
officially designated «Microsoft Excel 97-2003 Template»
.xlm Legacy Excel macro
PowerPoint .ppt Legacy PowerPoint presentation
.pot Legacy PowerPoint template
.pps Legacy PowerPoint slideshow
Publisher .pub Microsoft Publisher publication

Примеры устаревших, по-прежнему поддерживаемых форматов Office

Простой поиск по сайтам государственных структур и предприятий РФ (госзакупки, сайты административных единиц) обнаруживает обескураживающе большое количество официальной документации, выложенной в CFBF, зачастую созданной в древних версиях Office, например, 2003 года. Предоставим читателю провести этот опыт самостоятельно.



двоичный файл формата CFBF внутри документа OfficeOpenXML

Несмотря на то, что документы различных приложений Office основаны на CFBF, каждое хранилище состояний элементов OLE/ActiveX будет иметь свой собственный дополнительный формат. Нужно иметь ввиду, что они во многом сложились исторически и были оптимизированы для максимального быстродействия на слабых компьютерах.

Поддержка Хранилищ OLE форматом RTF

OLE-компонент отображения формул Microsoft EQUATION

Примером уязвимости, связанной с технологией COM Structured Storage, может служить CVE-2017-11882.


Уязвимость была обнаружена в компоненте Microsoft Office настолько древнем, что производителем были утрачены исходные коды компонента.
Для сохранения состояния элементы Редактора Формул (Microsoft Equation Editor) использовали потоки структурированного хранилища. Нарушение целостности данных в потоках приводило к многочисленным уязвимостям, первой обнаруженной из которых была CVE-2017-11882, найденная специалистами Embedi.



Поток структурированного хранилища элемента EquationEditor

Некоторые другие унаследованные двоичные форматы, используемые в пакете Microsoft Office

Графический фильтр EPS

Графический фильтр EPS представляет собой компонент Office, который отвечает за редактирование EPS-изображений. Они являются векторными и строятся при помощи интерпретации внутреннего языка Encapsulated PostScript (версия обычного PostScript с некоторыми ограничениями).

В силу своих особенностей этот язык поддерживает самые разнообразные конструкции и возможности. Благодаря чему уязвимости повреждения памяти в графическом фильтре EPS эксплуатируются достаточно легко. Богатство языка делает возможным использование техник HeapSpray (например, возможность использования циклов) и HeapFengShui (предсказуемость выделения памяти интерпретатором). Даже несмотря на то, что рендеринг изображения происходит на виртуальном принтере, а само исполнение программы «EPS» происходит в рамках изолированного интерпретатора, наличие благоприятных возможностей эксплуатации уязвимостей и старая кодовая база сделали EPS едва ли не самым распространенным вектором атаки офисных приложений.

Ввиду того, что модуль был изначально разработан компанией Access Softek, а затем передан компании Microsoft, в этом компоненте найдено и успешно эксплуатируется существенное число «неизвестных» уязвимостей. Например, в апреле 2017 года компанией FireEye Inc. были найдены уязвимости CVE-2017-0261 и CVE-2017-0262. Эти две уязвимости повреждения памяти позволили злоумышленникам построить READ/WRITE-примитивы, с помощью которых они и добились выполнения своего кода за пределами изолированного процесса («песочницы») интерпретатора PostScript. Злоумышленники могут читать и записывать произвольные участки памяти в адресном пространстве уязвимого процесса, а также могут выполнить, например, поиск необходимых ROP гаджетов для построения ROP-цепочки, делающей остальной шелл-код исполняемым.

В обоих случаях атакующие добивались исполнения произвольного кода похожим образом: создавали объект в памяти с контролируемым содержимым (это было возможно сделать при помощи R/W примитивов) и вызывали один из его методов при помощи функции PostScript.

Данные уязвимости в графическом фильтре «EPS» стали популярным вектором атаки. Причем настолько, что компания Microsoft в апреле 2017 разработала обновление, которое полностью отключает графический фильтр. Однако, патч применим только для версии MsOffice 2010 SP2 и выше.

Базы данных Access

  • использование макросов VBA в качестве некоторых триггеров и хранимых процедур;
  • возможность использования ссылок на другие базы данных;
  • закрытость формата БД препятствует использованию существующих баз в других окружениях.

Первый недостаток весьма серьезный, поскольку VBA-макросы по своим возможностям равносильны обычным исполняемым файлам. По этой причине использование Access может стать проблемой для безопасности.
Пользователь должен доверять БД, с которой работает, и быть уверенным, что в ней не содержится вредоносный код, внесенный злоумышленником. В противном случае запрет исполнения макросов существенно сокращает функциональность приложения для работы с данными в таблицах и представлениями.

Файлы Личных Папок Outlook

Спецификация .ost не была опубликована, и формально доступ к файлу Offline Storage Table может осуществляться только посредством MAPI. На деле эти форматы очень схожи и редактирование .ost также возможно. Необходимо иметь ввиду, что синхронизация отредактированного содержимого файла Offline Storage Table с данными на сервере Exchange может привести к необратимой порче данных и утере значимой информации.

Файл владельца/OwnerFile


Проблема совместной работы над документами Office, расположенными в сетевых хранилищах, была когда-то решена при помощи временных файлов простого формата, так называемых OwnerFile. Если файл в данный момент заблокирован для редактирования, приложение ищет в той же директории файл с коротким именем формата «

$name.doc». Файл содержит имя пользователя, открывшего документ в ASCII и Unicode форматах, в обоих случаях под имя отведен фиксированный размер массива. При создании файла неиспользуемые байты массива заполняются мусорными значениями из памяти приложения, что потенциально может привести к раскрытию чувствительной информации (в целом, из-за размера файла вероятность этого невелика). Имя пользователя в файле владельца также легко подделывается.

Механизм шифрования офисных документов

Механизм парольной защиты документов впервые появился в пакете Office 95. В то время стойкости используемых алгоритмов шифрования уделялось мало внимания, как следствие, применялись алгоритмы, на которые существовали практически применимые атаки. Этот факт стал толчком к изменению механизма в последующих версиях офисных пакетов.
В таблице приведены в хронологическом порядке наиболее распространенные в данное время офисные пакеты и используемые в них по умолчанию алгоритмы шифрования.


Огромное количество электронных версий учебно-методических мате­риалов в образовательных учреждениях России представлено в формате Mi­crosoft Word. Это объясняется широкой популярностью приложений Micro­soft Office среди пользователей и простотой освоения и использования дан­ного программного продукта. Поэтому весьма актуальной является задача автоматизации процесса конвертирования образовательного контента из представления Microsoft Word в формат Moodle.

Документ Microsoft Word представляет собой специализированное СОМ-ориентированное хранилище данных - структурированное хранилище (Structured Storage), организованное по иерархическому принципу. Документ может содержать различные типы данных: структурированный текст, графи­ку, математические выражения, организационные диаграммы и т.д.

Концепция структурированного хранилища является составной частью современной парадигмы программирования на основе модели компонентных объектов (Component Object Model - COM). По сути, структурированное хра­нилище - это технология объединения в одной логической единице хранения данных (файле) объектов с различной природой и свойствами. Технология СОМ предлагает стандартную реализацию концепции структурированного хранилища в виде составного файла (Compound File): файловая система внутри файла. СОМ-хранилище представляет собой иерархическую структу­ру коллекций объектов двух типов: хранилищ (Storage) и потоков (Stream), которым в традиционной файловой системе соответствуют каталоги и файлы. Данный подход позволяет существенно снизить издержки хранения в од­ном файле объектов различной природы.

Объект-хранилище, аналогично каталогу файловой системы, может со­держать потоки и другие хранилища. Фактически это означает, что хранили­ще содержит записи с информацией о местоположении, размере и других свойствах размещенных в нем объектов-потоков и других хранилищ. Объект-поток является последовательностью байтов, интерпретация которых, как и для обычного файла, зависит от типа потока (файла). Составной файл обяза­тельно должен содержать корневое хранилище (Root Storage), которое, в свою очередь содержит как минимум один объект-поток, представляющий данные о самом хранилище (Native Stream), рис. 5. Кроме этого, корневое хранилище содержит имя составного файла в нотации файловой системы, к которой он принадлежит.


Каждый объект документа в составном файле представлен отдельным хранилищем, которое может содержать:

  • один или несколько объектов-потоков, соответствующих экземпля­рам данного объекта;
  • другие объекты-хранилища, представляющие встроенные в негообъекты (InlineStorage), и т.д.

Таким образом, глубина вложенности объектов в хранилище теорети­чески не ограничена, документ может быть сколь угодно сложным.

В общем случае технология СОМ предоставляет набор средств уровня API для работы с произвольными структурированными хранилищами. Так, объекты-хранилища и объекты-потоки поддерживают стандартный набор ин­терфейсов:

  • IRootStorage - связывает хранилище с содержащим его файлом;
  • IStorage - содержит методы для создания, открытия, модификации,перемещения, копирования, переименования, удаления объектовхранилища;
  • IStream - поддерживает операции с потоком, аналогичные файло­вым операциям в файловой системе: чтение, запись, управлениеуказателем и т.д.;
  • ILockBytes - реализует байтовый буфер для работы с носителямиданных;
  • IPersist - идентификация объектов на уровне операционной систе­мы;
  • IPersistStorage - поддержка иерархической структуры хранилища;
  • IPersistStream - реализует сериализацию объектов хранилища;
  • IPersistFile - доступ к объектам, содержащимся в других файлах.Кроме этого, имеется StructuredStorageAPI, содержащий следующие

основные группы функций:

  • функции-ярлыки, выполняющие пакетные вызова других API-функций и интерфейсных методов для решения стандартных задач;
  • функции доступа к реализации структурированного хранилища исоставному файлу;
  • функции конвертирования и эмуляции объектов, которые дают воз­можность OLE-серверу работать с объектами, созданными другимсервером;
  • функции конвертирования объектов формата OLE 1 в структуриро­ванное хранилище.

Конкретные реализации СОМ-приложений, использующие структури­рованные хранилища, как правило, имеют собственные библиотеки объек­тов-оберток API-интерфейса. Так, Microsoft Word предоставляет в распоря­жение прикладных программ сотни объектов. Отношения наследования и аг­регации объединяют эти объекты в иерархическую структуру - объектную модель Microsoft Word.


На рис. 6 представлен концептуальный уровень объектной модели Microsoft Word, который включает в себя шесть базовых объектов:

Рис. 6. Объектная модель Microsoft Word

К особенностям модели в первую очередь относится наличие множест­венных перекрытий. Так, Document и Selection являются компонентами объ­екта Application, однако Document так же является свойством объекта Selec­tion. Среди свойств 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 являются: текст, графика и таблицы. Таким образом, задача структурного анализа документа разделяется на три подзадачи:

  • парсинг текста документа;
  • парсинг таблиц;
  • парсинг графики.Основной структурной единицей текста документа является абзац, представленный объектом Paragraph. Все абзацы документа объединяются в объект-коллекцию Paragraphs. Коллекции модели MicrosoftWord имеют стандартный набор свойств и методов для работы с контейнером, включая методы-итераторы для перебора элементов. Непосредственный доступ к тек­сту предоставляет объект Range, который создается для большинства компо­нентов модели MicrosoftWord.

Range является свойством объекта Paragraph. Текстовое содержание абзаца доступно через свойство Range.Text объекта Range. Общая модель парсинга текста документа Microsoft Word представлена на рис. 7.

Объект Range представляет собой базовый компонент модели струк­турного анализа документа (рис. 8).

Range предоставляет доступ ко всем основным типам данных докумен­та. Среди его свойств - коллекции абзацев (Paragraphs), графических изо­бражений (InlineShapes, ShapeRange), таблиц (Tables), рамок (Frames).

Объекты-таблицы (Table) содержатся в коллекции Tables и имеют структуру, представленную на рис. 9. Данные таблицы располагаются в ячей­ках - объектах Cell, объединенных в коллекции Cells. Имеется несколько ва­риантов получения доступа к экземплярам коллекций:

  • коллекция ячеек таблицы является свойством её объекта Range;
  • коллекция ячеек строки - свойство объекта Row из коллекции Rows;
  • коллекция ячеек столбца - свойство объекта Column из коллекции
    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.

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