메일 병합은 편지, 라벨, 봉투와 같은 문서를 빠르고 쉽게 만드는 Microsoft Word의 기능입니다. Aspose.Words Cloud는 표준 메일 병합을 취하고 여러 단계 더 발전시켜 보고서, 카탈로그, 재고, 송장과 같은 더욱 복잡한 문서를 생성할 수 있는 본격적인 보고 솔루션으로 전환합니다. Aspose.Words Cloud 보고 솔루션의 장점은 다음과 같습니다.

  • 표준 메일 병합 필드를 사용하여 Microsoft Word에서 보고서 디자인
  • 주문의 세부 행과 같이 증가하는 문서의 영역을 정의합니다.
  • 메일 병합 중 이미지 삽입
  • 메일 병합 중 HTML 삽입

기본 단계

메일 병합을 수행하는 단계는 매우 쉽습니다. 먼저 Microsoft Word를 사용하여 일반적으로 템플릿이라고 하는 Word 문서를 만들고 디자인합니다. 문서가 Microsoft Word 템플릿(.dot)일 필요는 없으며 일반 .doc 문서일 수 있습니다. 나중에 데이터 소스의 데이터를 삽입하려는 위치에 병합 필드라는 특수 필드를 템플릿에 삽입합니다. 그런 다음 Aspose.Words REST API를 사용하여 메일 병합 작업을 실행합니다. 메일 병합 작업은 데이터 소스에서 데이터를 가져와 문서에 병합합니다.

문서에서 반복 가능한 병합 영역을 지정하거나 이미지와 같은 다른 콘텐츠를 삽입할 수 있는 특수 병합 필드를 삽입할 수도 있습니다. 문서 내에서 메일 병합 필드와 반복 가능한 영역을 설정하는 방법에 따라 데이터 소스의 여러 레코드를 수용하도록 문서가 커집니다. 메일 병합 영역을 사용하지 않으면 메일 병합이 Microsoft Word 메일 병합과 유사해지고 전체 문서 콘텐츠가 데이터 소스의 각 레코드에 대해 반복됩니다. 반복 가능한 메일 병합 영역을 사용하면 데이터 소스의 각 레코드에 대해 반복될 문서 내부의 부분을 지정할 수 있습니다. 예를 들어, 테이블 행을 반복 가능한 영역으로 표시하면 이 테이블 행이 반복되어 테이블이 모든 데이터를 수용하도록 동적으로 커집니다.

문서 준비

메일 병합을 실행하기 전에 문서 템플릿을 준비해야 합니다. 데이터 소스의 값으로 대체될 병합 필드를 삽입해야 합니다.

문서에 병합 필드 삽입

문서에 병합 필드를 삽입하려면:

  1. Microsoft Word에서 문서를 엽니다.
  2. 문서에서 병합 필드를 넣을 위치를 클릭합니다.
  3. 삽입 메뉴를 열고 필드를 선택하여 필드 대화 상자를 엽니다.
  4. 필드 이름 목록에서 MergeField를 선택합니다.
  5. 필드 이름 텍스트 상자에 병합 필드의 이름을 입력하고 확인을 누릅니다.

병합 필드는 일반 Microsoft Word 필드이므로 키보드 단축키 Alt+F9를 사용하여 Microsoft Word에서 필드 코드와 결과를 표시하는 것을 전환할 수 있습니다. 필드 코드는 중괄호 사이에 나타납니다.

간단한 메일 병합

간단한 메일 병합(Microsoft Word에서 제공하는 기존 메일 병합과 비슷하게 영역 없이)을 수행하기 위해 템플릿을 준비하려면 데이터 소스의 데이터로 채울 위치에 하나 이상의 병합 필드를 삽입하기만 하면 됩니다.

Dinner Invitation 데모를 살펴보겠습니다. 데이터 소스에 정의된 클라이언트 목록에 대한 편지를 만듭니다. 템플릿에는 두 개의 데이터 소스에서 채워진 여러 개의 병합 필드가 포함되어 있습니다. 즉, 두 개의 메일 병합이 차례로 수행됩니다. 먼저, 첫 번째 데이터 소스의 데이터가 템플릿에 병합됩니다. 이 데이터 소스에는 초대자에 대한 정보이기 때문에 행이 하나만 포함되어 있으므로 전체 문서 내용이 반복되지 않고 적절한 필드에만 데이터가 채워집니다. 그런 다음 두 번째 메일 병합 작업이 실행됩니다. 사용하는 데이터 소스에는 클라이언트에 대한 정보가 포함되어 있습니다. 전체 템플릿은 각 데이터 행에 대해 반복되고 모든 반복된 사본은 해당 클라이언트의 데이터로 채워집니다.

