MailMerge.UseWholeParagraphAsRegion property

Gets or sets a value indicating whether whole paragraph with TableStart or TableEnd field or particular range between TableStart and TableEnd fields should be included into mail merge region.

public bool UseWholeParagraphAsRegion { get; set; }


The default value is true.


Shows the relationship between mail merge regions and paragraphs.

public void UseWholeParagraphAsRegion(bool useWholeParagraphAsRegion)
    Document doc = CreateSourceDocWithNestedMergeRegions();
    DataTable dataTable = CreateSourceTableDataTableForOneRegion();

    // By default, a paragraph can belong to no more than one mail merge region.
    // The contents of our document do not meet these criteria.
    // If we set the "UseWholeParagraphAsRegion" flag to "true",
    // running a mail merge on this document will throw an exception.
    // If we set the "UseWholeParagraphAsRegion" flag to "false",
    // we will be able to execute a mail merge on this document.
    doc.MailMerge.UseWholeParagraphAsRegion = useWholeParagraphAsRegion;

    if (useWholeParagraphAsRegion)
        Assert.Throws<InvalidOperationException>(() => doc.MailMerge.ExecuteWithRegions(dataTable));

    // The mail merge populates our first region while leaving the second region unused
    // since it is the region that breaks the rule.
    doc.Save(ArtifactsDir + "MailMerge.UseWholeParagraphAsRegion.docx");

/// <summary>
/// Create a document with two mail merge regions sharing one paragraph.
/// </summary>
private static Document CreateSourceDocWithNestedMergeRegions()
    Document doc = new Document();
    DocumentBuilder builder = new DocumentBuilder(doc);

    builder.Write("Region 1: ");
    builder.InsertField(" MERGEFIELD TableStart:MyTable");
    builder.InsertField(" MERGEFIELD Column1");
    builder.Write(", ");
    builder.InsertField(" MERGEFIELD Column2");
    builder.InsertField(" MERGEFIELD TableEnd:MyTable");

    builder.Write(", Region 2: ");
    builder.InsertField(" MERGEFIELD TableStart:MyOtherTable");
    builder.InsertField(" MERGEFIELD TableEnd:MyOtherTable");

    return doc;

/// <summary>
/// Create a data table that can populate one region during a mail merge.
/// </summary>
private static DataTable CreateSourceTableDataTableForOneRegion()
    DataTable dataTable = new DataTable("MyTable");
    dataTable.Rows.Add(new object[] { "Value 1", "Value 2" });

    return dataTable;

See Also