понедельник, 23 февраля 2015 г.

Урок 2. Как это работает. Структура документа.

На прошлом уроке мы написали новую вкладку и внедрили её в интерфейс документа, не останавливаясь подробно на самом механизме такого внедрения, чтобы не перегружать и так длинный урок. Сегодня я расскажу о том, как именно происходит внедрение написанных нами XML-конструкций в файл.

Файлы документов офисных приложений в версиях, начиная с 2007-й, кардинально отличаются от файлов документов предыдущих версий по формату хранения в них данных. Если раньше это был внутренний, закрытый формат, то теперь любой документ Word, Excel или PowerPoint представляет собой банальную структуру папок с информацией документа, сжатую алгоритмами ZIP, которую можно распаковать практически любым архиватором.

В этой структуре папок есть специальные папки для хранения текста, изображений, стилей и прочих составляющих, из которых состоит документ. Одной из таких папок является папка customUI, в которой и хранится XML-файл с написанным нами интерфейсом. Давайте в этом убедимся.

Откройте программу Ribbon XML Editor, и нажмите Shift+Ctrl+O, чтобы загрузить последний документ, созданный на прошлом уроке. Вместо клавиатурной комбинации можно нажать и на соответствующую кнопку в интерфейсе программы, расположенную в верхней панели с изображением открытой папки, из которой торчит листок с текстом. Это кнопка с выбором действия. По умолчанию она открывает последний документ, но, щёлкнув по стрелочке справа, можно открыть список всех файлов, открываемых в программе в последнее время. Пока в этом списке содержится только один документ, но их может быть сколько угодно. Максимальное количество запоминаемых документов можно изменить в настройках программы.

Когда программа открывает документ, фактически она распаковывает его к себе в техническую папку и считывает из неё файл с XML-макетом интерфейса. Давайте посмотрим, что из себя представляет наш распакованный документ. Для этого откроем техническую папку программы, нажав самую правую кнопку в верхней панели с изображением открытой папки, из которой торчит шестерёнка.

В открывшейся папке мы видим папку с распакованным документом, а рядом ещё два файла, содержащих настройки Ribbon XML Editor. Нас интересует папка с распакованным документом. Открыв её, мы, среди других папок, увидим папку customUI. Это папка настраиваемого пользовательского интерфейса. В документах, не имеющих внедрённого интерфейса, эта папка отсутствует.

Откроем эту папку, и увидим файл customUI.xml, содержащий набранный нами на прошлом уроке текст. Так что всё очень прозрачно и доступно. Но этим файлом модификация интерфейса не ограничивается. Приложению надо как-то дать знать, что интерфейс находится именно в этом файле, потому что теоретически название папки и файла с интерфейсом могут быть любыми. Для этого в корневой папке документа имеется папка _rels, содержащая файл .rels. В этом файле содержится список ссылок на различные компоненты документа, в том числе и на настраиваемый пользовательский интерфейс.

Содержимое файла корневых ссылок .rels можно увидеть непосредственно в редакторе Ribbon XML Editor, открыв вкладку с названием «Корневые ссылки (.rels)», ярлык которой расположен в верхней части программы, сразу под верхней панелью. Рассмотрим файл корневых ссылок подробнее. Перейдите в редактор, и откройте эту вкладку:



Корневые ссылки оформлены тоже в виде XML-конструкций. Каждая ссылка содержит идентификатор, тип и ссылку на файл, который она представляет. Интересующая нас ссылка является последней. Можно увидеть, что она указывает путь к нашему файлу интерфейса. При внедрении интерфейса в документ Ribbon XML Editor добавляет эту ссылку автоматически. Теоретически идентификатор ссылки (атрибут Id) может быть любым, но обычно используют именно этот (CustomUI2007RelID для версии 2007 и CustomUI2010RelID для версий 2010/2013).

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

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

На этом мы закончим сегодняшний урок. Закройте документ, нажав Ctrl+W, или щёлкнув по кнопке с изображением закрытой папки с красным крестиком. Папка документа исчезнет из технической папки программы, текстовые редакторы на всех вкладках очистятся, документ закроется. Закроем и окно программы, стандартным образом — щёлкнув по красному крестику в правом верхнем углу.

Небольшое дополнение по закрытию документа. Фактически, сам файл документа закрывается сразу же после его распаковки в техническую папку, и работа ведётся только с распакованной копией. При сохранении документа распакованная папка снова архивируется со всеми изменениями, и полученный документ просто перезаписывает основной документ. Это надо иметь ввиду, если вы редактируете документ в приложении офиса, когда он уже открыт в Ribbon XML Editor. В этом случае после сохранения документа из приложения с последующим его сохранением из Ribbon XML Editor данные, внесённые ранее через приложение, будут потеряны.

Для одновременного редактирования приложения в обеих программах надо не забывать закрывать его в Ribbon XML Editor перед открытием в офисном приложении, а при открытии в Ribbon XML Editor — закрывать его в MS Office. Для автоматизации этого рутинного процесса в Ribbon XML Editor есть специальные настройки «Закрывать документ перед запуском его в MS Office» и «Открывать документ при закрытии его в MS Office». Их можно найти на вкладке настроек в разделе «Документы». Впрочем, одновременное редактирование бывает полезно только при работе с написанием макросов, поэтому пока просто запомним эту возможность программы.

На следующе уроке мы продолжим начатую в первом уроке модификацию интерфейса и разберёмся с атрибутами id, idMso и idQ идентификаторов и пространствами имён.

4 комментария:

  1. А сам Zoom +- не настраивается в "Ribbon XML Editor"?

    ОтветитьУдалить
    Ответы
    1. В настройках внешнего вида редакторов в блоке «Шрифт, отступ» можно выбрать размер шрифта.

      Удалить
  2. У меня почему-то перестал закрываться документ Офис при загрузке xml документа в Риббоне, и наоборот, закрываться xml в Риббоне при открытии документа Офис. А раньше автоматом работало. Обновился до версии 1903 винды. Галочки в Риббоне стоят, проверял. В принципе жить можно, но ошибки и потери будут обязательно. Есть выход?

    ОтветитьУдалить
    Ответы
    1. Пока не знаю. Опять что-то с виндой, видимо, намудрили...

      Удалить