메일 병합

그 결과, 우리는 5개의 작성되고, 완전하고, 개인화된 초대장으로 구성된 문서를 얻었습니다(아래는 첫 번째 초대장의 일부입니다):

메일 병합을 수행하다

보시다시피, 동일한 템플릿으로 여러 병합 작업을 수행하여 데이터를 단계별로 추가하는 것이 가능하고, 때로는 유용합니다. Word 문서에 NEXT 필드를 삽입하여 메일 병합 엔진이 데이터 소스에서 다음 레코드를 선택하고 병합을 계속하도록 할 수 있습니다. 엔진이 NEXT 필드를 발견하면 데이터 소스에서 다음 레코드를 선택하고 내용을 복사하지 않고 병합을 계속합니다. 우편 라벨과 같은 문서를 만들 때 이를 사용할 수 있습니다.

간단한 메일 병합을 수행하는 코드는 아래와 같습니다.

// 전체 예제와 데이터 파일은 https://github.com/aspose-words-cloud/aspose-words-cloud-dotnet에서 확인하세요.

string MyAppKey = ""; // Get AppKey and AppSID from https://dashboard.aspose.cloud/
string MyAppSid = ""; // Get AppKey and AppSID from https://dashboard.aspose.cloud/

WordsApi wordsApi = new WordsApi(MyAppKey, MyAppSid);
StorageApi storageApi = new StorageApi(MyAppKey, MyAppSid);

