How to Mail Merge Word Documents in C#
IronWordは、Wordテンプレートに含まれるDataSetオブジェクト、または繰り返し領域のテーブルから取得したデータで埋めることにより、C#でメールマージを行います。Microsoft Office Interopを使用せずに、Microsoft Wordまたは互換性のあるツールで作成されたマージフィールドが自動的に検出されます。
メールマージは、スケールでパーソナライズされた文書を生成する標準的な方法です。同じテンプレートを共有しつつ受取人ごとに異なる形式の手紙、請求書、証明書、契約およびレポートを作成します。 各文書を手作業で編集する代わりに、マージフィールドを含む単一の.docxテンプレートを作成し、IronWordにデータソースからそれらを埋めさせます。 すべての操作はWordDocument.MailMergeエントリーポイントを通じて行われます。
Executeに渡して結果を保存します。
-
1Install IronWord with NuGet Package Manager
-
2このコード スニペットをコピーして実行します。
WordDocument doc = new WordDocument("template.docx"); doc.MailMerge.Execute(new Dictionary<string, string> { { "FirstName", "Jane" }, { "Company", "Acme Corp" } }); doc.SaveAs("output.docx");C# -
3実際の環境でテストするためにデプロイする
今日プロジェクトで IronWord を使い始めましょう無料トライアル
最小限のワークフロー(5ステップ)
- NuGetからWordメールマージ用のC#ライブラリをダウンロードします
MERGEFIELDプレースホルダーを含むWordテンプレートを作成しますWordDocumentコンストラクタでテンプレートを読み込みます- データソースで
MailMerge.ExecuteまたはMailMerge.ExecuteWithRegionsを呼び出します - 埋め込まれた文書を保存
辞書からメールマージをするにはどうすればいいですか?
最も簡単なデータソースは、マージフィールド名によってキー付けされたIDictionary<string, string>です。 Executeはキーに一致する名前のフィールドすべてを置換します。
WordDocument doc = new WordDocument("template.docx");
doc.MailMerge.Execute(new Dictionary<string, string>
{
{ "FirstName", "Jane" },
{ "LastName", "Smith" },
{ "Company", "Acme Corp" }
});
doc.SaveAs("output.docx");
MailMerge.Options.CaseInsensitiveFieldNames = falseを設定して、大文字小文字の完全一致を要求します。フィールド名と値の2つの並行するシーケンスを供給することもできます。
doc.MailMerge.Execute(
new[] { "FirstName", "LastName" },
new[] { "Jane", "Smith" });
ArgumentExceptionを投げます。
DataTableまたはDataRowからのメールマージはどうやって行いますか?
データがデータベースまたは既存のExecuteに渡します。 マージフィールド名は列名と一致しています。 Execute(DataRow)は行の親テーブルの列名を使用します。
DataTable table = new DataTable();
table.Columns.Add("FirstName");
table.Columns.Add("LastName");
DataRow row = table.NewRow();
row["FirstName"] = "Jane";
row["LastName"] = "Smith";
table.Rows.Add(row);
WordDocument doc = new WordDocument("template.docx");
doc.MailMerge.Execute(row);
doc.SaveAs("output.docx");
繰り返しテーブル領域を埋めるにはどうすればよいですか?
繰り返し領域は、1つのテンプレート行を多くの行に変換し、請求書の明細項目や注文リストに最適です。 テンプレート内で、繰り返しコンテンツをTableEnd:RegionNameという名前の2つのマーカーフィールドの間に配置します。 次に、テーブルの一致する行ごとに領域のコンテンツを繰り返すExecuteWithRegionsを呼び出します。
DataTableを受け入れます。
DataTable orders = new DataTable("Orders");
orders.Columns.Add("Item");
orders.Columns.Add("Qty");
orders.Rows.Add("Widget A", "3");
orders.Rows.Add("Widget B", "1");
DataSet ds = new DataSet();
ds.Tables.Add(orders);
WordDocument doc = new WordDocument("invoice-template.docx");
doc.MailMerge.ExecuteWithRegions(ds);
doc.MailMerge.Execute(new Dictionary<string, string> { { "CustomerName", "Jane Smith" } });
doc.SaveAs("invoice.docx");
ExecuteWithRegionsは繰り返し領域のみを埋めます。 領域外の標準的なマージフィールドも埋めるためには、上記のように領域を展開した後にExecute(...)を呼び出します。テンプレートのマージフィールドを調べるにはどうすればよいですか?
マージする前に、テンプレートの内容を調査することができます。これはテンプレートを検証したり、データソースを動的に構築するために役立ちます。
GetFieldNames()はドキュメント順で重複しないすべての値型マージフィールドの名前を返します。TableStart領域の名前を返します。MergeFieldオブジェクトとして返します。
WordDocument doc = new WordDocument("template.docx");
IReadOnlyList<string> fieldNames = doc.MailMerge.GetFieldNames();
IReadOnlyList<string> regionNames = doc.MailMerge.GetRegionNames();
// fieldNames: ["FirstName", "LastName", "Company"]
// regionNames: ["Orders", "LineItems"]
各Kindを公開します。
未一致フィールドとヌル値を制御するにはどうすればよいですか?
マージ動作はMailMerge.Optionsを通じて設定されます:
| オプション | Default | 動作 |
|---|---|---|
RemoveUnusedFields | true | データソースに一致するキーがないマージフィールドを削除します。 その場に残すためにfalseに設定します。 |
RemoveUnusedRegions | true | データソースに一致するテーブルがないTableEnd領域を削除します。 |
NullValueReplacement | "" | データソースがフィールドにnull値を提供する場合に代わりに使われるテキスト。 |
CaseInsensitiveFieldNames | true | フィールド名の一致時に大文字小文字を無視し、Microsoft Wordの動作に一致します。 |
WordDocument doc = new WordDocument("template.docx");
doc.MailMerge.Options.RemoveUnusedFields = false;
doc.MailMerge.Execute(new Dictionary<string, string> { { "FirstName", "Jane" } });
doc.SaveAs("partial-output.docx");
データソースなしでの単純な値置換については、Word文書内のテキストを置換する方法を参照してください。
よくある質問
C#でWord文書をメールマージする方法
WordDocumentコンストラクタでMERGEFIELDプレースホルダを含むWordテンプレートを読み込み、その後、名前がキーやカラムに一致する各フィールドを置換するためにdoc.MailMerge.Executeを辞書、DataTable、またはDataRowとともに呼び出し、SaveAsで結果を保存します。Microsoft Wordで作成されたマージフィールドは自動的に検出され、Microsoft Officeのインストールは必要ありません。
IronWordが使用できるデータソースはどれですか?
MailMerge.Executeはフィールド名と値のIDictionary、フィールド名と値の2つの平行シーケンス、DataTable(最初の行を使用)、またはDataRow(親テーブルのカラムを使用)を受け入れます。MailMerge.ExecuteWithRegionsは繰り返しテーブル領域を展開するためにDataSetまたはDataTableを受け入れます。
Wordメールマージで繰り返しテーブル領域をどうやって埋めますか?
テンプレートの繰り返しコンテンツをTableStart:RegionNameとTableEnd:RegionNameマージフィールド間に包み、DataSetまたはDataTableでMailMerge.ExecuteWithRegionsを呼び出します。領域の内容は一致するテーブルの各行ごとに繰り返されます。ExecuteWithRegionsは領域のみを埋めるため、その後に標準のマージフィールドを埋めるためにExecuteを呼び出します。
マージ前にテンプレートのマージフィールドを検査できますか?
はい。MailMerge.GetFieldNamesは文書順に値スタイルのフィールド名を返し、GetRegionNamesはTableStart領域名を返し、GetFieldsは各フィールドの名前、指示、種類(Value、TableStart、TableEnd、NextRecord)、RegionNameを公開するMergeFieldオブジェクトを返します。
データと一致しないマージフィールドはどうなりますか?
デフォルトではMailMergeOptions.RemoveUnusedFieldsはtrueであり、データソースに一致するキーがないフィールドは出力から削除されます。falseに設定するとそれらを残します。RemoveUnusedRegionsがtrueの場合、一致しないTableStart/TableEnd領域は削除され、null値はNullValueReplacement文字列で置換されます。
メールマージフィールドの一致は大文字小文字を区別しますか?
いいえ。フィールド名の検索はデフォルトで大文字小文字を区別せず、Microsoft Wordの動作に一致します。MailMerge.Options.CaseInsensitiveFieldNamesをfalseに設定すれば、大文字小文字は一致します。
How does IronWord handle unmatched fields and null values in mail merge?
IronWord offers options such as RemoveUnusedFields, RemoveUnusedRegions, and NullValueReplacement in MailMerge.Options to control the behavior for unmatched fields and null values.
What is the minimal workflow to mail merge a Word document using IronWord?
The minimal workflow involves downloading the IronWord library, authoring a Word template, loading it with WordDocument, executing the merge with your data, and saving the populated document.
How does case sensitivity affect field name matching in IronWord mail merge?
In IronWord, field name lookups in the mail merge are case-insensitive by default, similar to Microsoft Word. You can adjust this behavior using MailMerge.Options.CaseInsensitiveFieldNames.
How does IronWord support mail merging multiple documents or templates?
IronWord allows you to quickly fill multiple documents by reusing the same template with different data or by using the ExecuteWithRegions method for repeating data entries.

Curtis Chauは、カールトン大学でコンピュータサイエンスの学士号を取得し、Node.js、TypeScript、JavaScript、およびReactに精通したフロントエンド開発を専門としています。直感的で美しいユーザーインターフェースを作成することに情熱を持ち、Curtisは現代のフレームワークを用いた開発や、構造の良い視覚的に魅力的なマニュアルの作成を楽しんでいます。