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 และเนื้อหาเอกสารทั้งหมดจะทำซ้ำสำหรับแต่ละระเบียนในแหล่งข้อมูล การใช้ขอบเขตการผสานจดหมายที่ทำซ้ำได้ทำให้คุณสามารถกำหนดส่วนต่างๆ ภายในเอกสารที่จะทำซ้ำสำหรับแต่ละระเบียนในแหล่งข้อมูลได้ ตัวอย่างเช่น หากคุณทำเครื่องหมายแถวของตารางเป็นขอบเขตการผสาน แถวของตารางนี้จะถูกทำซ้ำ ทำให้ตารางขยายขึ้นแบบไดนามิกเพื่อรองรับข้อมูลทั้งหมดของคุณ
เตรียมเอกสาร
ก่อนที่คุณจะดำเนินการผสานจดหมาย คุณต้องเตรียมเทมเพลตเอกสาร คุณควรแทรกฟิลด์ผสานที่จะถูกแทนที่ด้วยค่าจากแหล่งข้อมูลของคุณ
การแทรกเขตข้อมูลผสานลงในเอกสาร
การแทรกเขตข้อมูลผสานลงในเอกสาร:
- เปิดเอกสารของคุณใน Microsoft Word
- ในเอกสาร คลิกตำแหน่งที่คุณต้องการวางเขตข้อมูลผสาน
- เปิดเมนูแทรกและเลือกฟิลด์เพื่อเปิดกล่องโต้ตอบฟิลด์
- จากรายการชื่อเขตข้อมูล ให้เลือกผสานเขตข้อมูล
- ในกล่องข้อความชื่อเขตข้อมูล ให้ป้อนชื่อสำหรับเขตข้อมูลผสานและกดตกลง
เนื่องจากฟิลด์ผสานเป็นฟิลด์ 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 ในภาษาใดก็ได้เหล่านี้อย่างสะดวก