Mail Merge เป็นฟีเจอร์ของ Microsoft Word ที่ช่วยให้สร้างเอกสาร เช่น จดหมาย ป้ายกำกับ และซองจดหมายได้อย่างรวดเร็วและง่ายดาย Aspose.Words Cloud นำ Mail Merge มาตรฐานมาพัฒนาให้ก้าวหน้าไปอีกขั้น ทำให้เป็นโซลูชันการรายงานที่ครบครันซึ่งช่วยให้คุณสร้างเอกสารที่ซับซ้อนยิ่งขึ้นได้ เช่น รายงาน แค็ตตาล็อก สินค้าคงคลัง และใบแจ้งหนี้ ข้อดีของโซลูชันการรายงาน 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. จากรายการชื่อเขตข้อมูล ให้เลือกผสานเขตข้อมูล
  5. ในกล่องข้อความชื่อเขตข้อมูล ให้ป้อนชื่อสำหรับเขตข้อมูลผสานและกดตกลง

เนื่องจากฟิลด์ผสานเป็นฟิลด์ Microsoft Word ปกติ คุณจึงสลับระหว่างการแสดงโค้ดฟิลด์และผลลัพธ์ในเอกสารของคุณใน Microsoft Word ได้โดยใช้แป้นพิมพ์ลัด Alt+F9 โค้ดฟิลด์จะปรากฏระหว่างวงเล็บปีกกา

การผสานจดหมายแบบง่าย

ในการเตรียมเทมเพลตของคุณเพื่อดำเนินการผสานจดหมายแบบง่าย (โดยไม่มีภูมิภาค ซึ่งคล้ายกับการผสานจดหมายแบบคลาสสิกที่มีใน Microsoft Word) คุณควรแทรกเขตข้อมูลผสานหนึ่งเขตข้อมูลหรือมากกว่าในตำแหน่งที่คุณต้องการให้กรอกข้อมูลจากแหล่งข้อมูล

มาดูการสาธิตการเชิญไปทานอาหารค่ำกัน มันสร้างจดหมายสำหรับรายชื่อลูกค้าที่กำหนดไว้ในแหล่งข้อมูล เทมเพลตประกอบด้วยฟิลด์ผสานจำนวนหนึ่งที่เติมจากแหล่งข้อมูลสองแหล่ง กล่าวอีกนัยหนึ่ง คือการผสานจดหมายสองครั้งติดต่อกัน ขั้นแรก ข้อมูลจากแหล่งข้อมูลแรกจะถูกผสานเข้าในเทมเพลต แหล่งข้อมูลนี้มีเพียงแถวเดียวเนื่องจากเป็นข้อมูลเกี่ยวกับผู้เชิญ ดังนั้นเนื้อหาเอกสารทั้งหมดจะไม่ซ้ำกันและกรอกข้อมูลเฉพาะฟิลด์ที่เหมาะสมเท่านั้น จากนั้นจึงดำเนินการผสานจดหมายครั้งที่สอง แหล่งข้อมูลที่ใช้มีข้อมูลเกี่ยวกับลูกค้า เทมเพลตทั้งหมดจะถูกทำซ้ำสำหรับแต่ละแถวข้อมูล และสำเนาที่ทำซ้ำทุกฉบับจะถูกเติมด้วยข้อมูลของลูกค้าที่เกี่ยวข้อง

การผสานจดหมาย

ผลลัพธ์คือเรามีเอกสารที่ประกอบด้วยจดหมายเชิญที่กรอกข้อมูลครบถ้วนและเป็นส่วนตัวจำนวน 5 ฉบับ (แสดงส่วนหนึ่งของจดหมายฉบับแรกด้านล่าง):

ดำเนินการรวมจดหมาย

ดังที่คุณจะเห็น เป็นไปได้ที่จะดำเนินการผสานข้อมูลมากกว่าหนึ่งรายการด้วยเทมเพลตเดียวกันเพื่อเพิ่มข้อมูลทีละขั้นตอน และบางครั้งยังมีประโยชน์อีกด้วย คุณสามารถแทรกฟิลด์ NEXT ในเอกสาร Word เพื่อให้กลไกผสานจดหมายเลือกระเบียนถัดไปจากแหล่งข้อมูลและดำเนินการผสานต่อ เมื่อกลไกพบฟิลด์ NEXT กลไกจะเลือกระเบียนถัดไปในแหล่งข้อมูลและดำเนินการผสานต่อโดยไม่คัดลอกเนื้อหาใดๆ วิธีนี้ใช้ได้เมื่อสร้างเอกสาร เช่น ป้ายจ่าหน้าจดหมาย

