介绍

通过使用 C# 邮件合并 和 Aspose.Words for .NET 自动生成个性化文档(如报告、信件和发票)来节省时间和精力。本指南解释如何利用 Aspose.Words 邮件合并插件 在您的 .NET 应用程序中执行高效且可扩展的文档生成——无需 MS Word 或 Office Interop。您将学习如何集成 C# 邮件合并以实现报告自动化,从而简化您的报告工作流。


目录:


什么是邮件合并?

邮件合并是一种通过用来自不同来源的数据填充模板动态生成文档的方法。使用 Aspose.Words,您可以无缝自动化以下任务:

  • 生成包含个人详细信息的信件和发票。
  • 使用结构化格式(如 XML、JSON 或数据库)中的数据创建批量报告,实现 使用 C# 和 Aspose.Words 的动态报告生成

邮件合并的数据源

Aspose.Words 支持多种数据源:

  • 对象:使用类实例填充模板。
  • XML:加载结构化数据以用于动态字段。
  • JSON:轻松与现代 API 集成。
  • CSV:利用表格数据进行批量文档生成。
  • DataTable/DataSet:利用 ADO.NET 进行数据库集成。

准备邮件合并模板

邮件合并模板是包含将在执行过程中用您指定的数据源填充的数据合并字段的文档。模板可以是 DOC 或 DOCX 格式;它不一定要求特定的模板样式。按照以下步骤创建邮件合并模板:

  1. 在 MS Word 中打开文档或创建新文档。
  2. 将光标放在要插入合并字段的位置。
  3. 插入 菜单中选择 字段 选项。
  4. 字段名称 列表中选择 MergeField
  5. 字段名称 框中指定合并字段的名称,然后点击 确定
  6. 保存文档。

以下截图展示了一个 示例模板 文档。

邮件合并模板

.NET 邮件合并 API - 安装

您可以通过多种方式安装 Aspose.Words for .NET

使用 C# 在 Word 文档中执行邮件合并

一旦您的模板准备就绪,执行邮件合并以生成文档。以下是在准备好的模板上执行邮件合并的步骤:

  1. 使用 Document 类加载模板文档。
  2. 设置所需的邮件合并选项,如 Document.MailMerge.TrimWhitespaces
  3. 使用 Document.MailMerge.Execute() 方法执行邮件合并,将数据源作为参数传递。
  4. 使用 Document.Save(String) 方法保存生成的文档。

以下是一个代码示例,演示如何 使用值数组自动生成 C# 报告


邮件合并后 Word 文档

在 C# 中执行邮件合并

使用 XML 数据源在 C# 中执行邮件合并

XML 文件常用于存储和传输数据。Aspose.Words for .NET 也支持 XML 作为邮件合并操作的数据源。只需将 XML 读取到 DataSet 对象中并执行邮件合并。以下是满足我们用例的示例 XML 文件。

<customers>
    <customer Name="John Ben Jan" ID="1" Domain="History" City="Boston"/>
    <customer Name="Lisa Lane" ID="2" Domain="Chemistry" City="LA"/>
    <customer Name="Dagomir Zits" ID="3" Domain="Heraldry" City="Milwaukee"/>
    <customer Name="Sara Careira Santy" ID="4" Domain="IT" City="Miami"/>
</customers>

以下代码示例从 XML 数据源中检索数据并使用 C# 执行邮件合并。

以下是将从 XML 文件中填充数据的邮件合并 模板

XML 的邮件合并模板

该图片表示在执行邮件合并后得到的结果 Word 文档的第一页。

在 C# 中执行带 XML 的邮件合并

合并字段的自定义格式

Aspose.Words for .NET 提供了增强的邮件合并过程控制。 MailMerge.FieldMergingCallback 属性允许您在遇到每个合并字段时配置邮件合并行为。实现 IFieldMergingCallback.FieldMergingIFieldMergingCallback.ImageFieldMerging 方法使您能够自定义邮件合并操作。

以下是一个代码示例,演示如何通过提供的示例模板在邮件合并过程中应用自定义格式:

以下实现了 HandleMergeFieldAlternatingRows 类。

使用 C# 进行区域邮件合并

