Word 2007~Aspose Skip Empty Cell

时间:2013-02-05 17:58:51

标签: mailmerge aspose

我使用Aspose with Word进行邮件合并。

我有一个3x2表格如下

<a>    <b>
<c>    <d>
<e>    <f>

然而,在某些情况下,一个字段可能是空白的,如果是这种情况,我想省略整个单元格 - 即不只是有一个空单元格。即。

<a>    <b>
<e>    <d>
       <f>

所以在上面的例子中c是空的,因此没有显示?

可以这样做吗?

我尝试过IF和空白的MERGEFIELDS也是NextIf。

1 个答案:

答案 0 :(得分:1)

@乔恩,

您可能需要实现IFieldMergingCallback接口。事件处理程序“FieldMerging”可用于实现对邮件合并过程的自定义控制。例如,您可以检查传入的MergeField的值为“null”或“空字符串”,然后根据此决定删除父Cell。以下是示例代码:

Document doc = new Document(@"C:\Temp\template.docx");
doc.MailMerge.FieldMergingCallback = new HandleMergeFields();
doc.MailMerge.Execute(new string[] { "a", "b", "c", "d", "e", "f" },
                        new object[] { "<a>", "<b>", "", "<d>", "<e>", "<f>" });
doc.Save(@"C:\Temp\out.doc");

private class HandleMergeFields : IFieldMergingCallback
{
    void IFieldMergingCallback.FieldMerging(FieldMergingArgs args)
    {
        DocumentBuilder builder = new DocumentBuilder(args.Document);
        if (string.IsNullOrEmpty(args.FieldValue.ToString()))
        {
            Field field = args.Field;
            Cell cell = field.Start.GetAncestor(NodeType.Cell) as Cell;
            // Remove the MergeField
            builder.MoveToMergeField(args.FieldName);
            //Remove the Cell
            cell.Remove();
        }
    } 
    void IFieldMergingCallback.ImageFieldMerging(ImageFieldMergingArgs e)
    {
        // Do nothing
    }
}