Erika wrote a couple posts worth a look regarding Data driven document generation.
Data-driven document generation with Word 2007 and the Office XML File Formats: Part 1
Data-driven document generation with Word 2007 and the Office XML File Formats: Part 2
Also If you wanted to take a Mail Merge word doc and port it over to XML
Migrating Mail Merge Fields to Content Controls ( I republished the code so that its legible)
Private Sub Document_Open() If (MsgBox("Convert Mail Merge fields to Content Controls?", vbYesNo, "Convert Mail Merge Fields") = vbYes) Then ConvertMailMergeFields End If End Sub '** Traverse Mail Merge fields collection and convert each mail merge field into a content control '** while preserving its font style and format. Private Sub ConvertMailMergeFields() Dim i As Integer, Count As Integer Dim currentFont As Font Dim mergeFieldname As String Dim field As MailMergeField For Each field In ActiveDocument.MailMerge.Fields '** Select Mail Merge field to process. field.Select Set currentFont = Selection.Font '** Set name for content control. mergeFieldname = GetMailMergeFieldName(field.Code) Debug.Print ("Processing [" & mergeFieldname & "]") '** Remove Mail Merge field and replace it with addition of new content control. Selection.Cut '** Add new content control. AddContentControl mergeFieldname, currentFont Count = Count + 1 Next Debug.Print ("Number of Mail Merge Fields converted to Content Controls: " & Count) End Sub '** Add new content control. Private Sub AddContentControl(ByVal mergeFieldname As String, ByVal currentFont As Font) Dim newControl As ContentControl Dim fontStyleName As String Set newControl = ActiveDocument.ContentControls.Add(wdContentControlText) '** The Title property only allows for 64 characters. '** If name is longer, we will put the rest in the Tag property. If (Len(mergeFieldname) < 64) Then newControl.Title = mergeFieldname newControl.Tag = "" Else newControl.Title = Mid(mergeFieldname, 1, 64) newControl.Tag = Mid(mergeFieldname, 65, Len(mergeFieldname) - 64) End If newControl.SetPlaceholderText , , "Click to add." '** Set font for content control. fontStyleName = GetFontStyleName(currentFont) SetFontStyle newControl, fontStyleName, currentFont '** Allow carriage return. newControl.MultiLine = True End Sub '** Quick and dirty way to check to see if the given font style exist; if it does not, create it. Private Sub SetFontStyle(ByRef newControl As ContentControl, ByVal fontStyleName As String, ByVal currentFont As Font) On Error GoTo Error_FontStyleDoesNotExist newControl.DefaultTextStyle = fontStyleName Exit Sub Error_FontStyleDoesNotExist: AddNewFontStyle fontStyleName, currentFont newControl.DefaultTextStyle = fontStyleName End Sub Private Sub AddNewFontStyle(ByVal newFontStyleName As String, ByVal currentFont As Font) Dim fontStyle As Style Set fontStyle = ActiveDocument.Styles.Add(newFontStyleName) With currentFont fontStyle.Font.Name = .Name fontStyle.Font.Size = .Size fontStyle.Font.Bold = .Bold fontStyle.Font.Italic = .Italic End With End Sub Private Function GetFontStyleName(ByVal currentFont As Font) As String Dim fontStyleName As String With currentFont fontStyleName = .Name fontStyleName = fontStyleName & .Size fontStyleName = fontStyleName & .Bold fontStyleName = fontStyleName & .Italic End With '** Return result. GetFontStyleName = fontStyleName End Function Private Function GetMailMergeFieldName(ByVal fieldCode As String) As String Dim mergeFieldname As String: mergeFieldname = "" '** Name of Mail merge field: MERGEFIELD MailMergeFieldName \* MERGEFORMAT mergeFieldname = Replace(fieldCode, "MERGEFIELD", "") mergeFieldname = Replace(mergeFieldname, "\* MERGEFORMAT", "") mergeFieldname = Trim(mergeFieldname) '** Return result. GetMailMergeFieldName = mergeFieldname End Function
Remember Me
a@href@title, b, blockquote@cite, em, i, strike, strong, sub, super, u
Disclaimer The opinions expressed herein are my own personal opinions and do not represent my employer's view in anyway.