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

.NET メールマージ API - インストール
Aspose.Words for .NETは、さまざまな方法でインストールできます:
C#を使用してWordドキュメントでメールマージを実行する
テンプレートが準備できたら、メールマージを実行してドキュメントを生成できます。準備したテンプレートでメールマージを実行する手順は次のとおりです:
- Documentクラスを使用してテンプレートドキュメントを読み込みます。
- Document.MailMerge.TrimWhitespacesなどの必要なメールマージオプションを設定します。
- Document.MailMerge.Execute()メソッドを使用してメールマージを実行し、データソースをパラメータとして渡します。
- Document.Save(String)メソッドを使用して生成されたドキュメントを保存します。
以下は、値の配列を使用してC#でレポート生成を自動化する方法を示すコードサンプルです:
メールマージ後のWordドキュメント

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ファイルからデータで埋め込まれるメールマージテンプレートです。

この画像は、メールマージを実行した後に得られた結果のWordドキュメントの最初のページを示しています。

マージフィールドのカスタムフォーマット
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ドキュメントの最初のページです。

結論
Aspose.Words for .NETは、標準機能と拡張機能の両方を提供する包括的なメールマージAPIであり、.NETアプリケーションに適しています。数行のコードで、さまざまなデータソースからシンプルまたは複雑なレポートをシームレスに開発できます。.NET自動レポート生成のベストプラクティスに関するガイダンスについては、ドキュメントを参照してください。Aspose.Words for .NETを始めるには、利用可能な開発者ガイドやGitHubのサンプルコードを探索してください。Asposeプラグインは、レポート生成のための高度な機能も提供します。
Aspose.Words for .NETを無料で試す
Aspose.Words for .NETを制限なしで試すための無料の一時ライセンスを取得できます。今すぐ一時ライセンスを取得してください。