В следующем примере предполагается, что вы хотите вставить элемент управления содержимым, сопоставленный с одним из встроенных свойств Word, в текущий допустимый выбор в Windows Desktop Word (то есть в открытом документе). См. Следующие примечания.
Option Explicit
' a simple test - assume a document is open in Word
' and you want to insert a "Property Content Control"
' at the current selection
Dim wapp
Set wapp = Getobject(,"Word.Application")
Call insertAndMapProperty(wapp.Selection.Range,"companyfax")
Set wapp = Nothing
Sub insertAndMapProperty(Location, PropertyName) ' As Word.Range, As String
' Location is a Word Range where you want to insert the Content Control
'
' pass the name of the element (since it does not change when you change the user interface language)
Select Case LCase(Trim(PropertyName))
Case "abstract"
setCoverPageProps Location, "Abstract", "Abstract"
Case "category"
setMSCoreProps Location, "category", "Category"
Case "company"
setExtendedProps Location, "Company", "Company"
Case "contentstatus"
setMSCoreProps Location, "contentStatus", "Status"
Case "creator"
setDCoreProps Location, "creator", "Author"
Case "companyaddress"
setCoverPageProps Location, "CompanyAddress", "Company Address"
Case "companyemail"
setCoverPageProps Location, "CompanyEmail", "Company E-mail"
Case "companyfax"
setCoverPageProps Location, "CompanyFax", "Company Fax"
Case "companyphone"
setCoverPageProps Location, "CompanyPhone", "Company Phone"
Case "description"
setDCoreProps Location, "description", "Comments"
Case "keywords"
setMSCoreProps Location, "keywords", "Keywords"
Case "manager"
setExtendedProps Location, "Manager", "Manager"
Case "publishdate"
setCoverPageProps Location, "PublishDate", "Publish Date"
Case "subject"
setDCoreProps Location, "subject", "Subject"
Case "title"
setDCoreProps Location, "title", "Title"
Case Else
Wscript.Echo "Unrecognized property name: " & PropertyName
End Select
End Sub
Sub setCoverPageProps(Location, PropertyName, TitlePlaceHolder)
Const missing = Nothing
Const coverPageMappings = "xmlns:ns0='http://schemas.microsoft.com/office/2006/coverPageProps'"
With Location.ContentControls.Add(1) '1=wdContentControlText
.Title = TitlePlaceHolder
.XMLMapping.SetMapping "/ns0:CoverPageProperties[1]/ns0:" & PropertyName & "[1]", coverPageMappings, missing
.SetPlaceHolderText missing, missing, "[" & TitlePlaceHolder & "]"
End With
End Sub
Sub setDCoreProps(Location, PropertyName, TitlePlaceHolder)
Const missing = Nothing
Const DCoreMappings = "xmlns:ns0='http://purl.org/dc/elements/1.1/' xmlns:ns1='http://schemas.openxmlformats.org/package/2006/metadata/core-properties'"
With Location.ContentControls.Add(1)
.Title = TitlePlaceHolder
.XMLMapping.SetMapping "/ns1:coreProperties[1]/ns0:" & PropertyName & "[1]", DCoreMappings, missing
.SetPlaceHolderText missing, missing, "[" & TitlePlaceHolder & "]"
End With
End Sub
Sub setMSCoreProps(Location, PropertyName, TitlePlaceHolder)
Const missing = Nothing
Const MSCoreMappings = "xmlns:ns0='http://schemas.openxmlformats.org/package/2006/metadata/core-properties'"
With Location.ContentControls.Add(1)
.Title = TitlePlaceHolder
.XMLMapping.SetMapping "/ns0:coreProperties[1]/ns0:" & PropertyName & "[1]", MSCoreMappings, missing
.SetPlaceHolderText missing, missing, "[" & TitlePlaceHolder & "]"
End With
End Sub
Sub setExtendedProps(Location, PropertyName, TitlePlaceHolder)
Const missing = Nothing
Const extendedMappings = "xmlns:ns0='http://schemas.openxmlformats.org/officeDocument/2006/extended-properties'"
With Location.ContentControls.Add(1)
.Title = TitlePlaceHolder
.XMLMapping.SetMapping "/ns0:Properties[1]/ns0:" & PropertyName & "[1]", extendedMappings, missing
.SetPlaceHolderText missing, missing, "[" & TitlePlaceHolder & "]"
End With
End Sub
Примечания: -
Под «допустимым выбором» я подразумеваю выбор, который не вызовет ошибку / исключение Word. То есть вам нужно будет сделать намного больше, чтобы избежать исключений.
Описательные тексты (заголовок, заполнитель) здесь предназначены для тех случаев, когда вы вставляете эти элементы управления с языком пользовательского интерфейса Word, установленным на Engli sh (и возможно только некоторые специфические c английские sh версии). Если ваш язык интерфейса, скажем, французский, вы можете предпочесть использовать французские эквиваленты для заголовка элемента управления содержимым и заполнителя. Не очевидно, как можно найти эти тексты из объектной модели Word.
В Word существует ряд различных типов «свойств», включая
- встроенные основные свойства
- встроенные свойства приложения
- встроенные расширенные свойства
- встроенные свойства CoverPageProps
- устаревшие пользовательские свойства (настраиваемые свойства документа Word)
- содержимое -type свойства
- (возможно) Переменные документа Word
- элементы / атрибуты, определенные программистом в Word Custom XML Части.
Вы можете вставить значения многие из этих свойств с использованием традиционных «кодов полей» Word. Чтобы вставить значения без использования VBA (скажем), вам потребуется элемент управления содержимым, сопоставленный с CustomXMLPart.
В файле документа типа .docx (.docx, .docm , .dotx, .dotm), свойства встроенного ядра, свойства встроенного приложения и встроенные расширенные свойства хранятся в предварительно определенных файлах. xml. например, приложение xml и c. Однако, когда Word открывает такой документ, он создает два Word CustomXMLParts. Другая стандартная настраиваемая часть XML содержит значения «CoverPageProps»
. Вы можете сопоставить элемент управления содержимым с любым элементом или атрибутом внутри настраиваемой части XML, включая эти части. Но Word не копирует значения встроенных свойств документа, таких как «Количество слов», в Custom XML Parts, а это означает, что нет встроенного способа вставить Content Control , который отображает число слов в документе или Content Control , который отображает значение определяемого пользователем свойства документа.