Создайте карту для проверки функциональности сохранения файла MS Word

Обновлено: 28.06.2024

В своем первом блоге я написал краткое введение об OpenXML в обработке текстов и о том, как мы можем работать с текстовыми документами в ABAP. В этом блоге я опишу пользовательскую xml-часть документа Word и приведу несколько примеров того, как мы можем использовать ее в ABAP. Например, как можно использовать пользовательские данные в запросах на печать по запросу для предоставления данных о клиентах в документе с контролем содержимого.

Пользовательские части XML были представлены в Microsoft Word 2007 вместе с форматами Open XML. Пользовательская часть документа Microsoft Word используется для хранения пользовательских данных, и неудивительно, что формат данных — XML. В связи с пользовательским XML мы также будем использовать функциональность управления контентом Microsoft Word. Пользовательский элемент управления — это набор отдельных объектов для управления и настройки содержимого документа. Одной из его целей является сопоставление данных из разных источников (в нашем примере из пользовательского XML) в точное место в документе Word. Итак, давайте рассмотрим пример.

В первой части я покажу вам, как вручную создавать и изменять пользовательскую часть XML. Во второй части я приведу простой код ABAP, который делает то же самое.

Целью этого шага является понимание пользовательского XML и управления контентом в Word. Итак, откройте наш документ Test.docx (или создайте новый) в Microsoft Word 2007 или выше. В качестве предварительного условия необходимо установить надстройку под названием «Редактор пользовательских XML-частей». Перейдите на вкладку «Разработчик» -> «Надстройка», найдите ее и добавьте. После успешной установки вы должны увидеть новую кнопку XML Mapping Pane.


< /p>

В качестве второго шага подготовьте простой пользовательский XML-файл с некоторыми фиктивными данными в формате XML. Я использую следующий пример.

Нажмите кнопку Область сопоставления XML, чтобы добавить новую пользовательскую часть. С правой стороны выберите Добавить новую часть… и перейдите к нашему файлу custom.xml. После добавления выберите «пользовательскую» часть, и вы должны увидеть что-то вроде этого.


Теперь поместите курсор в точное место в документе, где вы хотите сопоставить данные, и, щелкнув правой кнопкой мыши атрибуты (имя, фамилию, дату), выберите «Вставить элемент управления содержимым» -> «Обычный текст». Перепишите значения атрибутов элементов управления содержимым и сохраните документ. Я добавил имя и фамилию в наш документ Test.docx.


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


Наша пользовательская XML-часть имеет путь customXml–>item1.xml и выглядит так.


Основная часть имеет путь->document.xml. Поскольку он быстро стал большим, я предоставлю только краткий образец этого xml. обратите внимание на тег, который связывает данные из пользовательского XML с документом.


2. Поддержка пользовательского XML в ABAP

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

В своем следующем блоге я опишу способ использования пользовательского XML для динамического заполнения таблиц в документе Word собственными данными.

Есть ли способ сопоставить свойства документа MS Word в онлайн-библиотеке документов SharePoint

Внутри документа MS Word у нас есть следующие свойства:-

39333-pro.jpg

и мой вопрос: можем ли мы сопоставить эти свойства в библиотеке документов SharePoint? так, например, я могу заполнить вышеуказанные свойства внутри документа Word >> загрузить документ в онлайн-библиотеку документов SharePoint >> тогда свойства будут автоматически заполнены внутри SharePoint?

Не могли бы вы сообщить мне, была ли решена ваша проблема или есть какие-либо обновления?
Я с нетерпением жду вашего ответа.

Удачи в работе!

Я обновил свой ответ под вашим ответом.
Не могли бы вы сообщить мне, решена ли ваша проблема или есть какие-либо обновления?

Удачного дня!

5 ответов

Когда вы загружаете файлы в библиотеку документов SharePoint Online, библиотека SharePoint автоматически заполняет свойства файлов.

Пожалуйста, выполните следующие действия:

39525-doc1.jpg

Перейдите в Библиотеку документов >> Настройки библиотеки >> Дополнительные настройки >> включите функцию «Разрешить управление типом контента» >> OK

39552-doc2.jpg

Вернитесь на страницу настроек библиотеки, перейдите в раздел Колонки, нажмите ссылку Добавить из существующих колонок сайта.

39526-doc3.jpg

На странице "Добавить столбцы из столбцов сайта" эти столбцы можно выбрать в списке "Доступные столбцы сайта" >> "Добавить" >> "ОК"

39520-doc4.jpg

Когда вы загружаете файл в библиотеку документов, вы обнаружите, что некоторые свойства документа автоматически заносятся в библиотеку. Это связано с тем, что некоторые свойства в файле в качестве метаданных автоматически сопоставляются с SharePoint Online.

Спасибо,
Echo Du
=====================
Если ответ полезен, нажмите «Принять ответ». " и проголосуйте за него.
Примечание: следуйте инструкциям в нашей документации, чтобы включить уведомления по электронной почте, если вы хотите получать соответствующее уведомление по электронной почте для этой темы.

хорошо, спасибо за ваш полезный ответ. Я выполнил ваши шаги и могу сопоставить статус, комментарии, заголовок ... но я не уверен, что мы можем создавать настраиваемые свойства внутри MS Word и сопоставлять их с SharePoint +, если мы можем сопоставить другие свойства, такие как менеджер, компания и т. д. Я спрашиваю, есть ли встроенный подход или подход разработки, такой как создание удаленного приемника событий, который может считывать свойства MS и заполнять список SharePoint.

Основные свойства документа — это свойства, общие для всех приложений Office. SharePoint включает следующие столбцы, которые сопоставлены с этими основными свойствами документа:

Автор (сопоставляется со свойством основного документа Creator)

Комментарии (сопоставляется с основным свойством документа Description)

Однако некоторые свойства имеют столбцы с одинаковыми или похожими именами в SharePoint, но они не распознаются: Компания, Менеджер.

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

Спасибо за ответ, но на основании моего теста свойство Word "Автор" будет сопоставлено со столбцом "Автор" SharePoint, а не с "Создателем". также комментарии будут сопоставлены со столбцом комментариев SharePoint, а не с описанием. Я что-то пропустил?

Да, вы правы. Это может быть связано с моим неправильным описанием, которое вызвало у вас неправильное понимание.

Таблица сопоставления

40285-mapping.jpg

Эффект изображения

40321-property.jpg

Во-первых, обратите внимание на сопоставленные свойства, включенные в Word, в разделе «Вставка» > «Быстрые элементы» > «Свойства документа».

У меня нет Share Point. У меня сложилось впечатление, что сопоставление происходит из SharePoint в Word, а не наоборот, но я говорю по незнанию.

Я знаю, что SharePoint может добавить в этот список QuickParts.

Вы определенно можете это сделать. Это функция появилась в SharePoint 2007. В список документов добавьте нужные столбцы и поместите в них данные. Вы можете поставить даже целые абзацы, если хотите. Есть несколько способов сделать это, и некоторые из них лучше других.

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

Теперь вы можете изменить значение в элементе управления в Word или открыть библиотеку документов и изменить значение в столбце, и оно будет синхронизировано в обоих направлениях. Если вы отправите этот документ другому пользователю, у которого нет библиотеки SharePoint, он увидит только введенные вами значения. Что-то вроде слияния.

Затем вы можете настроить XML по умолчанию для этого документа или библиотеки документов, чтобы всегда отображались значения SharePoint.

Поскольку около миллиарда человек используют Microsoft Office, формат DOCX является де-факто самым популярным стандартом для обмена файлами документов между офисами.Хотя DOCX является сложным форматом, вы можете проанализировать его вручную для более простых задач, таких как индексация, преобразование в TXT и внесение других небольших изменений. Я хотел бы предоставить вам достаточно информации о внутреннем устройстве DOCX, чтобы вам не пришлось обращаться к спецификациям ECMA — объемному руководству на 5000 страниц.

