Microsoft Office 2007 Open XML

Часть 2

Алексей Федоров

Стандартизация формата

Переход на Open XML Format: утилиты

Microsoft Office Compatibility Pack

Office Migration Planning Manager

Microsoft SDK for Open XML Formats

 

В прошлом году мы рассказали о новом XML-формате, используемом для хранения документов в Microsoft Office 2007 (см. ст. «Office 2007 Open XML Format» в КомпьютерПресс № 6’2006 и «Коротко об OpenXML» в КомпьютерПресс № 7’2007). Были рассмотрены его основные характеристики, формат файлов, а также программные интерфейсы для работы с офисными файлами в новом формате. В данной части речь пойдет о некоторых изменениях и обновлениях, связанных с форматом Office Open XML.

Стандартизация формата

Наиболее значимой новостью является то, что Office Open XML — спецификация файлового формата для хранения электронных документов — в декабре прошлого года была стандартизована европейским комитетом по стандартизации Ecma International (стандарт Ecma 376) и в настоящий момент Office Open XML проходит процесс стандартизации в международных организациях ISO и IEC.

На рис. 1 показаны спецификации Office Open XML, включенные в состав стандарта Ecma 376.

 

Рисунок

Рис. 1. Спецификации Office Open XML, включенные в состав стандарта Ecma 376

К стандартизованным спецификациям относятся описания форматов электронных документов — WordprocessingML, электронных таблиц — SpreadsheetML, презентаций — PresentationML, а также различных компонентов электронных документов: графики — DrawingML, расширений XML — Custom XML, библиографической информации, VML, метаданных и формул. Помимо этого стандарт Ecma 376 описывает взаимодействие различных частей документов на уровне Open Packaging Convention, определяя правила создания ссылок, описания типов частей документов и способы задания цифровых подписей.

Таким образом, стандартизация формата Office Open XML и использование для его реализации кроссплатформенных технологий (XML, ZIP, Unicode) делают этот формат максимально привлекательным для хранения электронных документов и обмена ими между приложениями — как реализованными с помощью различных технологий, так и работающими на разных платформах.

В табл. 1 показана поддержка ключевых технологий на популярных платформах.

Таблица 1. Поддержка ключевых технологий OpenXML на популярных платформах

Технологии

Linux

Java

Microsoft .NET

COM

ZIP Library

Minizip zLib

J2SE java.util.zip

.NET Framework 3.0   System.IO.Packaging,   Xceed .NET controls

Xceed ActiveX controls

XML Library

Apache Xerces

JAXP

.NET Framework 3.0   System.Xml

MSXML

Отметим, что включенное в .NET Framework 3.0 пространство имен System.IO.Packaging также поддерживает основные концепции Open Packaging Convention.

Стандарт Ecma 376 состоит из пяти больших модулей (суммарно — более 600 страниц): Fundamentals, Open Packaging Conventions, Primer, Markup Language Reference и Markup Compatibility and Extensibility. Знакомство со стандартом следует начинать с модуля Fundamentals, затем перейти к модулю Primer, а остальные модули использовать в качестве справочников. Наиболее полная версия стандарта доступна на сайте Ecma по адресу: http://www.ecma-international.org/publications/standards/Ecma-376.htm.

