差し込み印刷は、Word ドキュメントの強力な機能で、単一のテンプレートドキュメントとデータソースから手紙、ラベル、封筒、さらには電子メールなどの複数のドキュメントを作成できます。これにより、各手紙を個別に書くことなく、多くの受信者にパーソナライズされた対応を送信することができます。
この記事では、Spire.Doc for .NET を使用して Word ドキュメントで差し込み印刷を実行する方法について説明します。
Spire.Doc for .NET をインストールします
まず、Spire.Doc for .NET パッケージに含まれている DLL ファイルを .NET プロジェクトの参照として追加する必要があります。DLL ファイルは、このリンクからダウンロードするか、NuGet を介してインストールできます。
PM> Install-Package Spire.Doc
差し込み印刷の構成要素の理解
- メインドキュメント:これはテンプレートファイルで、手紙、ラベル、その他のドキュメントのデザインを行い、プレースホルダー(差し込みフィールドとも呼ばれる)を含めます。これらのフィールドはデータソースからのデータで埋められます。
- データソース:これは、メインドキュメントに挿入する情報を含むスプレッドシートまたはデータベースです。Excel シート、Access データベース、CSV ファイル、XML ファイル、または単純なテキストファイルなどがあります。
- 差し込みフィールド:これらはメインドキュメント内のプレースホルダーで、データソースの対応するレコードからデータが挿入されます。
差し込み印刷用の Word ド キュメントの作成
差し込みフィールドを含むテンプレート Word ドキュメントを生成するには、Microsoft Word などの Word エディターを使用することをお勧めします。Word エディターのビジュアルインターフェイスを使用すると、テンプレートの独自のレイアウト、書式設定、その他の要素をインタラクティブにデザインできます。
以下のスクリーンショットは、MS Word を使用して Word ドキュメントに差し込みフィールドを追加する方法を示しています。画像を差し込みフィールドに挿入したい場合は、「Image:FieldName」形式を使用してください。
C# コードを使用してテンプレート Word ドキュメントを作成する場合、次の手順に従います。
- Document のインスタンスを作成します。
- ドキュメントにセクションを追加します。
- セクションに段落を追加します。
- Paragraph.AppendField() メソッドを使用して段落に差し込みフィールドを追加します。
- ドキュメントを保存します。
- C#
using Spire.Doc;
using Spire.Doc.Documents;
namespace MailMerge
{
class Program
{
static void Main(string[] args)
{
// Create an instance of Document class
Document doc = new Document();
// Add a section to the document
Section section = doc.AddSection();
// Add a paragraph to the section
Paragraph para = section.AddParagraph();
// Set the format
section.PageSetup.Margins.All = 80;
ParagraphStyle style = new ParagraphStyle(doc);
style.Name = "Default Style";
style.CharacterFormat.FontName = "Yu Gothic UI";
style.CharacterFormat.FontSize = 12;
doc.Styles.Add(style);
para.ApplyStyle(style.Name);
// Add text and mail merge fields to the paragraph
para.AppendText("氏名:");
para.AppendField("Name", FieldType.FieldMergeField);
para.AppendBreak(BreakType.LineBreak);
para.AppendText("メールアドレス:");
para.AppendField("Email", FieldType.FieldMergeField);
para.AppendBreak(BreakType.LineBreak);
para.AppendText("アバター:");
para.AppendField("Image:Avatar", FieldType.FieldMergeField);
// Save the document
doc.SaveToFile("Example.docx", FileFormat.Docx2019);
doc.Close();
}
}
}
Word ドキュメントでの簡単な差し込み印刷
Spire.Doc は、Word ドキュメントで指定された差し込み印刷操作を実行するための MailMerge.Execute() メソッドを提供します。このメソッドは6つのオーバーロードがあり、DataTable、DataView、および文字列配列など、さまざまなデータソースから差し込み印刷を実行できます。
配列で提供されたデータを使用して差し込み印刷を実行する手順は次のとおりです。
- Document のインスタンスを作成します。
- Word ドキュメントを読み込みます。
- フィールド名を保持する配列を定義します。
- フィールドを埋めるために使用する値を保持する配列を定義します。
- MailMerge.Execute() メソッドを使用してフィールドにデータを差し込みます。
- ドキュメントを保存します。
- C#
using Spire.Doc;
using Spire.Doc.Reporting;
using System.Drawing;
namespace MailMergeInDocument
{
class Program
{
static void Main(string[] args)
{
// Create a Document object
Document document = new Document();
// Load the template Word document
document.LoadFromFile("Example.docx");
// Specify field names
String[] fieldNames = {
"Name",
"Email",
"Avatar"
};
// Specify values that'll be used to fill the fields
String[] fieldValues = {
"山田 太郎",
"yamadatarou @email.com",
"yamadatarou.png"
};
// Register an event which occurs when merging the image filed
document.MailMerge.MergeImageField += new MergeImageFieldEventHandler(MailMerge_MergeImageField);
// Mail merge data to the document
document.MailMerge.Execute(fieldNames, fieldValues);
// Save the document
document.SaveToFile("差し込み印刷.docx", FileFormat.Docx2019);
// Dispose resources
document.Dispose();
}
// Fill an image field with a picture
private static void MailMerge_MergeImageField(object sender, MergeImageFieldEventArgs field)
{
string filePath = field.FieldValue as string;
if (!string.IsNullOrEmpty(filePath))
{
field.Image = Image.FromFile(filePath);
}
}
}
}
領域を指定した差し込み印刷
領域とは、データソースからのデータを挿入するドキュメント内の特定のエリアを指します。差し込み印刷は、データソース内の各レコードに対してその領域を繰り返します。Spire.Doc は、MailMerge.ExecuteWidthRegion() メソッドを提供し、領域を指定した差し込み印刷を実行します。
DataTable によって提供されたデータを使用して領域を指定した差し込み印刷を実行する手順は次のとおりです。
- Document のインスタンスを作成します。
- Word ドキュメントを読み込みます。
- データソースとして使用する DataTable オブジェクトを作成します。
- MailMerge.ExecuteWidthRegion() メソッドを使用して領域を指定した差し込み印刷を実行します。
- ドキュメントを保存します。
- C#
using Spire.Doc;
using System.Data;
namespace MailMergeWithGroup
{
class Program
{
static void Main(string[] args)
{
// Document オブジェクトを作成する
Document document = new Document();
// テンプレートのWord文書を読み込む
document.LoadFromFile("Sample.docx");
// テーブル名を指定してデータテーブルを作成する
DataTable table = new DataTable("会員");
// テーブルにサンプルデータを追加する
table.Columns.Add("名前");
table.Columns.Add("登録日");
table.Columns.Add("市");
table.Rows.Add("佐藤 一郎", "2024-01-15", "東京");
table.Rows.Add("鈴木 次郎", "2024-02-20", "大阪");
table.Rows.Add("高橋 三郎", "2024-03-10", "名古屋");
table.Rows.Add("田中 四郎", "2024-04-05", "札幌");
table.Rows.Add("渡辺 五郎", "2024-05-01", "福岡");
// 領域内でメールマージを実行する
document.MailMerge.ExecuteWidthRegion(table);
// 文書を保存する
document.SaveToFile("output/地域との差し込み印刷.docx", FileFormat.Docx2019);
// リソースを破棄する
document.Dispose();
}
}
}
入れ子の領域を使った差し込み印刷
入れ子のグループの差し込み印刷は、入れ子の領域内の差し込みフィールドを、階層構造で整理されたデータで置換することによって機能します。入れ子の領域を使用すると、ある領域の内容が他の領域のデータに依存する、より複雑なレイアウトを作成できます。
XML ファイルのデータを使用して入れ子の領域で差し込み印刷を実行する手順は次のとおりです。
- Document のインスタンスを作成します。
- Word ドキュメントを読み込みます。
- XML ファイルから DataSet オブジェクトにデータを読み込みます。
- 差し込みフィールド情報を格納するために List<DictionaryEntry> オブジェクトを作成します。
- 差し込みフィールド名と関連する式を指定する DicitionaryEntry オブジェクトを作成し、それをリストに追加します。
- MailMerge.ExecuteWidthNestedRegion() メソッドを使用して入れ子の領域で差し込み印刷を実行します。
- ドキュメントを保存します。
- C#
using Spire.Doc;
using System.Collections;
using System.Data;
namespace MailMergeWithNestedRegions
{
class Program
{
static void Main(string[] args)
{
// Documentオブジェクトを作成
Document document = new Document();
// テンプレートWord文書を読み込む
document.LoadFromFile("Sample.docx");
// XMLファイルからデータを読み込んでDataSetオブジェクトに格納
DataSet dataSet = new DataSet();
dataSet.ReadXml("Sample.xml");
// マージフィールド情報を格納するListオブジェクトを作成
List<DictionaryEntry> list = new List<DictionaryEntry>();
// 2つのDictionaryEntryオブジェクトを作成し、リストに追加する(それぞれのオブジェクトはマージフィールド名と関連する式を指定)
DictionaryEntry dictionaryEntry = new DictionaryEntry("会員紹介", string.Empty);
list.Add(dictionaryEntry);
dictionaryEntry = new DictionaryEntry("会員情報", "会員ID = %会員紹介.会員ID%");
list.Add(dictionaryEntry);
// ネストされた領域を持つメールマージ操作を実行
document.MailMerge.ExecuteWidthNestedRegion(dataSet, list);
// ファイルに保存
document.SaveToFile("output/入れ子の領域での差し込み印刷.docx", FileFormat.Docx2019);
// リソースを解放
document.Dispose();
}
}
}
一時ライセンスを申請する
結果ドキュメントから評価メッセージを削除したい場合、または機能制限を取り除く場合は、についてこのメールアドレスはスパムボットから保護されています。閲覧するにはJavaScriptを有効にする必要があります。にお問い合わせ、30 日間有効な一時ライセンスを取得してください。