''
'' This code is part of Document Solutions for Word demos.
'' Copyright (c) MESCIUS inc. All rights reserved.
''
Imports System
Imports System.IO
Imports System.Drawing
Imports System.Collections.Generic
Imports System.Linq
Imports GrapeCity.Documents.Word
'' This sample demonstrates one possible approach to generating documents
'' using a specially prepared DOCX as the template, and filled with data programmatically,
'' useful for example in mail merge applications.
'' Here the template document has parts that should be replaced with data marked
'' with bookmarks, each bookmark defined on the whole part that needs replacing.
'' For convenience, such parts in the document text are enclosed in square brackets,
'' with text equal to the corresponding bookmark's name.
'' In MS Word, use Insert | Bookmarks to inspect or add bookmarks.
Public Class MailMergeBookmarks
Function CreateDocx() As GcWordDocument
Dim doc = New GcWordDocument()
'' Load the template document:
doc.Load(Path.Combine("Resources", "WordDocs", "MailMergeBmk-tpl.docx"))
'' Get the bookmarks collection:
Dim bmks = doc.Body.Bookmarks
'' Method to replace a bookmarked text with a specified value.
'' Note:
'' - We replace the first bookmarked run with the specified value,
'' so the replacement will be formatted as the first bookmarked run;
'' - MS Word may have created multiple runs for a bookmarked text,
'' so we need to make sure we remove all but the first run.
Dim setBmkText As Action(Of String, String) =
Sub(bmk, value)
If Not bmks.Contains(bmk) Then
Return
End If
Dim t = bmks(bmk).GetRange()
t.Texts(0).Value = value
For i = t.Texts.Count - 1 To 1 Step -1
t.Texts(i).Delete()
Next
End Sub
'' Replace bookmarks with actual data. In a real life sample,
'' this would usually be a loop over a data source.
setBmkText("title", "Mr.")
setBmkText("surname", "Smith")
setBmkText("address", "123 Bits Dr.")
setBmkText("city", "Byteville")
setBmkText("state", "VT")
setBmkText("zip", "12345")
setBmkText("country", "U.S.A.")
'' Done:
Return doc
End Function
End Class