โค้ดสำหรับดำเนินการ Simple Mail Merge มีดังต่อไปนี้:

// สำหรับตัวอย่างและไฟล์ข้อมูลแบบสมบูรณ์ โปรดไปที่ 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

// อัปโหลดเอกสารต้นฉบับไปยัง 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: 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);

การผสานจดหมายกับภูมิภาค

หากคุณต้องการขยายส่วนต่างๆ ในเอกสารแบบไดนามิก ให้ใช้การผสานจดหมายแบบมีขอบเขต หากต้องการระบุขอบเขตการผสานจดหมายในเอกสาร คุณต้องแทรกฟิลด์การผสานจดหมายสองฟิลด์เพื่อทำเครื่องหมายจุดเริ่มต้นและจุดสิ้นสุดของขอบเขตการผสาน เนื้อหาเอกสารทั้งหมดที่รวมอยู่ในขอบเขตการผสานจดหมายจะถูกทำซ้ำโดยอัตโนมัติสำหรับทุกระเบียนในแหล่งข้อมูล

หากต้องการทำเครื่องหมายจุดเริ่มต้นของพื้นที่การผสานจดหมาย ให้แทรก MERGEFIELD ที่มีชื่อว่า TableStart:MyTable โดยที่ MyTable สอดคล้องกับแท็กหรือคีย์ใน XML หรือ JSON ตามลำดับ หากต้องการทำเครื่องหมายจุดสิ้นสุดของพื้นที่การผสานจดหมาย ให้แทรก MERGEFIELD อีกอันที่มีชื่อว่า TableEnd:MyTable ระหว่างฟิลด์การทำเครื่องหมายเหล่านี้ ให้วางฟิลด์การผสานที่สอดคล้องกับฟิลด์ของแหล่งข้อมูลของคุณ ฟิลด์การผสานเหล่านี้จะถูกเติมด้วยข้อมูลจากแถวแรกของแหล่งข้อมูล จากนั้นภูมิภาคทั้งหมดจะถูกทำซ้ำ และฟิลด์ใหม่จะถูกเติมด้วยข้อมูลจากแถวที่สอง และเป็นเช่นนี้ต่อไป

ปฏิบัติตามกฎง่ายๆ เหล่านี้เมื่อทำเครื่องหมายภูมิภาค:

  • ฟิลด์ TableStart และ TableEnd จะต้องอยู่ภายในส่วนเดียวกันในเอกสาร
  • หากใช้ภายในตาราง TableStart และ TableEnd จะต้องอยู่ในแถวเดียวกันในตาราง
  • พื้นที่การผสานจดหมายสามารถซ้อนกันได้
  • พื้นที่การผสานจดหมายควรมีรูปแบบที่ถูกต้อง (มักจะมี TableStart และ TableEnd ที่ตรงกันคู่หนึ่งและมีชื่อตารางเดียวกัน)

ดูตัวอย่างการสาธิตแคตตาล็อกสินค้า นี่คือส่วนหนึ่งของพื้นที่ที่เตรียมไว้สำหรับการผสานจดหมาย:

การผสานจดหมาย

โปรดทราบว่าฟิลด์การทำเครื่องหมาย 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 }} 

คุณสามารถผสมฟิลด์เหล่านี้และวางไว้ภายในฟิลด์ Microsoft Word อื่นๆ ได้ เช่น ฟิลด์ IF หรือฟิลด์สูตร

บล็อคเงื่อนไข

คุณสามารถใช้การผสานจดหมายกับคำสั่ง IF ได้โดยใช้ Aspose.Words Cloud บล็อก 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 ในระหว่างการรวมจดหมาย

API ทั้ง executeMailMerge และ executeTemplate รองรับการแทรก 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";

				// อัปโหลดเอกสารต้นฉบับไปยัง Cloud Storage
				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 SDKs มีให้บริการใน 5 ภาษา ได้แก่ .NET, Java, Ruby, Python และ Node.js ดังนั้น คุณจึงสามารถเรียกใช้ Mail Merge API ในภาษาใดก็ได้เหล่านี้อย่างสะดวก

กระทู้แนะนำ: