Поделиться через


Привязка элементов управления к определенной строке в хранилище данных при вставке стандартного блока

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

Используйте элементы управления содержимым в пользовательских стандартных блоках, сопоставленных с XML- данными. Затем содержимое этих элементов управления содержимым автоматически связывается с соответствующей настраиваемой XML-частью (если она присутствует) при вставке части. Кроме того, как показано в следующем примере, можно динамически добавить настраиваемую XML-часть и сопоставления XML при вставке части. Например, чтобы создать титульную страницу, можно разместить элемент управления содержимым рисунка, который отображает изображение, полученное из элемента, во присоединенном объекте CustomXMLPart . Аналогичным образом можно создать имя проекта с помощью элемента управления текстовым содержимым, сопоставленного с элементом в объекте CustomXMLPart , содержащим имя проекта.

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

В этих примерах используются следующие объекты:

  • ContentControl

  • ContentControls

  • CustomXMLPart (основная объектная модель Microsoft Office)

  • CustomXMLParts (базовая объектная модель Microsoft Office)

  • XMLMapping

Пример

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

<?xml version="1.0" encoding="utf-8" ?> 
<projects> 
  <project> 
    <title>Data-Driven Document Generation</title> 
    <manager>Frank Martinez</manager> 
    <customer>Northwind Traders</customer> 
  </project> 
</projects>

Следующий пример кода загружает предыдущий XML-файл и сопоставляет каждый элемент управления содержимым с соответствующим узлом XML в этой новой настраиваемой XML-части при добавлении стандартного блока документа с именем "Отчет компании".

Private Sub Document_BuildingBlockInsert(ByVal Range As Range, _ 
        ByVal Name As String, ByVal Category As String, _ 
        ByVal Type As String, ByVal Template As String) 
 
    Dim cc As ContentControl 
    Dim part As CustomXMLPart 
 
    If Name = "Company Report" Then 
        'add the custom XML 
        ActiveDocument.CustomXMLParts.Add 
        Set part = ActiveDocument.CustomXMLParts(ActiveDocument.CustomXMLParts.Count).Load("c:\myProjects.xml") 
 
        'map the controls 
        For Each cc In Range.ContentControls 
            cc.XMLMapping.SetMapping cc.XMLMapping.XPath, cc.XMLMapping.PrefixMappings, part 
        Next cc 
    End If 
 
End Sub

Поддержка и обратная связь

Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.