MailMerge

MailMerge class

代表邮件合并功能。

要了解更多信息,请访问邮件合并和报告文档文章。

public class MailMerge

特性

姓名描述
CleanupOptions { get; set; }获取或设置一组标志,指定在邮件合并期间应删除哪些项目。
CleanupParagraphsWithPunctuationMarks { get; set; }获取或设置一个值,该值指示带标点符号的段落是否被视为空 ,并且如果RemoveEmptyParagraphs已指定选项。
FieldMergingCallback { get; set; }在邮件合并过程中,当文档中遇到邮件合并字段时发生。
MailMergeCallback { get; set; }允许在邮件合并期间处理特定事件。
MappedDataFields { get; }返回表示邮件合并操作的映射数据字段的集合。
MergeDuplicateRegions { get; set; }获取或设置一个值,该值指示在针对数据源或仅第一个区域执行邮件合并时是否应合并具有数据源 名称的所有文档邮件合并区域。
MergeWholeDocument { get; set; }获取或设置一个值,该值指示在执行区域邮件合并时是否更新整个文档中的字段。
PreserveUnusedTags { get; set; }获取或设置一个值,该值指示是否应保留未使用的“mustache”标签。
RegionEndTag { get; set; }获取或设置邮件合并区域结束标记。
RegionStartTag { get; set; }获取或设置邮件合并区域开始标记。
RestartListsAtEachSection { get; set; }获取或设置一个值,该值指示执行邮件合并后是否在每个部分重新启动列表。
RetainFirstSectionStart { get; set; }获取或设置一个值,指示是否SectionStart第一个文档部分及其后续数据源行的副本 在邮件合并期间保留或根据 MS Word 行为进行更新。
TrimWhitespaces { get; set; }获取或设置一个值,该值指示是否从邮件合并值中删除尾随和前导空格。
UnconditionalMergeFieldsAndRegions { get; set; }获取或设置一个值,该值指示合并字段和合并区域是否合并,无论父 IF 字段的条件如何。
UseNonMergeFields { get; set; }真的,指定除了 MERGEFIELD 字段之外,还会将邮件合并到其他一些类型的字段中,并且 还执行到“{{fieldName}}”标签中。
UseWholeParagraphAsRegion { get; set; }获取或设置一个值,指示整个段落是否包含开始表或者桌尾field 或之间的特定范围开始表桌尾字段应包含在邮件合并区域中。

方法

姓名描述
DeleteFields()从文档中删除邮件合并相关字段。
Execute(DataRow)从 a 执行邮件合并数据行进入文档.
Execute(DataTable)将数据表中的邮件合并到文档中。
Execute(DataView)从 a 执行邮件合并数据视图进入文档.
Execute(IDataReader)执行邮件合并数据读取器进入文档.
Execute(IMailMergeDataSource)从自定义数据源执行邮件合并。
Execute(string[], object[])对单个记录执行邮件合并操作。
ExecuteADO(object)将 ADO Recordset 对象的邮件合并到文档中。
ExecuteWithRegions(DataSet)从 a 执行邮件合并数据集到具有邮件合并区域的文档中。
ExecuteWithRegions(DataTable)从 a 执行邮件合并数据表进入带有邮件合并区域的文档。
ExecuteWithRegions(DataView)从 a 执行邮件合并数据视图进入带有邮件合并区域的文档。
ExecuteWithRegions(IMailMergeDataSource)从具有邮件合并区域的自定义数据源执行邮件合并。
ExecuteWithRegions(IMailMergeDataSourceRoot)从具有邮件合并区域的自定义数据源执行邮件合并。
ExecuteWithRegions(IDataReader, string)执行邮件合并数据读取器进入带有邮件合并区域的文档。
ExecuteWithRegionsADO(object, string)将 ADO Recordset 对象的邮件合并到具有邮件合并区域的文档中。
GetFieldNames()返回文档中可用的邮件合并字段名称的集合。
GetFieldNamesForRegion(string)返回该区域中可用的邮件合并字段名称的集合。
GetFieldNamesForRegion(string, int)返回该区域中可用的邮件合并字段名称的集合。
GetRegionsByName(string)返回具有指定名称的邮件合并区域的集合。
GetRegionsHierarchy()返回文档中可用区域(带字段)的完整层次结构。

评论

为了使邮件合并操作正常工作,文档应包含 Word MERGEFIELD 和 (可选)NEXT 字段。在邮件合并操作期间,文档中的合并字段 are 替换为数据源中的值。

使用邮件合并有两种不同的方式:使用邮件合并区域和不使用邮件合并区域。

最简单的邮件合并是没有区域的,它与 Word 中邮件 merge 的工作方式非常相似。使用执行合并来自 some 数据源的信息的方法,例如数据表,数据集,数据视图,数据读取器 或对象数组到您的文档中。 The MailMerge对象处理数据源的所有记录,并为每条记录复制并追加整个文档的 内容。

请注意,当MailMerge对象遇到 NEXT 字段,它会选择数据源中的下一个 record 并继续合并,而不复制任何内容。

使用ExecuteWithRegions和其他重载,将信息合并到定义了邮件合并区域的 a 文档中。您可以使用 数据集,数据表,数据视图或者数据读取器 作为此操作的数据源。

如果您想动态增长 the 文档中的部分,则需要使用邮件合并区域。如果没有邮件合并区域,整个文档将针对数据源 的每条记录重复。

例子

演示如何使用数据表中的数据执行邮件合并。

public void ExecuteDataTable()
{
    DataTable table = new DataTable("Test");
    table.Columns.Add("CustomerName");
    table.Columns.Add("Address");
    table.Rows.Add(new object[] { "Thomas Hardy", "120 Hanover Sq., London" });
    table.Rows.Add(new object[] { "Paolo Accorti", "Via Monte Bianco 34, Torino" });

    // 下面是使用 DataTable 作为邮件合并数据源的两种方法。
    // 1 - 使用整个表进行邮件合并,为表中的每一行创建一个输出邮件合并文档:
    Document doc = CreateSourceDocExecuteDataTable();

    doc.MailMerge.Execute(table);

    doc.Save(ArtifactsDir + "MailMerge.ExecuteDataTable.WholeTable.docx");

    // 2 - 使用表的一行创建一个输出邮件合并文档:
    doc = CreateSourceDocExecuteDataTable();

    doc.MailMerge.Execute(table.Rows[1]);

    doc.Save(ArtifactsDir + "MailMerge.ExecuteDataTable.OneRow.docx");
}

/// <summary>
/// 创建邮件合并源文档。
/// </summary>
private static Document CreateSourceDocExecuteDataTable()
{
    Document doc = new Document();
    DocumentBuilder builder = new DocumentBuilder(doc);

    builder.InsertField(" MERGEFIELD CustomerName ");
    builder.InsertParagraph();
    builder.InsertField(" MERGEFIELD Address ");

    return doc;
}

也可以看看