IRONSOFTWAREHOME

How to Mail Merge Word Documents in C#

Curtis Chau
Curtis Chau
Updated: 2026年6月29日

IronWordは、Wordテンプレートに含まれるDataSetオブジェクト、または繰り返し領域のテーブルから取得したデータで埋めることにより、C#でメールマージを行います。Microsoft Office Interopを使用せずに、Microsoft Wordまたは互換性のあるツールで作成されたマージフィールドが自動的に検出されます。

メールマージは、スケールでパーソナライズされた文書を生成する標準的な方法です。同じテンプレートを共有しつつ受取人ごとに異なる形式の手紙、請求書、証明書、契約およびレポートを作成します。 各文書を手作業で編集する代わりに、マージフィールドを含む単一の.docxテンプレートを作成し、IronWordにデータソースからそれらを埋めさせます。 すべての操作はWordDocument.MailMergeエントリーポイントを通じて行われます。

クイックスタート:Word文書をメールマージする

Executeに渡して結果を保存します。

  1. 1Install IronWord with NuGet Package Manager

    PM > Install-Package IronWord

  2. 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. 3実際の環境でテストするためにデプロイする

    今日プロジェクトで IronWord を使い始めましょう無料トライアル
    arrow pointer

辞書からメールマージをするにはどうすればいいですか?

最も簡単なデータソースは、マージフィールド名によってキー付けされた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");
C#
ヒント: フィールド名のルックアップはデフォルトで大文字小文字を区別せず、Microsoft Wordと一致する)]} MailMerge.Options.CaseInsensitiveFieldNames = falseを設定して、大文字小文字の完全一致を要求します。

フィールド名と値の2つの並行するシーケンスを供給することもできます。

doc.MailMerge.Execute(
    new[] { "FirstName", "LastName" },
    new[] { "Jane", "Smith" });
C#

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");
C#

繰り返しテーブル領域を埋めるにはどうすればよいですか?

繰り返し領域は、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");
C#
ご注意: 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"]
C#

Kindを公開します。

未一致フィールドとヌル値を制御するにはどうすればよいですか?

マージ動作はMailMerge.Optionsを通じて設定されます:

オプションDefault動作
RemoveUnusedFieldstrueデータソースに一致するキーがないマージフィールドを削除します。 その場に残すためにfalseに設定します。
RemoveUnusedRegionstrueデータソースに一致するテーブルがないTableEnd領域を削除します。
NullValueReplacement""データソースがフィールドにnull値を提供する場合に代わりに使われるテキスト。
CaseInsensitiveFieldNamestrueフィールド名の一致時に大文字小文字を無視し、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");
C#

データソースなしでの単純な値置換については、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
テクニカルライター

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

...
詳しく読む

準備はできましたか?

Nuget Downloads 56,401バージョン:2026.9リリースされたばかり

あなたの無料30日間の試用キーをすぐに入手。
クレジットカードやアカウントの作成は不要です。
PDF用C# NuGetライブラリ
NuGetでインストール

バージョン: 2026.9

PM > Install-Package IronWord
nuget.org/packages/IronWord/
  1. ソリューションエクスプローラーで参照を右クリックし、NuGetパッケージを管理を選択
  2. [参照]を選択し、「IronWord」を検索してください。
  3. パッケージを選択してインストール
C# PDF DLL
DLLをダウンロード

バージョン: 2026.9

  1. IronWordをダウンロードして、ソリューションディレクトリ内の~/Libsなどの場所に解凍してください。
  2. Visual Studioのソリューションエクスプローラーで、[参照]を右クリックします。 [参照]を選択し、「IronWord.dll」を選択します。

$999からのライセンス

Key in blue circle

無料の30日間トライアルキーをすぐに入手してください。

Your trial license will be sent to your email address

制限なし。100% ロック解除済み。クレジットカード不要。

bullet_checkedクレジットカードやアカウントの作成は不要です。制限なし。100% ロック解除済み。クレジットカード不要。
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
無料のライブデモを予約する
Booking Badge

世界中の数百万人のエンジニアから信頼されています。

ライセンスはより安く
義務のない相談を受ける
下記のフォームを記入するか、sales@ironsoftware.comにメールしてください。
あなたの詳細は常に守秘されます。
世界中の数百万人のエンジニアから信頼されています。
ライセンスはより安く
あなたの無料30日間の試用キーをすぐに入手。
クレジットカードやアカウントの作成は不要です。