Поскольку около миллиарда человек используют Microsoft Office, формат DOCX является де-факто самым популярным стандартом для обмена файлами документов между офисами. Его ближайший конкурент — формат ODT — поддерживается только Open/LibreOffice и некоторыми продуктами с открытым исходным кодом, что делает его далеким от стандарта. Формат PDF не является конкурентом, потому что PDF-файлы нельзя редактировать и они не содержат полной структуры документа, поэтому они могут вносить только ограниченные локальные изменения, такие как водяные знаки, подписи и т.п. Вот почему большинство деловых документов создаются в формате DOCX; нет хорошей альтернативы для его замены.

Несмотря на то, что DOCX – сложный формат, вам может потребоваться проанализировать его вручную для более простых задач, таких как индексирование, преобразование в TXT и внесение других небольших изменений. Я хотел бы предоставить вам достаточно информации о внутреннем устройстве DOCX, чтобы вам не пришлось обращаться к спецификациям ECMA — объемному руководству на 5000 страниц.

Лучший способ понять формат — создать простой документ из одного слова в MSWord и посмотреть, как редактирование документа меняет лежащий в его основе XML. Вы столкнетесь с некоторыми случаями, когда DOCX не форматируется должным образом в MS Word, и вы не знаете, почему, или столкнетесь со случаями, когда не очевидно, как создать желаемое форматирование. В этом поможет видение и понимание того, что происходит в XML.

Около года я работал над редактором DOCX для совместной работы CollabOffice и хочу поделиться своими знаниями с сообществом разработчиков. В этой статье я объясню файловую структуру DOCX, обобщив информацию, разбросанную по Интернету. Эта статья является промежуточным звеном между огромной и сложной спецификацией ECMA и простыми онлайн-руководствами, доступными в настоящее время. Вы можете найти файлы, сопровождающие эту статью, в проекте toptal-docx в моей учетной записи github.

Простой файл DOCX

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

Для начала давайте удалим неиспользуемые элементы и сосредоточимся на document.xml, который содержит основные текстовые элементы. Когда вы удаляете файл, убедитесь, что вы удалили все ссылки на него из других файлов xml. Вот пример сравнения кода, показывающий, как я удалил зависимости от app.xml и core.xml. Если у вас есть какие-либо неразрешенные/отсутствующие ссылки, MSWord будет считать файл поврежденным.

Вот структура нашего упрощенного минимального документа DOCX (а вот и проект на github):

Давайте разберем по файлам отсюда, сверху:

_rels/.rels

Определяет ссылку, которая сообщает MS Word, где искать содержимое документа. В данном случае это ссылка на word/document.xml :

_rels/document.xml.rels

Этот файл определяет ссылки на ресурсы, такие как изображения, встроенные в содержимое документа. В нашем простом документе нет встроенных ресурсов, поэтому тег отношения пуст:

[Content_Types].xml

[Content_Types].xml содержит информацию о типах мультимедиа внутри документа. Поскольку у нас есть только текстовый контент, это довольно просто:

документ.xml

Наконец, вот основной XML с текстовым содержимым документа. Я удалил некоторые объявления пространств имен для ясности, но вы можете найти полную версию файла в проекте github. В этом файле вы обнаружите, что некоторые ссылки на пространство имен в документе не используются, но вам не следует их удалять, поскольку они нужны MS Word.

Вот наш упрощенный пример:

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

это атрибут, который можно игнорировать; он используется внутренними компонентами MS Word.

Давайте рассмотрим более сложный документ с тремя абзацами. Я выделил XML теми же цветами на снимке экрана из Microsoft Word, чтобы вы могли видеть взаимосвязь:

Структура абзаца

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

Опять же, мы можем игнорировать .

Свойства текста

Основные свойства текста — это шрифт, размер, цвет, стиль и т. д. Существует около 40 тегов, определяющих внешний вид текста. Как вы можете видеть в нашем примере с тремя абзацами, у каждого прогона есть свои собственные свойства внутри , спецификация и жирность .

Важно отметить, что свойства делают различие между двумя группами символов, обычным и сложным письмом (например, арабским), и что свойства имеют разные теги в зависимости от того, на какой тип символов они воздействуют.< /p>

Большинство тегов свойств обычных скриптов имеют соответствующий тег сложного скрипта с добавленной буквой «C», указывающей, что свойство предназначено для сложных скриптов. Например: (курсив) становится , а полужирный тег для обычного письма становится для сложного письма.

