自动化创建个性化文档——例如报告、信件和发票——可以显著提高您的工作效率。使用 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) 方法保存生成的文档。

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


邮件合并后的 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。 立即获取您的临时许可证