Free Support Forum - aspose.com

Removing MergeFielld from labels when the data is NULL

I'm trying to produce mailing labels from a database that has both address1 and address2 fields. The problem I am having is that if address2 is NULL (verified from the data) then a blank line appears in the output document. This is the code we are using and any help would be greatly appreciated. Thanks! Bill

// Remove Empty Paragraphs

doc.MailMerge.RemoveEmptyParagraphs = true;

// Do the mail merge from the DataVeiew to the document

doc.MailMerge.Execute(dv.ToTable());

// Remove Next_Field when document from empty records

ArrayList list = new ArrayList();

NodeCollection collection = doc.GetChildNodes(NodeType.FieldStart, true);

foreach (FieldStart start in collection)

{

if (start.FieldType == FieldType.FieldNext || start.FieldType == FieldType.FieldMergeField)

{

list.Add(start);

}

}

foreach (Node start in list)

{

Node node = start;

while (node.NodeType != NodeType.FieldEnd)

{

node = node.NextSibling;

node.PreviousSibling.Remove();

}

node.Remove();

}

// Strip out merged fields with no data

int i;

string[] names = doc.MailMerge.GetFieldNames();

DocumentBuilder builder = new DocumentBuilder(doc);

for (i = 1; i < names.Length; i++)

{

builder.MoveToMergeField(names[i]);

}

//Save the mail merge document as Out.doc

doc.Save(MyPath + @"\Out.doc");

HttpContext.Current.Response.ContentType = "application/ms-word";

HttpContext.Current.Response.AddHeader("Content-Disposition", "inline;filename=Out.doc");

HttpContext.Current.Response.TransmitFile("Out.doc");

Hi<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

Thanks for your request. The following code should work for you.

// Remove Empty Paragraphs

doc.MailMerge.RemoveEmptyParagraphs = true;

// Do the mail merge from the DataVeiew to the document

doc.MailMerge.Execute(dv.ToTable());

//Delete not merged fields

doc.MailMerge.DeleteFields();

Could you also please attach your template and output document for investigating?

Best regards.

Thank you for responding!

I tried that and it didn't work. I still get blank lines in the output labels.

Please see the template attached. I can't seem to attach more than one file.

Thanks!

Document doc = new Document(stream);
string MyPath = HttpContext.Current.Server.MapPath(".");


// Create a DataView via the data source using Program and Term
DataView dv = (DataView dsrcStudentAddresses .Select(DataSourceSelectArguments.Empty);


try
{
// Remove Empty Paragraphs
doc.MailMerge.RemoveEmptyParagraphs = true;

// Do the mail merge from the DataVeiew to the document
doc.MailMerge.Execute(dv.ToTable());

//Delete not merged fields
doc.MailMerge.DeleteFields();

// Remove Next_Field when document from empty records
ArrayList list = new ArrayList();
NodeCollection collection = doc.GetChildNodes(NodeType.FieldStart, true);
foreach (FieldStart start in collection)
{
if (start.FieldType == FieldType.FieldNext || start.FieldType == FieldType.FieldMergeField)
{
list.Add(start);
}
}
foreach (Node start in list)
{
Node node = start;
while (node.NodeType != NodeType.FieldEnd)
{
node = node.NextSibling;
node.PreviousSibling.Remove();
}
node.Remove();
}

// Strip out merged fields with no data
int i;
string[] names = doc.MailMerge.GetFieldNames();
DocumentBuilder builder = new DocumentBuilder(doc);
for (i = 1; i < names.Length; i++)
{
builder.MoveToMergeField(names[i]);
}

//Save the mail merge document as Out.doc
doc.Save(MyPath + @"\Out.doc");
HttpContext.Current.Response.ContentType = "application/ms-word";
HttpContext.Current.Response.AddHeader("Content-Disposition", "inline;filename=Out.doc");
HttpContext.Current.Response.TransmitFile("Out.doc");
}
catch (Exception ex)
{
lblErrors.Text = ex.Message;
}

dv = null;
doc = null;
stream = null;
ioStream = null;

}

Hi<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

Thanks for additional information. RemoveEmptyParagraphs doesn’t work in your case because line with mergefield “Address2” also contains few white characters. So paragraph is not empty. I changed your template and now all works fine. Please see the following code and the attached documents.

string[] names = { "FirstName", "LastName", "Address1", "Address2", "City", "State", "Zip" };

//Address2 line will be removed

object[] values = { "Alexey", "Noskov", "My addres", null, "City", "State", "Zip" };

//Open template

Document doc = new Document(@"Test206\in.doc");

doc.MailMerge.RemoveEmptyParagraphs = true;

//Execute mail merge

doc.MailMerge.Execute(names, values);

//Save document

doc.Save(@"Test206\out.doc");

Hope this helps

Best regards.

Thanks so very much! That solved the problem.

I had been trying unsuccessfully to add {IF...} syntax to skip the field if it was "" and I must have left behind a few white space spaces.

It works like a charm now!

Thanks again,

Bill