We're sorry Aspose doesn't work properply without JavaScript enabled.

Free Support Forum - aspose.com

How can I avoid removing merge field if field value is null or empty during mail merge operation

Hi there,

How can I avoid removing merge field if field value is null or empty during mail merge operation.

Regards,

Pradeep

Hi Pradeep,

Thanks for your inquiry. In your case, I suggest you following two solutions.

  1. Please exclude the field names from your data source which have empty or null value before performing mail merge.
  2. Insert bookmark at the position of mail merge field which have empty or null value. In this case, you need to implement IFieldMergingCallback interface. After mail merge process, insert the mail merge field at bookmark’s position using DocumentBuilder.InsertField. Please check the following code example for your kind reference. Hope this helps you. Please let us know if you have any more queries.
Document doc = new Document(MyDir + "in.docx");
DocumentBuilder builder = new DocumentBuilder(doc);
doc.MailMerge.FieldMergingCallback = new HandleMergeFieldTest();
// Call doc.MailMerge.Execute() OR 
// doc.MailMerge. ExecuteWithRegions () 
foreach (Bookmark bookmark in doc.Range.Bookmarks)
{
    if (bookmark.Name.StartsWith("BM"))
    {
        builder.MoveToBookmark(bookmark.Name);
        builder.InsertField(@"MERGEFIELD " + bookmark.Name.Substring(2, bookmark.Name.Length - 2) + " \\* MERGEFORMAT");
    }
}
doc.Range.Bookmarks.Clear();
doc.Save(MyDir + "Out.docx");
private class HandleMergeFieldTest : IFieldMergingCallback
{
    // / 
    // / This is called when merge field is actually merged with data in the document.
    // / 
    void IFieldMergingCallback.FieldMerging(FieldMergingArgs e)
    {
        DocumentBuilder builder = new DocumentBuilder(e.Document);
        if (e.FieldValue == null || e.FieldValue.ToString().Trim() == "")
        {
            builder.MoveToMergeField(e.DocumentFieldName, true, false);
            builder.StartBookmark("BM" + e.FieldName.Trim());
            builder.EndBookmark("BM" + e.FieldName.Trim());
        }
    }
    void IFieldMergingCallback.ImageFieldMerging(ImageFieldMergingArgs e)
    {
        // Do nothing.
    }
}