Напомним, что все вопросы, связанные с форматом Office Open XML, рассматриваются на сайте OpenXML Developer (http://openxmldeveloper.org/), созданном при поддержке более 40 компаний (рис. 2).

 

Рисунок

Рис. 2. Сайт OpenXML Developer

Переход на Open XML Format: утилиты

Второй новинкой Microsoft Office 2007 является выпуск нескольких утилит, существенно облегчающих переход на новый формат хранения офисных документов.

Microsoft Office Compatibility Pack

Набор конверторов, входящих в состав Microsoft Office Compatibility Pack, позволяет пользователям Office XP, Office 2002 и Office 2003 открывать и редактировать файлы, сохраненные в новом формате, а также сохранять файлы в формате Office 2007. Microsoft Office Compatibility Pack — это бесплатный набор утилит, который можно загрузить по адресу: http://go.microsoft.com/fwlink?LinkID=77512.

Office Migration Planning Manager

Office Migration Planning Manager призван помочь организациям подготовиться к миграции на Microsoft 2007 Office System. В его состав входят следующие утилиты:

  • OMPM File Scanner (offscan.exe) — утилита командной строки, проверяющая документы на предмет совместимости с новым форматом. Результаты сканирования документов размещаются в XML-файле, который может быть затем проанализирован автоматически или вручную. OMPM File Scanner выполняет два типа проверок:

- простое сканирование — выполняется идентификация документов Office на компьютере пользователя или в сетевой файловой системе (маршрут сканирования задается в конфигурационном файле offscan.ini), при этом собирается информация о полном имени файла, его размере, формате, дате создания, дате модификации и владельце,

- полноценное сканирование — выполняется сканирование свойств документов с целью обнаружения потенциальных проблем при конвертации документов в новый формат;

• набор утилит, автоматизирующих создание новой базы данных (поддерживается SQL Server 2000, SQL Server 2005 или SQL Express) и импорт данных из XML-файлов, созданных утилитой OMPM File Scanner. Использование SQL Server 2005 рекомендуется для работы с большими архивами файлов — более 100 тыс. офисных документов. Утилиты реализованы в виде пакетных файлов — CreateDB.bat и DeleteDB.bat. Утилита для импорта данных — ImportScans.bat — базируется на технологии SQLXML 3.0 и позволяет обрабатывать файлы протоколов большого объема: обработка файла размером 10 Кбайт и импорт данных из него занимает порядка 5 мин;

  • средство создания отчетов на основе Microsoft Access 2007, с помощью которого можно анализировать результаты сканирования и задавать наборы файлов для автоматического преобразования в новый формат, используя утилиту Office File Converter;
  • Office File Converter (OFC) — утилита для массового преобразования файлов в новый формат Office 2007;
  • Version Extraction Tool (VET) — средство извлечения версий файлов.

Взаимодействие OMPM-компонентов показано на рис. 3.

 

Рисунок

Рис. 3. Взаимодействие OMPM-компонентов

OMPM File Scanner выполняет сканирование файлов Office, приведенных в табл. 2.

Таблица 2. Форматы файлов, поддерживаемые OMPM File Scanner

Приложение Microsoft Office

Полноценное сканирование

Только простое сканирование

Access

*.mdb, *.mde, *.mdz, *.adp, *.ade, *.mdt, *.mda, *.accda, *.accdb, *.accdr, *.accdu, *.accde, *.accdt, *.accdc

 

Excel

*.xls, *.xlt, *.xla, *.xlm, *.xlw, *.htm, *.html, *.mhtml, *.mht

*.xlc, *.wk1, *.wk3, *.wk4, *.wj1, *.wj2, *.wj3, *.fj3, *.fmt, *.fm3, *.all, *.wks, *.wq1, *.dbf

PowerPoint

*.ppt, *.pot, *.pps, *.ppa

 

Project

*.mpp, *.mpt

 

Publisher

*.pub

 

Visio

*.vsd, *.vss, *.vst, *.vdx, *.vtx, *.vsx

 

Word

*.doc, *.dot, *.wiz

 

Отметим, что сканирование файлов Microsoft Office Outlook, Microsoft Office FrontPage, Microsoft Office OneNote и Microsoft Office InfoPath не производится.

Как видите, использование утилит, входящих в состав Office Migration Planning Manager, позволит компаниям, накопившим значительное количество документов в формате Office, безболезненно перейти на новый формат файлов и воспользоваться всеми преимуществами хранения документов в формате Open XML. Office Migration Planning Manager можно загрузить по адресу: http://go.microsoft.com/fwlink?linkid=75727.

Microsoft SDK for Open XML Formats

И наконец, третья новинка — это выпущенная в июне этого года библиотека классов для работы с офисными документами в формате Open XML. Она представляет собой программную объектную модель, построенную поверх пространства имен System.IO.Packaging и предоставляющую в распоряжение разработчиков строго типизированные классы для работы с документами, созданными средствами Microsoft Office Word 2007, Microsoft Office Excel 2007 и Microsoft Office PowerPoint 2007. Эти классы расположены в пространстве имен Microsoft.Office.DocumentFormat.OpenXml и должны быть подключены к проекту Microsoft Visual Studio 2005 с помощью команды Add Reference.

Основное отличие классов, реализованных в пространстве имен Microsoft.Office. DocumentFormat.OpenXml, от классов из пространства имен System.IO.Packaging заключается в том, что первые рассчитаны на работу с документами, создаваемыми средствами Microsoft Office 2007, тогда как последние предоставляют более абстрактный способ решения тех же задач.

В рассматриваемом нами пространстве имен — Microsoft.Office.DocumentFormat. OpenXml — реализована иерархия, отражающая основную структуру офисных документов (рис. 4).

 

Рисунок

Рис. 4. Фрагмент иерархии классов
в пространстве имен Microsoft.Office.DocumentFormat.OpenXml

На вершине иерархии классов располагается класс OpenXMLPartContainer, представляющий собой контейнер для частей офисного документа. От него наследуют два класса — OpenXmlPackage и OpenXmlPart.

Класс OpenXmlPackage служит базовым классом для реализации классов, описывающих три типа офисных документов: WordprocessingDocument (созданный средствами Microsoft Word), SpreadsheetDocument (созданный средствами Microsoft Excel) и PresentationDocument (созданный средствами Microsoft PowerPoint). Базовый класс содержит ряд свойств и методов, разделяемых всеми унаследованными от него классами. К основным свойствам класса OpenXmlPackage относятся свойства, показанные в табл. 3.

Таблица 3. Свойства класса OpenXmlPackage

Свойство

Описание

CompressionOption

Задает или возвращает уровень сжатия части документа

ExternalRelationships

Возвращает внешние ссылки на документ

Package

Возвращает объект Package для данного документа

PackageProperties

Возвращает свойства объекта Package

PartExtensionProvider

Возвращает объект PartExtensionProvider, который содержит отражение типа части документа на его расширение

Parts

Возвращает все части документа, связанные с данной частью

Методы класса OpenXmlPackage позволяют манипулировать частями документа и взаимоотношениями между ними (табл. 4).

Таблица 4. Основные методы класса OpenXmlPackage

Метод

Описание

AddExtendedPart

Добавляет расширенную часть документа

AddExternalRelationship

Добавляет внешнюю ссылку

AddPart

Добавляет часть документа

Close

Сохраняет и закрывает пакет, а также все потоки, связанные с частями документа

DeleteExternalRelationship

Удаляет внешнюю ссылку

DeletePart

Удаляет часть документа

DeleteParts

Удаляет части документа, входящие в указанную коллекцию

DeletePartsRecursivelyOfType

Рекурсивно удаляет части документа указанного типа

Dispose

Сохраняет содержимое, закрывает документ и освобождает все ресурсы

GetIdOfPart

Возвращает идентификатор части документа

GetPartById

Возвращает часть документа по заданному идентификатору

GetPartsCountOfType

Возвращает число частей указанного типа в документе

GetPartsOfType

Возвращает коллекцию частей указанного типа

Validate

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

Построенные на основе класса OpenXmlPackage классы, реализующие конкретные типы документов, добавляют ряд свойств и методов, уникальных для их структуры. Например, класс WordprocessingDocument — это документ, созданный средствами Microsoft Word и содержащий свойство MainDocumentPart, которое возвращает «корневую» часть документа; класс SpreadsheetDocument, представляющий собой электронную таблицу, созданную средствами Microsoft Excel, содержит свойство WorkbookPart, а класс PresentationDocument, реализующий презентацию, созданную средствами Microsoft PowerPoint, — свойство PresentationPart.

Для создания документов различных типов существуют перегруженные методы Create — они позволяют создавать новый экземпляр соответствующего класса на основе указанного пакета, файлового потока или файла. Пример вариантов метода Create для класса WordprocessingDocument показан в табл. 5.

Таблица 5. Пример вариантов метода Create для класса WordprocessingDocument

Метод

Описание

Create (Package, WordprocessingDocumentType)

Создает новый экземпляр класа WordprocessingDocument на основе указанного пакета

Create (Stream, WordprocessingDocumentType)

Создает новый экземпляр класа WordprocessingDocument на основе файлового потока

Create (String, WordprocessingDocumentType)

Создает новый экземпляр класа WordprocessingDocument на основе указанного файла

Для открытия файла также предусмотрены перегруженные методы Open — для работы на уровне пакетов, файловых потоков или файлов. Соответствующие методы Add — AddMainDocumentPart, AddWorkbookPart и AddPresentationPart — позволяют добавлять к документу новые части.

Части документа построены на основе класса OpenXmlPart и унаследованных от него MainDocumentPart, WorkbookPart, PresentationPart и множества других (включая ImagePart, CommentsPart, PivotTablePart, WorksheetPart, SlidePart, ThemePart, CustomXmlPart и т.п.), отвечающих за отдельные части документа того или иного типа. Базовый класс содержит ряд свойств и методов, разделяемых всеми унаследованными от него классами. Основные свойства класса OpenXmlPart перечислены в табл. 6.

Таблица 6. Основные свойства класса OpenXmlPart

Свойство

Описание

ContentType

Содержит MIME-тип для данной части документа

ExternalRelationships

Возвращает внешние ссылки на документ

OpenXmlPackage

Возвращает OpenXmlPackage, содержащий данную часть документа

Parts

Возвращает перечисление всех частей, связанных с данной

RelationshipType

Возвращает тип связи для данной части

Uri

Возвращает внутренний адрес части внутри пакета

Методы класса OpenXmlPart позволяют манипулировать частями документа и взаимоотношениями между ними (табл. 7).

Таблица 7. Основные методы класса OpenXmlPart

Метод

Описание

AddExtendedPart

Добавляет расширенную часть документа

AddExternalRelationship

Добавляет внешнюю ссылку

AddNewPart

Добавляет новую часть документа

AddPart

Добавляет часть документа

DeleteExternalRelationship

Удаляет внешнюю ссылку

DeletePart

Удаляет часть

DeleteParts

Удаляет части, находящиеся в указанной коллекции

FeedData

Передает данные в поток

GetIdOfPart

Возвращает идентификатор части документа

GetParentParts

Возвращает «родительские» части документа

GetPartById

Возвращает часть документа по заданному идентификатору

GetPartsCountOfType

Возвращает число частей указанного типа в документе

GetPartsOfType

Возвращает коллекцию частей указанного типа

GetStream

Возвращает поток, связанный с частью документа

ValidateXml

Проверяет содержимое части документа на соответствие указанной схеме

После того как мы ознакомились с основами организации библиотеки классов для работы с офисными документами в формате Open XML, рассмотрим несколько примеров ее применения.

Начнем с примера, показывающего, как использовать данную библиотеку для создания нового документа в формате Microsoft Word. Первый шаг — это создание пакета типа WordprocessingDocument:

 

WordprocessingDocument wordDoc

wordDoc = WordprocessingDocument.Create (“c:\OpennXMLDemo.docx”, WordprocessingDocumentType. Document);

 

После этого мы задаем наполнение документа — создаем его основную часть:

 

using (wordDoc)

  {

   MainDocumentPart mainPart = wordDoc. AddMainDocumentPart();

 

и заполняем ее данными:

 

const string docXml =

@”<?xml version=””1.0"” encoding=””UTF-8"” standalone=””yes””?> <w:document xmlns:w=””http://schemas.openxmlformats.org/wordprocessingml/2006/main””>

<w:body><w:p><w:r><w:t>Hello world!</w:t></w:r></w:p></w:body>

</w:document>”;

  using (Stream stream = part.GetStream())

  {

    byte[] buf = (new UTF8Encoding()). GetBytes(docXml);

    stream.Write(buf, 0, buf.Length);

  }

}

 

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

 

public static void AddNewPart(string document, string fileName)

{

  using (WordprocessingDocument wordDoc = WordprocessingDocument.Open(document, true))

  {

   MainDocumentPart mainPart = wordDoc.MainDocumentPart;

   CustomXmlPart myXmlPart = mainPart.AddNewPart <CustomXmlPart>();

   using (FileStream stream = new FileStream(fileName, FileMode.Open))

   {

     myXmlPart.FeedData(stream);

   }

  }

}

 

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

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

 

public static string GetCommentsFromDocument(string document)

{

  string comments = null;

  using (WordprocessingDocument wordDoc = WordprocessingDocument.Open(document, true))

  {

    MainDocumentPart mainPart = wordDoc.MainDocumentPart;

    CommentsPart commentsPart = mainPart.CommentsPart;

    using (StreamReader streamReader = new StreamReader(commentsPart.GetStream()))

    {

      comments = streamReader.ReadToEnd();

    }

  }

  return comments;

}

 

Сначала мы открываем документ с помощью соответствущего метода Open. Затем мы получаем доступ к его основной части (MainDocumentPart), а после этого — к части документа, в которой хранятся комментарии (CommentsPart). Далее мы создаем поток для полученной части документа и считываем ее содержимое в строковую переменную.

Как видите, использование классов, реализованных в пространстве имен Microsoft.Office.DocumentFormat.OpenXml, позволяет работать с офисными документами более наглядно и в соответствии с объектной моделью и схемой того или иного офисного продукта.

Microsoft SDK for Open XML Formats можно загрузить с сайта Microsoft (раздел Downloads).

 

В начало В начало

КомпьютерПресс 8'2007

Наш канал на Youtube

1999 1 2 3 4 5 6 7 8 9 10 11 12
2000 1 2 3 4 5 6 7 8 9 10 11 12
2001 1 2 3 4 5 6 7 8 9 10 11 12
2002 1 2 3 4 5 6 7 8 9 10 11 12
2003 1 2 3 4 5 6 7 8 9 10 11 12
2004 1 2 3 4 5 6 7 8 9 10 11 12
2005 1 2 3 4 5 6 7 8 9 10 11 12
2006 1 2 3 4 5 6 7 8 9 10 11 12
2007 1 2 3 4 5 6 7 8 9 10 11 12
2008 1 2 3 4 5 6 7 8 9 10 11 12
2009 1 2 3 4 5 6 7 8 9 10 11 12
2010 1 2 3 4 5 6 7 8 9 10 11 12
2011 1 2 3 4 5 6 7 8 9 10 11 12
2012 1 2 3 4 5 6 7 8 9 10 11 12
2013 1 2 3 4 5 6 7 8 9 10 11 12
Популярные статьи
КомпьютерПресс использует