在某些情况下,您可能需要在 Word 文档中填充和重复特定区域。对于此类情况,利用区域邮件合并。要创建一个区域,指定区域的开始和结束;然后邮件合并将为数据源中的每条记录重复该区域。下面的模板示例包含两个区域——Orders 和 OrderDetails——使用合并字段 «TableStart:Orders»、«TableEnd:Orders»、«TableStart:OrderDetails» 和 «TableEnd:OrderDetails》。

使用区域的邮件合并

以下是执行基于区域的邮件合并的代码示例,针对之前提到的 模板

以下方法演示如何从数据库中读取数据。

嵌套邮件合并区域

数据源中的数据常常以关系格式结构化。例如,“Orders” 可能与“OrderDetails” 之间存在一对多关系,后者存储与订单相关的项目记录。在此类场景中,利用嵌套邮件合并。以下是一个适合此场景的示例 发票模板

带区域的邮件合并模板

以下是我们的嵌套邮件合并示例的 XML 数据源。

<?xml version="1.0" encoding="utf-8"?>
<Orders xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="OrdersSchema.xsd">
    <Order>
        <Number>23</Number>
        <Address>Nelson Street</Address>
        <Suburb>Howick</Suburb>
        <City>Auckland</City>
        <Phonenumber>543 1234</Phonenumber>
        <Date>03/01/2010</Date>
        <Total>14.00</Total>
        <Item>
            <Name>BBQ Chicken Pizza</Name>
            <Price>6.00</Price>
            <Quantity>1</Quantity>
            <ItemTotal>6.00</ItemTotal>
        </Item>
        <Item>
            <Name>1.5 Litre Coke</Name>
            <Price>4.00</Price>
            <Quantity>2</Quantity>
            <ItemTotal>8.00</ItemTotal>
        </Item>
    </Order>
    <Order>
        <Number>10</Number>
        <Address>Parkville Avenue</Address>
        <Suburb>Pakuranga</Suburb>
        <City>Auckland</City>
        <Phonenumber>548 7342</Phonenumber>
        <Date>05/03/2010</Date>
        <Total>6.00</Total>
        <Item>
            <Name>Hawaiian Pizza</Name>
            <Price>4.00</Price>
            <Quantity>1</Quantity>
            <ItemTotal>4.00</ItemTotal>
        </Item>
        <Item>
            <Name>Fries</Name>
            <Price>1.00</Price>
            <Quantity>2</Quantity>
            <ItemTotal>2.00</ItemTotal>
        </Item>
    </Order>
</Orders>

该 XML 的相应 OrderSchema.xsd 文件为:

<?xml version="1.0" encoding ="utf-8"?>
<xs:schema id="OrdersSchema" xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:element name="Orders">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="Order">
                    <xs:complexType>
                        <xs:sequence>
                            <xs:element name="Number"/>
                            <xs:element name="Address"/>
                            <xs:element name="Suburb"/>
                            <xs:element name="City"/>
                            <xs:element name="Phonenumber"/>
                            <xs:element name="Date"/>
                            <xs:element name="Total"/>
                            <xs:element name="Item">
                                <xs:complexType>
                                    <xs:sequence>
                                        <xs:element name="Name"/>
                                        <xs:element name="Price"/>
                                        <xs:element name="Quantity"/>
                                        <xs:element name="ItemTotal"/>
                                    </xs:sequence>
                                </xs:complexType>
                            </xs:element>
                        </xs:sequence>
                    </xs:complexType>
                </xs:element>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>

以下代码示例演示了如何使用 C# 执行嵌套邮件合并。

邮件合并后 Word 文档

以下是执行嵌套邮件合并后得到的结果 Word 文档的第一页。

邮件合并后的 Word 文档

总结

Aspose.Words for .NET 是一个全面的邮件合并 API,提供了一系列适用于 .NET 应用程序的标准和扩展功能。只需几行代码,您便可以从各种数据源无缝开发简单或复杂的报告。有关 .NET 自动化报告生成最佳实践 的指导,请查阅 文档。要开始使用 Aspose.Words for .NET,请浏览可用的 开发者指南GitHub 上的示例代码。 Aspose 插件 还提供了报告生成的高级功能。

免费试用 Aspose.Words for .NET

您可以获得免费的临时许可来尝试 Aspose.Words for .NET,而不受任何限制。 立即获取您的临时许可证

另见