はじめに

レポート、手紙、請求書などのパーソナライズされたドキュメントの作成を自動化することで、時間と労力を節約できます。C# メールマージを使用すると、Aspose.Words for .NETにより、これをシームレスに実現できます。このガイドでは、Aspose.Words メールマージプラグインを使用して、MS WordやOffice Interopを必要とせずに.NETアプリケーション内で効率的かつスケーラブルなドキュメント生成を行う方法を説明します。最後には、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. フィールド名ボックスにマージフィールドの名前を指定し、OKをクリックします。
  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#でメールマージを実行

C#でXMLデータソースを使用してメールマージを実行する

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.FieldMergingおよびIFieldMergingCallback.ImageFieldMergingメソッドを実装することで、メールマージ操作をカスタマイズできます。

以下は、提供されたサンプルテンプレートを使用してメールマージ中にカスタムフォーマットを適用する方法を示すコードサンプルです:

以下は、HandleMergeFieldAlternatingRowsクラスを実装したものです。

C#を使用した領域によるメールマージ

場合によっては、Wordドキュメント内の特定の領域を埋め込み、繰り返す必要があります。そのようなシナリオでは、領域を使用したメールマージを利用します。領域を作成するには、領域の開始と終了を指定します。その後、メールマージはデータソース内の各レコードに対してこの領域を繰り返します。以下のテンプレート例には、マージフィールド「TableStart:Orders」、「TableEnd:Orders」、「TableStart:OrderDetails」、「TableEnd:OrderDetails」を使用した2つの領域—OrdersとOrderDetails—が含まれています。

領域を使用したメールマージ

以下は、前述のテンプレートに基づいて領域に基づくメールマージを実行するコードサンプルです。

以下のメソッドは、データベースからデータを読み取る方法を示しています。

ネストされたメールマージ領域

データソースのデータは、しばしばリレーショナルフォーマットで構造化されています。たとえば、「Orders」は「OrderDetails」と1対多の関係を持ち、注文内のアイテムの記録を保持します。そのようなシナリオでは、ネストされたメールマージを利用します。以下は、このシナリオに適したサンプル請求書テンプレートです。

領域を使用したメールマージテンプレート

以下は、ネストされたメールマージの例のための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を制限なしで試すための無料の一時ライセンスを取得できます。今すぐ一時ライセンスを取得してください。

関連情報