Стили

В Microsoft Word есть целая панель инструментов, посвященная стилям: обычный, без интервала, заголовок 1, заголовок 2, заголовок и т. д. Эти стили хранятся в /word/styles.xml (примечание: на первом этапе нашего простого примера мы удалили этот XML из DOCX. Чтобы увидеть это, создайте новый DOCX).

После того как вы определили текст как стиль, вы найдете ссылку на этот стиль внутри тега свойств абзаца, . Вот пример, где я определил свой текст со стилем Заголовок 1:

а вот и сам стиль из styles.xml:

Xpath указывает, что шрифт выделен полужирным, и указывает цвет шрифта. указывает MSWord использовать стиль «Обычный» для любых отсутствующих свойств.

Наследование собственности

Свойства текста наследуются. Прогон имеет свои собственные свойства ( w:p/w:r/w:rPr/* ), но он также наследует свойства абзаца ( w:r/w:pPr/* ), и оба могут ссылаться на свойства стиля из / слово/стили.xml .

Абзацы и прогоны начинаются со свойствами по умолчанию: w:styles/w:docDefaults/w:rPrDefault/* и w:styles/w:docDefaults/w:pPrDefault/* . Чтобы получить конечный результат свойств персонажа, вы должны:

  1. Использовать свойства запуска/абзаца по умолчанию
  2. Добавить свойства стиля прогона/абзаца
  3. Добавить локальные свойства запуска/абзаца
  4. Добавить свойства прогона результатов к свойствам абзаца.

Когда я говорю "присоединить" B к A, я имею в виду повторение всех свойств B и переопределение всех свойств A, оставляя все непересекающиеся свойства как есть.

Еще одно место, где могут быть расположены свойства по умолчанию, — это тег с w:type="paragraph" и w:default="1" . Обратите внимание, что сами символы внутри прогона никогда не имеют стиля по умолчанию, поэтому фактически не влияют на текст.

Переключить свойства

Некоторые свойства являются переключаемыми, например (жирный шрифт) или (курсив); эти атрибуты ведут себя как оператор XOR.

Это означает, что если родительский стиль выделен полужирным шрифтом, а дочерний шрифт выделен жирным шрифтом, результатом будет обычный нежирный текст.

Чтобы правильно обрабатывать атрибуты-переключатели, необходимо провести много тестов и перепроектировать. Взгляните на параграф 17.7.3 спецификации Open XML ECMA-376, чтобы получить формальные подробные правила для свойств переключения/

Шрифты

Шрифты подчиняются тем же общим правилам, что и другие текстовые атрибуты, но значения свойств шрифта по умолчанию указываются в отдельном файле темы, на который ссылаются в word/_rels/document.xml.rels следующим образом:

Исходя из приведенной выше ссылки, имя шрифта по умолчанию будет найдено в word/theme/themes1.xml внутри тега a:themeElements/a:fontScheme/a:majorFont или a:minorFont.

Размер шрифта по умолчанию — 10, если тег w:docDefaults/w:rPrDefault отсутствует, тогда размер шрифта — 11.

Выравнивание текста

Выравнивание текста задается тегом с четырьмя доступными режимами w:val: "слева", "по центру", "справа" и "оба".

«левый» — режим по умолчанию; текст начинается слева от прямоугольника абзаца (обычно на ширину страницы). (Этот абзац выровнен по левому краю, что является стандартным.)

Режим "center", как и ожидалось, центрирует все символы внутри ширины страницы. (Опять же, этот абзац иллюстрирует выравнивание по центру.)

В "правильном" режиме текст абзаца выравнивается по правому полю. (Обратите внимание, как этот текст выровнен по правому краю.)

Режим «оба» добавляет дополнительный интервал между словами, так что строки становятся шире и занимают всю ширину абзаца, за исключением последней строки, которая выравнивается по левому краю. (Этот абзац является демонстрацией этого.)

Изображения

DOCX поддерживает два типа изображений: встроенные и плавающие.

Встроенные изображения появляются внутри абзаца вместе с другими символами и используются вместо использования (текст). Идентификатор изображения можно найти с помощью следующего синтаксиса xpath:

Идентификатор изображения используется для поиска имени файла в файле word/_rels/document.xml.rels и должен указывать на файл gif/jpeg внутри подпапки word/media. (См. файл word/_rels/document.xml.rels проекта github, где вы можете увидеть идентификатор изображения.)

Плавающие изображения размещаются относительно абзацев, а текст обтекает их. (Вот пример документа проекта github с плавающим изображением.)

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

Таблицы

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

Ширина столбцов таблицы может быть указана в теге, но если вы не укажете ее, MS Word будет использовать свои внутренние алгоритмы, чтобы найти оптимальную ширину столбцов для наименьшего эффективного размера таблицы.

Единицы

Многие атрибуты XML внутри DOCX указывают размеры или расстояния. Хотя внутри XML они представляют собой целые числа, все они имеют разные единицы измерения, поэтому необходимо некоторое преобразование. Тема сложная, поэтому я бы порекомендовал эту статью Ларса Корнелиуссена о единицах измерения в файлах DOCX. Таблица, которую он представляет, полезна, хотя и с небольшой опечаткой: дюймы должны быть pt/72, а не pt*72.

Вот шпаргалка:

Советы по реализации макетировщика

Если вы хотите преобразовать файл DOCX (например, в PDF), нарисовать его на холсте или подсчитать количество страниц, вам придется реализовать компоновщик. Компоновщик — это алгоритм вычисления позиций символов в файле DOCX.

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

Макетировщик заполняет родительский прямоугольник, который обычно представляет собой прямоугольник страницы. Он добавляет слова из прогона одно за другим. Когда текущая строка переполняется, она начинает новую. Если абзац слишком высок для родительского прямоугольника, он переносится на следующую страницу.

Вот несколько важных моментов, о которых следует помнить, если вы решите внедрить компоновщик:

  • Компоновщик должен позаботиться о выравнивании текста и наведении текста на изображения.
  • Он должен поддерживать работу с вложенными объектами, такими как вложенные таблицы.
  • Если вы хотите обеспечить полную поддержку таких изображений, вам придется реализовать компоновщик как минимум с двумя проходами, первый шаг собирает позиции плавающих изображений, а второй заполняет пустое пространство текстовыми символами.
  • Обратите внимание на отступы и пробелы. У каждого абзаца есть интервалы до и после, и эти числа задаются тегом w:spacing. Вертикальный интервал определяется тегами w:after и w:before. Обратите внимание, что межстрочный интервал определяется w:line, но это не размер строки, как можно было бы ожидать. Чтобы получить размер строки, возьмите текущую высоту шрифта, умножьте на w:line и разделите на 12.
  • Файлы DOCX не содержат информации о нумерации страниц. Вы не найдете количество страниц в документе, если не подсчитаете, сколько места вам нужно для каждой строки, чтобы определить количество страниц. Если вам нужно найти точные координаты каждого символа на странице, обязательно учитывайте все пробелы, отступы и размеры.
  • Если вы реализуете полнофункциональный макетировщик DOCX, который обрабатывает таблицы, обратите внимание на особые случаи, когда таблицы занимают несколько страниц. Ячейка, вызывающая переполнение страницы, также влияет на другие ячейки.
  • Создание оптимального алгоритма для расчета ширины столбцов таблицы — сложная математическая задача, поэтому текстовые процессоры и программы компоновки обычно используют неоптимальные реализации. Предлагаю в качестве первого приближения использовать алгоритм из HTML-табличной документации W3C. Я не нашел описания алгоритма, используемого в MS Word, и Microsoft со временем доработала этот алгоритм, чтобы разные версии Word могли размещать таблицы немного по-разному.

Если что-то непонятно: реконструируйте XML!

Когда непонятно, как работает тот или иной XML-тег внутри MS Word, есть два основных подхода к выяснению этого:

Создавайте нужный контент шаг за шагом. Начните с простого файла docx. Сохраняйте каждый шаг в отдельный файл, например, 1.docx, 2.docx. Разархивируйте каждый из них и используйте инструмент визуального сравнения для сравнения папок, чтобы увидеть, какие теги появляются после ваших изменений. (Чтобы получить коммерческую версию, попробуйте Araxis Merge или бесплатную версию WinMerge.)

Если вы создаете файл DOCX, который не нравится MS Word, действуйте в обратном порядке. Шаг за шагом упрощайте XML. В какой-то момент вы узнаете, какое изменение MS Word считает неправильным.

DOCX довольно сложен, не так ли?

Это сложно, и лицензия Microsoft запрещает использование MS Word на стороне сервера для обработки DOCX — это довольно стандартно для коммерческих продуктов. Однако Microsoft предоставила файл XSLT для обработки большинства тегов DOCX, но он не даст вам 100-процентной или даже 99-процентной точности.Такие процессы, как наложение текста на изображения, не поддерживаются, но вы сможете поддерживать большинство документов. (Если вам не нужна сложность, рассмотрите возможность использования Markdown в качестве альтернативы.)

Если у вас есть достаточный бюджет (бесплатного механизма рендеринга DOCX нет), вы можете использовать коммерческие продукты, такие как Aspose или docx4j. Самым популярным бесплатным решением является LibreOffice для преобразования между DOCX и другими форматами, включая PDF. К сожалению, LibreOffice содержит много мелких ошибок во время преобразования, и, поскольку это сложный продукт C++ с открытым исходным кодом, исправить проблемы с точностью очень сложно и медленно.

В качестве альтернативы, если макет DOCX кажется вам слишком сложным для самостоятельной реализации, вы также можете преобразовать его в HTML и использовать для отображения в браузере. Вы также можете обратиться к одному из внештатных XML-разработчиков Toptal.

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

Применимо к: информация в этом разделе относится к проектам уровня документа для Word. Дополнительные сведения см. в разделе Возможности, доступные в зависимости от приложения Office и типа проекта.

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

В этом пошаговом руководстве показаны следующие задачи:

Добавление элементов управления содержимым в документ Word в проекте уровня документа во время разработки.

Создание файла данных XML и схемы XML, определяющей элементы для привязки к элементам управления содержимым.

Присоединение XML-схемы к документу во время разработки.

Добавление содержимого XML-файла в настраиваемую XML-часть документа во время выполнения.

Привязка элементов управления содержимым к элементам пользовательской XML-части.

Привязка DropDownListContentControl к набору значений, определенных в схеме XML.

В следующих инструкциях на вашем компьютере могут отображаться другие имена или местоположения для некоторых элементов пользовательского интерфейса Visual Studio. Эти элементы определяются имеющейся у вас версией Visual Studio и параметрами, которые вы используете. Дополнительные сведения см. в разделе Персонализация среды IDE.

Предпосылки

Для выполнения этого пошагового руководства вам потребуются следующие компоненты:

Выпуск Visual Studio, включающий инструменты разработчика Microsoft Office. Дополнительные сведения см. в разделе Настройка компьютера для разработки решений Office.

Создать новый проект документа Word

Создайте документ Word, который вы будете использовать в пошаговом руководстве.

Чтобы создать новый проект документа Word

Создайте проект документа Word с именем EmployeeControls. Создайте новый документ для решения. Дополнительные сведения см. в разделе Как создавать проекты Office в Visual Studio.

Visual Studio открывает новый документ Word в конструкторе и добавляет проект EmployeeControls в обозреватель решений.

Добавить элементы управления содержимым в документ

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

Чтобы добавить элементы управления содержимым в документ

В документе Word, размещенном в конструкторе Visual Studio, на ленте выберите вкладку "Вставка".

В группе "Таблицы" выберите "Таблица" и вставьте таблицу с двумя столбцами и тремя строками.

Введите текст в первый столбец, чтобы он напоминал следующий столбец:

Во втором столбце таблицы выберите первую строку (рядом с именем сотрудника).

На ленте выберите вкладку "Разработчик".

Если вкладка "Разработчик" не отображается, ее необходимо сначала отобразить. Дополнительные сведения см. в разделе Как: показать вкладку разработчика на ленте.

В группе «Элементы управления» нажмите кнопку «Текст», чтобы добавить PlainTextContentControl в первую ячейку.

Во втором столбце таблицы выберите вторую строку (рядом с датой приема на работу).

В группе "Элементы управления" нажмите кнопку "Выбор даты", чтобы добавить DatePickerContentControl во вторую ячейку.

Во втором столбце таблицы выберите третью строку (рядом с заголовком).

В группе «Элементы управления» нажмите кнопку «Раскрывающийся список», чтобы добавить DropDownListContentControl в последнюю ячейку.

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

Создайте файл данных XML

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

Чтобы создать файл данных

В меню "Проект" выберите "Добавить новый элемент".

Появится диалоговое окно "Добавить новый элемент".

На панели "Шаблоны" выберите XML-файл.

Назовите файл employee.xml и нажмите кнопку "Добавить".

Файл employee.xml открывается в редакторе кода.

Замените содержимое файла employee.xml следующим текстом.

В обозревателе решений выберите файл employee.xml.

В окне "Свойства" выберите свойство "Действие сборки", а затем измените значение на "Встроенный ресурс".

На этом шаге XML-файл встраивается в качестве ресурса в сборку при сборке проекта. Это позволяет вам получить доступ к содержимому XML-файла во время выполнения.

Создать XML-схему

Если вы хотите привязать элемент управления содержимым к одному элементу в настраиваемой части XML, вам не нужно использовать схему XML. Однако для привязки DropDownListContentControl к набору значений необходимо создать XML-схему, которая проверяет созданный ранее файл данных XML. Схема XML определяет возможные значения для элемента title. Вы привяжете DropDownListContentControl к этому элементу позже в этом пошаговом руководстве.

Чтобы создать XML-схему

В меню "Проект" выберите "Добавить новый элемент".

Появится диалоговое окно "Добавить новый элемент".

На панели "Шаблоны" выберите "Схема XML".

Назовите схему employee.xsd и нажмите кнопку "Добавить".

Откроется конструктор схем.

В обозревателе решений откройте контекстное меню для файла employee.xsd и выберите «Просмотреть код».

Замените содержимое файла employee.xsd следующей схемой.

В меню "Файл" нажмите "Сохранить все", чтобы сохранить изменения в файлах employee.xml и employee.xsd.

Прикрепите XML-схему к документу

Вы должны прикрепить XML-схему к документу, чтобы связать DropDownListContentControl с допустимыми значениями элемента title.

Чтобы прикрепить схему XML к документу ( Word 2013)

Активируйте файл EmployeeControls.docx в дизайнере.

На ленте выберите вкладку "Разработчик", а затем нажмите кнопку "Надстройки".

В диалоговом окне "Шаблоны и надстройки" выберите вкладку "Схема XML", а затем нажмите кнопку "Добавить схему".

Перейдите к созданной ранее схеме employee.xsd, расположенной в каталоге вашего проекта, и нажмите кнопку "Открыть".

Нажмите кнопку "ОК" в диалоговом окне "Параметры схемы".

Нажмите кнопку "ОК", чтобы закрыть диалоговое окно "Шаблоны и надстройки".

Чтобы прикрепить XML-схему к документу (Word 2010)

Активируйте файл EmployeeControls.docx в дизайнере.

На ленте выберите вкладку "Разработчик".

В группе XML нажмите кнопку Схема.

В диалоговом окне "Шаблоны и надстройки" выберите вкладку "Схема XML", а затем нажмите кнопку "Добавить схему".

Перейдите к созданной ранее схеме employee.xsd, расположенной в каталоге вашего проекта, и нажмите кнопку "Открыть".

Нажмите кнопку "ОК" в диалоговом окне "Параметры схемы".

Нажмите кнопку "ОК", чтобы закрыть диалоговое окно "Шаблоны и надстройки".

Откроется панель задач "Структура XML".

Закройте панель задач "Структура XML".

Добавить пользовательскую часть XML в документ

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

Чтобы добавить пользовательскую часть XML в документ

В обозревателе решений откройте контекстное меню для ThisDocument.cs или ThisDocument.vb, а затем выберите «Просмотреть код».

Добавьте следующие объявления в класс ThisDocument. Этот код объявляет несколько объектов, которые вы будете использовать для добавления пользовательской XML-части в документ.

Добавьте следующий метод в класс ThisDocument. Этот метод получает содержимое файла данных XML, встроенного в сборку в качестве ресурса, и возвращает содержимое в виде строки XML.

Добавьте следующий метод в класс ThisDocument. Метод AddCustomXmlPart создает новую пользовательскую часть XML, содержащую строку XML, которая передается методу.

Чтобы убедиться, что пользовательская часть XML создается только один раз, метод создает пользовательскую часть XML только в том случае, если пользовательская часть XML с совпадающим идентификатором GUID еще не существует в документе. При первом вызове этого метода значение свойства Id сохраняется в строке employeeXMLPartID. Значение строки employeeXMLPartID сохраняется в документе, поскольку оно было объявлено с использованием атрибута CachedAttribute.

Привязать элементы управления содержимым к элементам пользовательской XML-части

Привяжите каждый элемент управления содержимым к элементу в настраиваемой части XML с помощью свойства XMLMapping каждого элемента управления содержимым.

Чтобы привязать элементы управления содержимым к элементам в пользовательской XML-части

Добавьте следующий метод в класс ThisDocument. Этот метод привязывает каждый элемент управления содержимым к элементу в настраиваемой XML-части и задает формат отображения даты для DatePickerContentControl.

Запускайте свой код при открытии документа

Создайте пользовательскую часть XML и привяжите пользовательские элементы управления к данным при открытии документа.

Чтобы запустить код при открытии документа

Добавьте следующий код в метод ThisDocument_Startup класса ThisDocument. Этот код получает строку XML из файла employee.xml, добавляет строку XML в новую пользовательскую часть XML в документе и привязывает элементы управления содержимым к элементам в пользовательской части XML.

Протестировать проект

Когда вы открываете документ, элементы управления содержимым отображают данные из элементов в настраиваемой XML-части. Вы можете щелкнуть DropDownListContentControl, чтобы выбрать одно из трех допустимых значений для элемента title, определенных в файле employee.xsd. Если вы редактируете данные в любом из элементов управления содержимым, новые значения сохраняются в настраиваемой XML-части документа.

Чтобы протестировать элементы управления контентом

Нажмите F5, чтобы запустить проект.

Убедитесь, что таблица в документе похожа на следующую таблицу. Каждая из строк во втором столбце получена из элемента пользовательской XML-части документа.

Выберите ячейку справа от ячейки «Имя сотрудника» и введите другое имя.

Выберите ячейку справа от ячейки «Дата приема на работу» и выберите другую дату в средстве выбора даты.

Выберите ячейку справа от ячейки Заголовок и выберите новый элемент в раскрывающемся списке.

Сохраните и закройте документ.

В проводнике откройте папку \bin\Debug в расположении вашего проекта.

Откройте контекстное меню для файла EmployeeControls.docx и выберите «Переименовать».

Назовите файл EmployeeControls.docx.zip.

Документ EmployeeControls.docx сохраняется в формате Open XML. Переименовав этот документ с расширением имени файла .zip, вы сможете изучить его содержимое. Дополнительные сведения об Open XML см. в технической статье Знакомство с форматами файлов Office (2007) Open XML.

Откройте файл EmployeeControls.docx.zip.

Откройте папку customXml.

Откройте контекстное меню для item2.xml и выберите "Открыть".

Этот файл содержит пользовательскую часть XML, которую вы добавили в документ.

Убедитесь, что элементы name , HireDate и title содержат новые значения, которые вы ввели в элементы управления содержимым в документе.

Закройте файл item2.xml.

Дальнейшие шаги

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

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

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

Используйте элементы управления содержимым для защиты частей документа. Дополнительные сведения см. в разделе Как защитить части документов с помощью элементов управления содержимым.

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

ОБЫЧНЫЕ ПРЕОБРАЗОВАТЕЛИ ЕДИНИЦ DOCX XML
20-я точка Точки
dxa/20
Дюймы
pt/72
Сантиметры
in*2,54
Половинный размер шрифта
pt/144
EMU
in*914400
Пример 11906 595,3 8,27… 21,00086… 4,135 7562088
Теги, использующие это pgSz/pgMar/w:spacing w:sz wp:extent, a:ext