MailMergeBookmarks.cs
C# VB
//// This code is part of Document Solutions for Word demos.// Copyright (c) MESCIUS inc. All rights reserved.//using System.IO;using GrapeCity.Documents.Word;
namespace DsWordWeb.Demos{ // 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 { public GcWordDocument CreateDocx() { GcWordDocument doc = new GcWordDocument(); doc.Load(Path.Combine("Resources", "WordDocs", "MailMergeBmk-tpl.docx"));
var bmks = doc.Body.Bookmarks;
// 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;
// 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. void setBmkText(string bmk, string value) { if (!bmks.Contains(bmk)) return; var t = bmks[bmk].GetRange(); t.Texts[0].Value = value; for (int i = t.Texts.Count - 1; i > 0; --i) t.Texts[i].Delete(); } } }}