var fileName = "DinnerInvitation.docx";
var destFileName = "InviterAdded.docx";
var data = File.ReadAllText(@"c:\Data\" + "Inviter.xml");
string folder = null; // File exists at the root of the storage

// 소스 문서를 클라우드 스토리지에 업로드
PutCreateRequest request = new PutCreateRequest(fileName, File.OpenRead(@"c:\Data\" + fileName), null, null);
storageApi.PutCreate(request);

// 처음으로 메일 병합 작업을 실행합니다.
var executeMailMergeRequest = new PostDocumentExecuteMailMergeRequest(fileName, data, folder, destFileName: destFileName, withRegions: false);
var actual = wordsApi.PostDocumentExecuteMailMerge(executeMailMergeRequest);

// 두 번째로 메일 병합 작업을 실행합니다.
fileName = destFileName;
destFileName = "FinalDinnerInvitation.docx";
data = File.ReadAllText(@"c:\Data\" + "Clients.xml");

executeMailMergeRequest = new PostDocumentExecuteMailMergeRequest(fileName, data, folder, destFileName: destFileName, withRegions: false);
actual = wordsApi.PostDocumentExecuteMailMerge(executeMailMergeRequest);

지역별 메일 병합

문서 내에서 동적으로 부분을 늘리려면 영역이 있는 메일 병합을 사용합니다. 문서에서 메일 병합 영역을 지정하려면 두 개의 메일 병합 필드를 삽입하여 메일 병합 영역의 시작과 끝을 표시해야 합니다. 메일 병합 영역 내에 포함된 모든 문서 콘텐츠는 데이터 소스의 모든 레코드에 대해 자동으로 반복됩니다.

메일 병합 영역의 시작을 표시하려면 이름이 TableStart:MyTable인 MERGEFIELD를 삽입합니다. 여기서 MyTable은 각각 XML 또는 JSON의 태그 또는 키에 해당합니다. 메일 병합 영역의 끝을 표시하려면 이름이 TableEnd:MyTable인 다른 MERGEFIELD를 삽입합니다. 이러한 표시 필드 사이에 데이터 소스의 필드에 해당하는 병합 필드를 배치합니다. 이러한 병합 필드는 데이터 소스의 첫 번째 행의 데이터로 채워진 다음 전체 영역이 반복되고 새 필드는 두 번째 행의 데이터로 채워집니다.

지역을 표시할 때 다음의 간단한 규칙을 따르세요.

  • TableStart 및 TableEnd 필드는 문서의 동일한 섹션 내에 있어야 합니다.
  • 테이블 내부에서 사용하는 경우 TableStart와 TableEnd는 테이블의 같은 행 내부에 있어야 합니다.
  • 메일 병합 영역은 서로 중첩될 수 있습니다.
  • 메일 병합 영역은 잘 구성되어야 합니다(항상 동일한 테이블 이름을 가진 일치하는 TableStart 및 TableEnd 쌍이 있음)

예를 들어, Item Catalog 데모를 살펴보세요. 다음은 메일 병합을 위해 준비된 영역의 일부입니다.

메일 병합

두 마킹 필드 TableStart:Item과 TableEnd:Item이 Word 테이블의 같은 행에 배치된다는 점에 유의하세요. 메일 병합을 실행한 후의 결과는 다음과 같습니다.

간단한 메일 병합

지역별로 메일 병합을 수행하는 코드는 아래와 같습니다.

// 전체 예제와 데이터 파일은 https://github.com/aspose-words-cloud/aspose-words-cloud-dotnet에서 확인하세요.

string MyAppKey = ""; // Get AppKey and AppSID from https://dashboard.aspose.cloud/
string MyAppSid = ""; // Get AppKey and AppSID from https://dashboard.aspose.cloud/

WordsApi wordsApi = new WordsApi(MyAppKey, MyAppSid);
StorageApi storageApi = new StorageApi(MyAppKey, MyAppSid);

var fileName = "Invoice_Template.doc";
var destFileName = "Invoice_Template_out_.doc";
var data = File.ReadAllText(@"c:\Data\" + "CustomerData.xml");
string folder = null; // File exists at the root of the storage

// 입력 문서를 Cloud Storage에 업로드
PutCreateRequest request = new PutCreateRequest(fileName, File.OpenRead(@"c:\Data\" + fileName), null, null);
storageApi.PutCreate(request);

var executeMailMergeRequest = new PostDocumentExecuteMailMergeRequest(fileName, data, folder, destFileName: destFileName, withRegions: true);
var actual = wordsApi.PostDocumentExecuteMailMerge(executeMailMergeRequest);

‘Mustache’ 템플릿 구문을 사용한 메일 병합

이 구문을 사용하면 병합 필드 대신 일반 텍스트 마커를 사용하는 메일 병합에 사용할 템플릿을 만들 수 있습니다. 이러한 마커는 다음과 같습니다. {{ FieldName }}

객체.속성 구문

다음 구문을 사용하면 필드의 속성을 쉽게 병합할 수 있습니다.

  {{ Address.Street }}  

이렇게 하면 다음과 같은 XML 데이터의 데이터가 병합됩니다.

<Order> // <-- Current context is here.  
  <Number>23</Number>  
  <Address>  
    <Street>Nelson Street</Street>  
    <Suburb>Howick</Suburb>  
    <City>Auckland</City>  
  </Address>  
  <PhoneNumber>543 1234</PhoneNumber>  
</Order>  

foreach 블록

foreach 태그를 사용하여 여러 레코드의 데이터를 병합할 수 있습니다. 이는 기존 병합 필드가 있는 메일 병합 영역과 유사합니다. 이러한 블록을 중첩할 수 있습니다.

{{ #foreach Order }}  
  {{ Number }}  
    {{ Address.Street }}  
      {{ #foreach Item }}  
        {{ Description }} {{ Cost}} {{ Total }}  
      {{/foreach Item }}  
{{ /foreach Order }} 

이러한 필드를 혼합하여 IF 또는 수식 필드 등 다른 Microsoft Word 필드 내에 배치할 수도 있습니다.

조건 블록

Aspose.Words Cloud를 사용하여 IF 문과 함께 메일 병합을 사용할 수 있습니다. IF 블록은 연관된 부울 표현식이 참인 경우에만 실행됩니다. IF의 구문은 아래와 같습니다.

{ IF "{{ GENDER }}" = “MALE” “true text” “false text” }

‘Mustache’ 템플릿을 사용하여 메일 병합을 수행하는 코드는 아래와 같습니다.

// 전체 예제와 데이터 파일은 https://github.com/aspose-words-cloud/aspose-words-cloud-dotnet에서 확인하세요.

string MyAppKey = ""; // Get AppKey and AppSID from https://dashboard.aspose.cloud/
string MyAppSid = ""; // Get AppKey and AppSID from https://dashboard.aspose.cloud/

WordsApi wordsApi = new WordsApi(MyAppKey, MyAppSid);
StorageApi storageApi = new StorageApi(MyAppKey, MyAppSid);

var fileName = "VendorTemplate.doc";
var destFileName = "VendorTemplate_Out.docx";
string folder = null; // File exists at the root of the storage

var data = File.ReadAllText(@"c:\Data\" + "Vendors.xml");

// 입력 문서를 Cloud Storage에 업로드
PutCreateRequest request = new PutCreateRequest(fileName, File.OpenRead(@"c:\Data\" + fileName), null, null);
storageApi.PutCreate(request);

var postExecuteTemplateRequest = new PostExecuteTemplateRequest(fileName, data, folder, destFileName: destFileName);
var actual = wordsApi.PostExecuteTemplate(postExecuteTemplateRequest);

메일 병합 중 HTML 삽입

executeMailMergeexecuteTemplate API는 모두 병합 필드에 HTML을 삽입하는 데 대한 지원을 제공합니다. 데이터 소스 문자열에서 HTML 문자를 이스케이프하고 아래에 표시된 대로 “format”=“html” 속성을 사용하기만 하면 됩니다.

{     
  "dataSourceList": {   
    "contractDS": {  
      "contractDescription": {  
        "format":"html",   
        "htmlText": "<b>Test me 1<br><br><i>Test me 2<br><br><u>Test me 2</u></i></b><br>"         
      }       
    }     
  }   
}

다음 코드는 메일 병합 중에 HTML을 삽입하는 방법을 보여줍니다.

// 전체 예제와 데이터 파일은 https://github.com/aspose-words-cloud/aspose-words-cloud-dotnet에서 확인하세요.

using System;
using System.IO;
using Aspose.Words.Cloud.Sdk;
using Aspose.Words.Cloud.Sdk.Model;
using Aspose.Words.Cloud.Sdk.Model.Requests;

namespace Aspose.Words.Cloud.Examples.CSharp
{
	public class PopulateMailMergeTemplateWithHTMLData
	{
		public static void Run()
		{
			WordsApi wordsApi = new WordsApi(Constants.AppKey, Constants.AppSID);

			try
			{
				string fileName = "template.doc";
				string destName = "Out_PostDocumentExecuteMailMergeWithHTMLData.docx";

				// 원본 문서를 클라우드 스토리지에 업로드
				wordsApi.UploadFile(new UploadFileRequest(File.Open("..\\..\\..\\Resources\\" + fileName, FileMode.Open), fileName, Constants.MYStorage));

				string data = File.ReadAllText("..\\..\\..\\Resources\\TestPostDocumentExecuteMailMerge.txt", System.Text.Encoding.UTF8);
				ExecuteMailMergeRequest request = new ExecuteMailMergeRequest(fileName, data, null, Constants.MYStorage, null, null, null, null, null, null, destName);
				DocumentResponse result = wordsApi.ExecuteMailMerge(request);

			}
			catch (Exception e)
			{
				Console.WriteLine(e.ToString());
			}
		}
	}
}

메일 병합 중 이미지 삽입

병합 필드에 이미지를 삽입할 수도 있습니다. 이미지의 배율 인수는 ‘%’, ‘px’ 또는 ‘’(비례적 배율)를 사용하여 설정할 수 있습니다. 메일 병합 중에 이미지를 삽입하는 코드는 다음과 같습니다.

// 전체 예제와 데이터 파일은 https://github.com/aspose-words-cloud/aspose-words-cloud-dotnet에서 확인하세요.

string MyAppKey = ""; // Get AppKey and AppSID from https://dashboard.aspose.cloud/
string MyAppSid = ""; // Get AppKey and AppSID from https://dashboard.aspose.cloud/

WordsApi wordsApi = new WordsApi(MyAppKey, MyAppSid);
StorageApi storageApi = new StorageApi(MyAppKey, MyAppSid);

var fileName = "TestMailMergeWithImages.doc";
var destFileName = "TestMailMergeWithImages_Out.docx";
var data = File.ReadAllText(WordsExamples.PathToDataFiles + @"\DocumentActions\MailMerge\" + "MailMergeData.txt");
string folder = null; // File exists at the root of the storage

// 입력 문서를 Cloud Storage에 업로드
PutCreateRequest request = new PutCreateRequest(fileName, File.OpenRead(WordsExamples.PathToDataFiles + @"\DocumentActions\MailMerge\" + fileName), null, null);
storageApi.PutCreate(request);

var executeMailMergeRequest = new PostDocumentExecuteMailMergeRequest(fileName, data, folder, destFileName: destFileName, withRegions: false);
var actual = wordsApi.PostDocumentExecuteMailMerge(executeMailMergeRequest);

클라우드 SDK

위의 코드는 .NET에 있지만 Aspose.Words Cloud SDK는 .NET, Java, Ruby, Python 및 Node.js의 다섯 가지 언어로 제공됩니다. 따라서 이러한 언어 중 하나로 메일 병합 API를 편리하게 호출할 수 있습니다.

제안된 게시물: