Automating the creation of personalized documents—such as reports, letters, and invoices—can significantly enhance efficiency in your workflow. With C# Mail Merge powered by Aspose.Words for .NET, you can achieve this seamlessly. This guide will walk you through using the Aspose.Words Mail Merge Plugin to perform efficient and scalable document generation within your .NET applications—without the need for MS Word or Office Interop. By the end of this guide, you will be equipped to integrate C# mail merge for report automation and streamline your reporting workflow.


Contents


What is Mail Merge?

Mail Merge는 다양한 소스의 데이터를 사용하여 템플릿을 동적으로 생성하는 강력한 방법론입니다. Aspose.Words를 사용하면 다음과 같은 작업을 자동화할 수 있습니다:

  • 개인화된 편지 및 송장 생성.
  • XML, JSON 또는 데이터베이스와 같은 구조화된 형식을 사용하여 대량 보고서 생성, C# 및 Aspose.Words를 사용한 동적 보고서 생성을 가능하게 합니다.

Data Sources for Mail Merge

Aspose.Words는 다양한 데이터 소스를 지원합니다:

  • 객체: 클래스 인스턴스를 사용하여 템플릿을 채웁니다.
  • XML: 동적 필드를 위한 구조화된 데이터를 로드합니다.
  • JSON: 현대 API와 쉽게 통합합니다.
  • CSV: 대량 문서 생성을 위한 표 형식 데이터를 활용합니다.
  • DataTable/DataSet: 데이터베이스 통합을 위해 ADO.NET을 활용합니다.

Preparing Template for Mail Merge

메일 머지 템플릿은 실행 중에 지정된 데이터 소스의 데이터로 채워질 병합 필드를 포함하는 문서입니다. 템플릿은 DOC 또는 DOCX 형식일 수 있으며 특정 스타일이 필요하지 않습니다. 메일 머지 템플릿을 만들려면 다음 단계를 따르십시오:

  1. MS Word에서 문서를 열거나 새 문서를 만듭니다.
  2. 병합 필드를 삽입할 위치에 커서를 놓습니다.
  3. 삽입 메뉴에서 필드 옵션을 선택합니다.
  4. 필드 이름 목록에서 MergeField를 선택합니다.
  5. 필드 이름 상자에 병합 필드의 이름을 지정하고 확인을 클릭합니다.
  6. 문서를 저장합니다.

다음 스크린샷은 샘플 템플릿 문서를 보여줍니다.

Mail Merge Template

.NET Mail Merge API - Installation

다양한 방법을 통해 Aspose.Words for .NET을 설치할 수 있습니다:

Perform Mail Merge in Word Document using C#

템플릿이 준비되면 문서를 생성하기 위해 메일 머지를 실행할 수 있습니다. 준비된 템플릿에서 메일 머지를 수행하는 단계는 다음과 같습니다:

  1. Document 클래스를 사용하여 템플릿 문서를 로드합니다.
  2. Document.MailMerge.TrimWhitespaces와 같은 필수 메일 머지 옵션을 설정합니다.
  3. Document.MailMerge.Execute() 메서드를 사용하여 메일 머지를 실행하고 데이터 소스를 매개변수로 전달합니다.
  4. Document.Save(String) 메서드를 사용하여 생성된 문서를 저장합니다.

다음은 값 배열을 사용하여 C#에서 보고서 생성을 자동화하는 방법을 보여주는 코드 샘플입니다:


Word Document after Mail Merge

Execute Mail Merge in C#

Perform Mail Merge using XML Data Source in C#

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 파일에서 데이터를 채울 메일 머지 템플릿입니다.

Mail Merge Template for XML

이 이미지는 메일 머지를 실행한 후 얻은 결과 Word 문서의 첫 페이지를 나타냅니다.

Execute Mail Merge with XML in C#

Custom Formatting of Merge Fields

Aspose.Words for .NET은 메일 머지 프로세스에 대한 향상된 제어를 제공합니다. MailMerge.FieldMergingCallback 속성을 사용하면 각 병합 필드가 발견될 때 메일 머지 동작을 구성할 수 있습니다. IFieldMergingCallback.FieldMergingIFieldMergingCallback.ImageFieldMerging 메서드를 구현하면 메일 머지 작업을 사용자 정의할 수 있습니다.

아래는 제공된 예제 템플릿을 통해 메일 머지 중 사용자 정의 서식을 적용하는 방법을 보여주는 코드 샘플입니다:

다음은 HandleMergeFieldAlternatingRows 클래스를 구현한 것입니다.

Mail Merge with Regions using C#

경우에 따라 Word 문서 내 특정 영역을 채우고 반복해야 할 필요가 있습니다. 이러한 시나리오에서는 영역을 사용한 메일 머지를 활용하십시오. 영역을 만들려면 시작과 끝을 모두 지정해야 하며, 메일 머지는 데이터 소스의 각 레코드에 대해 이 영역을 반복합니다. 아래 템플릿 예제에는 병합 필드 «TableStart:Orders», «TableEnd:Orders», «TableStart:OrderDetails», «TableEnd:OrderDetails»를 사용하여 두 개의 영역—주문 및 주문 세부정보가 포함되어 있습니다.

Mail Merge Template with Regions

아래는 이전에 언급한 템플릿을 기반으로 영역에 따라 메일 머지를 실행하는 코드 샘플입니다.

아래 메서드는 데이터베이스에서 데이터를 읽는 방법을 보여줍니다.

Nested Mail Merge

종종, 소스의 데이터는 관계형 형식으로 구조화됩니다. 예를 들어, “주문"은 “주문 세부정보"와 일대다 관계를 가질 수 있으며, 이는 주문 내 항목의 기록을 유지합니다. 이러한 시나리오에서는 중첩 메일 머지를 사용하십시오. 아래는 이 시나리오에 잘 맞는 샘플 송장 템플릿입니다.

Mail Merge Template with Regions

아래는 중첩 메일 머지 예제를 위한 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 Document after Mail Merge

아래는 중첩 메일 머지를 실행한 후 얻은 결과 Word 문서의 첫 페이지입니다.

Word Document after Mail Merge

Conclusion

Aspose.Words for .NET은 .NET 애플리케이션에 적합한 표준 및 확장된 기능을 모두 제공하는 포괄적인 메일 머지 API입니다. 몇 줄의 코드로 다양한 데이터 소스에서 간단하거나 복잡한 보고서를 원활하게 개발할 수 있습니다. .NET 자동 보고서 생성 모범 사례에 대한 안내는 문서를 참조하십시오. Aspose.Words for .NET을 시작하려면 개발자 가이드GitHub의 샘플 코드를 탐색하십시오. Aspose Plugin은 보고서 생성을 위한 고급 기능도 제공합니다.

Try Aspose.Words for .NET for Free

제한 없이 Aspose.Words for .NET을 사용해 볼 수 있는 무료 임시 라이센스를 받을 수 있습니다. 지금 임시 라이센스를 받으세요.