使用C#代码进行Word文档中的邮件合并功能

 更新时间:2025年12月04日 08:38:23   作者:2501_93070778  
邮件合并是 Microsoft Word 中的一个强大功能,它允许您通过单一模板文档和数据源创建多份文档,对于需要向大量收件人发送个性化信件的任务,邮件合并尤其有用,无需逐一编写每封信件,在本文中,您将学习如何使用C#在 Word 文档中执行邮件合并,需要的朋友可以参考下

引言

邮件合并是 Microsoft Word 中的一个强大功能,它允许您通过单一模板文档和数据源创建多份文档,例如信件、标签、信封,甚至电子邮件。对于需要向大量收件人发送个性化信件的任务,邮件合并尤其有用,无需逐一编写每封信件。

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

安装 Spire.Doc for .NET

首先,您需要将 Spire.Doc for .NET 包中的 DLL 文件添加为您 .NET 项目的引用。这些 DLL 文件可以通过以下链接下载,或者通过 NuGet 安装。

PM> Install-Package Spire.Doc

了解邮件合并的组成部分

  • 主文档:这是模板文件,您可以在其中设计信件、标签或其他类型的文档,并添加占位符(也称为合并字段),这些占位符将由数据源中的数据填充。
  • 数据源:这是包含您希望用于填充主文档信息的电子表格或数据库。它可以是 Excel 表格、Access 数据库、CSV 文件、XML 文件,甚至是简单的文本文件。
  • 合并字段:这是主文档中的占位符,会被数据源中对应记录的数据替换。

创建模板 Word 文档

要生成带有合并字段的模板 Word 文档,建议使用 Microsoft Word 等 Word 编辑器。Word 编辑器的可视化界面可以让您以交互方式为模板设计独特的布局、格式和其他元素。

示例代码:

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("Full Name: ");
            paragraph.AppendField("Name", FieldType.FieldMergeField);
            paragraph.AppendBreak(BreakType.LineBreak);
            paragraph.AppendText("Email Address: ");
            paragraph.AppendField("Email", FieldType.FieldMergeField);
            paragraph.AppendBreak(BreakType.LineBreak);
            paragraph.AppendText("Avatar: ");
            paragraph.AppendField("Image:Avatar", FieldType.FieldMergeField);

            // 保存文档
            document.SaveToFile("Template.docx", FileFormat.Docx2019);

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

Word 文档中的简单邮件合并

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

示例代码:

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("C:\\Users\\Administrator\\Desktop\\Template.docx");

            // 指定字段名称
            String[] fieldNames = {

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

            // 指定用于填充字段的值
            String[] fieldValues = {

                "John Smith",
                "john.smith@e-iceblue.com",
                "C:\\Users\\Administrator\\Desktop\\avatar.png"
            };

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

            // 执行邮件合并
            document.MailMerge.Execute(fieldNames, fieldValues);

            // 保存文档
            document.SaveToFile("MailMerge.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);
            }
        }
    }
}

带区域的邮件合并

区域是指文档中希望插入数据源内容的特定区域。邮件合并会针对数据源中的每条记录重复该区域。Spire.Doc 提供了 MailMerge.ExecuteWithRegion() 方法,用于执行带区域的邮件合并。

示例代码:

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("C:\\Users\\Administrator\\Desktop\\Template.docx");

            // 从 XML 文件读取数据到 DataSet 对象
            DataSet dataSet = new DataSet();
            dataSet.ReadXml("C:\\Users\\Administrator\\Desktop\\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("MailMergeWithNestedRegions.docx", FileFormat.Docx2019);

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

到此这篇关于使用C#代码进行Word文档中的邮件合并功能的文章就介绍到这了,更多相关C#合并Word邮件内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

最新评论