C# 코드를 사용하여 Word 문서의 메일 머지를 수행하기
메일 머지는 Microsoft Word의 강력한 기능으로, 단일 템플릿 문서와 데이터 원본을 사용하여 여러 문서를 생성할 수 있게 해줍니다. 예를 들어, 편지, 라벨, 봉투, 심지어 이메일도 생성할 수 있습니다. 많은 수신자에게 개인화된 편지를 보내야 하는 작업에서, 메일 머지는 각 편지를 일일이 작성할 필요가 없기 때문에 특히 유용합니다.
이 글에서는 Spire.Doc for .NET을 사용하여 Word 문서에서 메일 머지를 수행하는 방법을 소개합니다.
Spire.Doc for .NET 설치
먼저, Spire.Doc for .NET 패키지에 포함된 DLL 파일을 .NET 프로젝트의 참조에 추가해야 합니다. 이러한 DLL 파일은 아래 링크를 통해 다운로드하거나 NuGet을 통해 설치할 수 있습니다.
PM> Install-Package Spire.Doc메일 머지의 구성 요소 이해하기
주 문서(Main Document): 편지, 라벨 또는 다른 유형의 문서를 디자인하고, 데이터 소스의 데이터로 채워질 자리 표시자(머지 필드)를 추가하는 템플릿 파일입니다.
데이터 소스(Data Source): 주 문서에 채워 넣을 정보를 포함하는 스프레드시트 또는 데이터베이스입니다.
Excel 시트, Access 데이터베이스、CSV 파일、XML 파일 또는 간단한 텍스트 파일 등 다양한 형식이 될 수 있습니다.머지 필드(Merge Fields): 주 문서에 포함된 자리 표시자로, 데이터 소스의 해당 레코드 값으로 대체됩니다.
템플릿 Word 문서 생성하기
머지 필드를 포함한 템플릿 Word 문서를 생성하려면 Microsoft Word와 같은 워드 편집기를 사용하는 것이 좋습니다.
워드 편집기의 시각적 인터페이스를 사용하면 템플릿 레이아웃, 서식, 기타 요소를 인터랙티브하게 디자인할 수 있어 작업 효율이 높아집니다.
예제 코드:
using Spire.Doc;
using Spire.Doc.Documents;
namespace CreateTemplate
{
class Program
{
static void Main(string[] args)
{
// Document 개체 생성
Document document = new Document();
// 섹션 추가
Section section = document.AddSection();
// 단락 추가
Paragraph paragraph = section.AddParagraph();
// 단락에 텍스트와 메일 머지 필드 추가
paragraph.AppendText("Full Name: ");
paragraph.AppendField("Name", FieldType.FieldMergeField);
paragraph.AppendBreak(BreakType.LineBreak);
paragraph.AppendText("Email Address: ");
paragraph.AppendField("Email", FieldType.FieldMergeField);
paragraph.AppendBreak(BreakType.LineBreak);
paragraph.AppendText("Avatar: ");
paragraph.AppendField("Image:Avatar", FieldType.FieldMergeField);
// 문서 저장
document.SaveToFile("Template.docx", FileFormat.Docx2019);
// 리소스 해제
document.Dispose();
}
}
}Word 문서에서의 간단한 메일 머지
Spire.Doc은 Word 문서에서 지정된 메일 머지 작업을 실행할 수 있는 MailMerge.Execute() 메서드를 제공합니다.
이 메서드는 6가지 오버로드를 제공하며, DataTable, DataView, 문자열 배열 등 다양한 데이터 소스에서 메일 머지를 수행할 수 있습니다.
예제 코드:
using Spire.Doc;
using Spire.Doc.Reporting;
using System.Drawing;
namespace MailMergeInDocument
{
class Program
{
static void Main(string[] args)
{
// Document 객체 생성
Document document = new Document();
// 템플릿 Word 문서 로드
document.LoadFromFile("C:\\Users\\Administrator\\Desktop\\Template.docx");
// 필드 이름 지정
String[] fieldNames = {
"Name",
"Email",
"Avatar"
};
// 필드에 채워 넣을 값 지정
String[] fieldValues = {
"John Smith",
"john.smith@e-iceblue.com",
"C:\\Users\\Administrator\\Desktop\\avatar.png"
};
// 이미지 병합 필드가 트리거될 때 실행되는 이벤트 등록
document.MailMerge.MergeImageField += new MergeImageFieldEventHandler(MailMerge_MergeImageField);
// 메일 머지 실행
document.MailMerge.Execute(fieldNames, fieldValues);
// 문서 저장
document.SaveToFile("MailMerge.docx", FileFormat.Docx2019);
// 리소스 해제
document.Dispose();
}
// 이미지로 이미지 필드 채우기
private static void MailMerge_MergeImageField(object sender, MergeImageFieldEventArgs field)
{
string filePath = field.FieldValue as string;
if (!string.IsNullOrEmpty(filePath))
{
field.Image = Image.FromFile(filePath);
}
}
}
}영역을 포함한 메일 머지
영역(Region)이란, 문서에서 데이터 소스의 내용을 삽입하고자 하는 특정 구역을 의미합니다. 메일 머지는 데이터 소스의 각 레코드마다 해당 영역을 반복하여 생성합니다.
Spire.Doc은 영역 기반 메일 머지를 수행하기 위해 MailMerge.ExecuteWithRegion() 메서드를 제공합니다.
예제 코드:
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("C:\\Users\\Administrator\\Desktop\\Template.docx");
// XML 파일에서 데이터를 읽어 DataSet 객체에 로드
DataSet dataSet = new DataSet();
dataSet.ReadXml("C:\\Users\\Administrator\\Desktop\\Orders.xml");
// 병합 필드 정보를 저장하기 위한 List 객체 생성
List list = new List();
// 두 개의 DictionaryEntry 객체를 생성하여 리스트에 추가(각 항목은 병합 필드명과 연결된 식을 지정)
DictionaryEntry dictionaryEntry = new DictionaryEntry("Customer", string.Empty);
list.Add(dictionaryEntry);
dictionaryEntry = new DictionaryEntry("Order", "Customer_Id = %Customer.Customer_Id%");
list.Add(dictionaryEntry);
// 중첩 영역이 포함된 메일 머지 실행
document.MailMerge.ExecuteWidthNestedRegion(dataSet, list);
// 파일로 저장
document.SaveToFile("MailMergeWithNestedRegions.docx", FileFormat.Docx2019);
// 리소스 해제
document.Dispose();
}
}
}임시 라이선스 신청
생성된 문서에서 평가용 메시지를 제거하거나 기능 제한을 해제하려면, 30일 동안 사용 가능한 체험용 라이선스를 신청해 주세요.