介绍
自动创建个性化文档——如报告、信件和发票——可以为您节省时间和精力。借助 C# 邮件合并 和 Aspose.Words for .NET,您可以无缝实现这一点。本指南将引导您使用 Aspose.Words 邮件合并插件 在您的 .NET 应用程序中执行高效且可扩展的文档生成——无需 MS Word 或 Office Interop。到最后,您将能够集成 C# 邮件合并用于报告自动化 并简化您的报告工作流程。
目录:
- 什么是邮件合并?
- 邮件合并的数据源
- 准备邮件合并模板
- 开始使用 Aspose.Words for .NET
- 使用示例数据执行邮件合并
- 使用 XML 数据进行邮件合并
- 自定义合并字段格式
- 使用区域进行邮件合并
- 嵌套邮件合并
- 结论
什么是邮件合并?
邮件合并是一种强大的方法,通过用来自各种来源的数据填充模板来动态生成文档。使用 Aspose.Words,您可以自动执行以下任务:
- 生成个性化的信件和发票。
- 使用结构化格式(如 XML、JSON 或数据库)创建批量报告,实现 使用 C# 和 Aspose.Words 动态报告生成。
邮件合并的数据源
Aspose.Words 支持多种数据源,包括:
- 对象:使用类实例填充模板。
- XML:加载结构化数据以用于动态字段。
- JSON:轻松与现代 API 集成。
- CSV:利用表格数据进行批量文档生成。
- DataTable/DataSet:利用 ADO.NET 进行数据库集成。
准备邮件合并模板
邮件合并模板是包含合并字段的文档,这些字段将在执行过程中用您指定的数据源中的数据填充。模板可以是 DOC 或 DOCX 格式,并不需要特定的样式。按照以下步骤创建邮件合并模板:
- 在 MS Word 中打开您的文档或创建一个新文档。
- 将光标放在您想插入合并字段的位置。
- 从 插入 菜单中选择 字段 选项。
- 从 字段名称 列表中选择 MergeField。
- 在 字段名称 框中指定合并字段的名称,然后点击 确定。
- 保存文档。
以下截图展示了一个 示例模板 文档。

.NET 邮件合并 API - 安装
您可以通过多种方法安装 Aspose.Words for .NET:
使用 C# 在 Word 文档中执行邮件合并
一旦您的模板准备好,您可以执行邮件合并以生成文档。以下是对准备好的模板执行邮件合并的步骤:
- 使用 Document 类加载模板文档。
- 设置所需的邮件合并选项,例如 Document.MailMerge.TrimWhitespaces。
- 使用 Document.MailMerge.Execute() 方法执行邮件合并,将数据源作为参数传递。
- 使用 Document.Save(String) 方法保存生成的文档。
以下代码示例演示了如何 使用值数组自动生成报告:
邮件合并后的 Word 文档

使用 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 文件中填充数据的邮件合并 模板。

此图像表示执行邮件合并后获得的结果 Word 文档的第一页。

合并字段的自定义格式
Aspose.Words for .NET 提供了对邮件合并过程的增强控制。 MailMerge.FieldMergingCallback 属性允许您在遇到每个合并字段时配置邮件合并行为。实现 IFieldMergingCallback.FieldMerging 和 IFieldMergingCallback.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 文档的第一页。

结论
Aspose.Words for .NET 是一个全面的邮件合并 API,提供适用于 .NET 应用程序的标准和扩展功能。只需几行代码,您就可以无缝开发来自不同数据源的简单或复杂报告。有关 .NET 自动报告生成最佳实践 的指导,请查阅 文档。要开始使用 Aspose.Words for .NET,请探索可用的 开发者指南 和 GitHub 上的示例代码。 Aspose 插件 还提供了高级报告生成功能。
免费试用 Aspose.Words for .NET
您可以获得一个免费的临时许可证,以无任何限制地试用 Aspose.Words for .NET。 立即获取您的临时许可证。