半岛权威十大直营(官方)网站

文档处理控件Spire.Doc系列教程:C# 在 Word 文档中合成邮件

翻译|使用教程|编辑:吉炜炜|2025-02-14 14:12:04.767|阅读 3 次

概述:在本文中,您将学习如何使用 Spire.Doc for .NET 在 Word 文档中执行邮件合并。

# 界面/图表报表/文档/IDE等千款热门软控件火热销售中 >>

相关链接:

邮件合并(Mail Merge)是 Microsoft Word 的一项强大功能,它允许您从一个模板文档和数据源生成多份文档,例如信件、标签、信封,甚至电子邮件。当需要向大量收件人发送个性化信件的时候,您可以使用这个功能,就无需逐封撰写。

在本文中,您将学习如何使用 Spire.Doc for .NET 在 Word 文档中执行邮件合并

安装 Spire.Doc for .NET

首先,您需要将 Spire.Doc for.NET 包含的 DLL 文件作为引用添加到您的 .NET 项目中。DLL 文件可以此链接下载,也可以通过  安装。

PM> Install-Package Spire.Doc

理解邮件合并的组成部分

创建模板 Word 文档

想要生成带有合并域的模板 Word 文档,建议使用 Microsoft Word 等 Word 编辑器。Word 编辑器的视觉界面使您能够自由地设计模板的独特布局、格式和其他元素。

下图展示了如何使用 MS Word 向 Word 文档中添加邮件合并域。如果您想将图像合并到合并域中,请记得使用“Image:FieldName”格式。

创建邮件合并的模板

如果您想要使用 C# 创建一个模板文档,请参照以下步骤:

using Spire.Doc;
using Spire.Doc.Documents;

namespace CreateTemplate
{
    class Program
    {
        static void Main(string[] args)
        {
            // 创建一个 Document 对象
            Document document = new Document();
 
            // 添加一个节
            Section section = document.AddSection();
 
            // 添加一个段落
            Paragraph paragraph = section.AddParagraph();
 
            // 在段落中添加文本和邮件合并域
            paragraph.AppendText("姓名:");
            paragraph.AppendField("Name", FieldType.FieldMergeField);
            paragraph.AppendBreak(BreakType.LineBreak);
            paragraph.AppendText("邮件地址:");
            paragraph.AppendField("Email", FieldType.FieldMergeField);
            paragraph.AppendBreak(BreakType.LineBreak);
            paragraph.AppendText("个人头像:"); 
            paragraph.AppendField("Image:Avatar", FieldType.FieldMergeField);

            // 保存结果文档
            document.SaveToFile("/模板.docx", FileFormat.Docx2019);
 
            // 释放资源
            document.Dispose();
        }
    }
}

Word 文档中的简单邮件合并

Spire.Doc 提供了 MailMerge.Execute() 方法,用于在 Word 文档中执行指定的邮件合并操作。该方法有 6 个重载版本,允许用户从不同的数据源(如 DataTable、DataView 和字符串数组)执行邮件合并。

使用数组提供的数据执行邮件合并的步骤如下:

  • 创建一个 Document 类的对象。
  • 从指定的文件路径加载模板 Word 文档。
  • 定义一个数组来占用合并域名称。
  • 定义一个数组来保存用于填充合并域的值。
  • 使用 MailMerge.Execute() 方法将数据合并到邮件合并域中。
  • 将文档保存为新的 Word 文件。

using Spire.Doc;
using Spire.Doc.Reporting;
using System.Drawing;

namespace MailMergeInDocument
{
    class Program
    {
        static void Main(string[] args)
        {
            // 创建一个 Document 对象
            Document document = new Document();

            // 加载 Word 模板
            document.LoadFromFile("/模板.docx");

            // 指定合并域的名称
            string[] fieldNames = {

                "Name",
                "Email",
                "Avatar"
            };

            // 指定用来填充合并域的值
            string[] fieldValues = {

                "谢雨",
                "xieyu @e-iceblue.com",
                "C:/Users/Administrator/Desktop/avatar.png"
            };

            // 注册合并图片合并域时触发的事件
            document.MailMerge.MergeImageField += new MergeImageFieldEventHandler(MailMerge_MergeImageField);

            // 将数据邮件合并到文档中 
            document.MailMerge.Execute(fieldNames, fieldValues);

            // 保存结果文档
            document.SaveToFile("/邮件合并.docx", FileFormat.Docx2019);

            // 释放资源
            document.Dispose();
        }


        // 使用图片填充图像合并域
        private static void MailMerge_MergeImageField(object sender, MergeImageFieldEventArgs field)
        {
            string filePath = field.FieldValue as string;

            if (!string.IsNullOrEmpty(filePath))
            {
                field.Image = Image.FromFile(filePath);
            }
        }
    }
}

C# 执行简单的邮件合并

使用区域执行邮件合并

这里的区域指的是文档中的特定区域,您可以在区域插入数据源中的数据。邮件合并会针对数据源中的每条记录重复该区域。Spire.Doc 提供了 MailMerge.ExecuteWithRegion() 方法来执行区域内的邮件合并。

使用 DataTable 提供的数据执行带区域的邮件合并的步骤如下:

  • 创建一个 Document 对象。
  • 从指定的文件路径加载模板 Word 文档。
  • 创建一个 DataTable 对象,作为数据源。
  • 使用 MailMerge.ExecuteWithRegion() 方法执行带区域的邮件合并。
  • 将合并后的文档保存为另一个 Word 文件。

using Spire.Doc;
using System.Data;

namespace MailMergeWithGroup
{
    class Program
    {
        static void Main(string[] args)
        {
 
            // 创建一个 Document 对象
            Document document = new Document();
 
            // 加载模板 Word 文件
            document.LoadFromFile("/邮件模板.docx");

            // 创建一个 数据表,并指定表名
            DataTable table = new DataTable("OrderDetails");

            // 添加示例数据
            table.Columns.Add("ProductName");
            table.Columns.Add("Quantity");   
            table.Columns.Add("UnitPrice");  
            table.Columns.Add("TotalPrice"); 
            table.Rows.Add("无线鼠标", "2", "39.99", "79.98");
            table.Rows.Add("机械键盘", "1", "89.99", "89.99");
            table.Rows.Add("电竞耳机", "3", "59.99", "179.97");
            table.Rows.Add("显示器支架", "1", "49.99", "49.99");

            // 在区域内执行邮件合并
            document.MailMerge.ExecuteWidthRegion(table);
 
            // 保存修改后的文档
            document.SaveToFile("/区域邮件合并.docx", FileFormat.Docx2019);
 
            // 释放资源
            document.Dispose();
        }
    }
}

C# 执行带区域的邮件合并

使用嵌套区域执行邮件合并

在执行嵌套分组的邮件合并时,系统会将嵌套区域内的合并域替换为按照层次结构组织的数据。嵌套区域可以创建更复杂的布局,其中一个区域的内容将依赖于另一个区域中的数据。

使用 XML 文件中的数据执行嵌套区域邮件合并的步骤如下:

  • 创建一个 Document 对象。
  • 从指定的文件路径加载模板 Word 文档。
  • 读取 XML 文件中的数据到 DataSet 对象。
  • 创建一个 List<DictionaryEntry> 对象来存储合并域信息。
  • 创建 DictionaryEntry 对象并将其添加到列表中,指定合并域名称及其关联的表达式。
  • 使用 MailMerge.ExecuteWithNestedRegion() 方法执行嵌套区域的邮件合并。
  • 将合并后的文档保存为另一个 Word 文件。

using Spire.Doc;
using System.Collections;
using System.Data;

namespace MailMergeWithNestedRegions
{
    class Program
    {
        static void Main(string[] args)
        {
            // 创建一个 Document 对象
            Document document = new Document();
 
            // 加载 Word 模板文档
            document.LoadFromFile("/模板.docx");
 
            // 从 XML 文件读取数据到 DataSet 对象
            DataSet dataSet = new DataSet();
            dataSet.ReadXml("/Orders.xml");
 
            // 创建一个 List 对象,用以存储合并域信息
            List list = new List();

            // 创建两个 DictionaryEntry 对象,并将它们添加到列表中(每个对象指定合并域名称和相关的表达式)

            DictionaryEntry dictionaryEntry = new DictionaryEntry("Customer", string.Empty);
            list.Add(dictionaryEntry);
 
            dictionaryEntry = new DictionaryEntry("Order", "Customer_Id = %Customer.Customer_Id%");
            list.Add(dictionaryEntry);
 
            // 执行嵌套区域的邮件合并
            document.MailMerge.ExecuteWidthNestedRegion(dataSet, list);
 
            // 保存结果文件
            document.SaveToFile("嵌套区域的邮件合并.docx", FileFormat.Docx2019);
 
            // 释放资源
            document.Dispose();
        }
    }
}

C# 执行嵌套区域的邮件合并

————————————————————————————————————————————

慧都是E-iceblue的官方授权代理商,提供Spire系列产品免费试用,咨询,正版销售等于一体的专业化服务。

下载|体验更多E-iceblue产品请咨询,或拨打产品热线:023-68661681

加入E-iceblue技术交流QQ群(767755948),与更多小伙伴一起探讨提升开发技能。


标签:

本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@wqylolg.cn

文章转载自:慧都网

为你推荐

  • 推荐视频
  • 推荐活动
  • 推荐产品
  • 推荐文章
  • 慧都慧问
扫码咨询


添加微信 立即咨询

电话咨询

客服热线
023-68661681

TOP