أنواع Mail Merge عملية
الفكرة الرئيسية لـ Mail Merge هي إنشاء مستند أو مستندات متعددة تلقائيا بناء على القالب والبيانات التي تم جلبها من مصدر البيانات الخاص بك. Aspose.Words يسمح لك بإجراء نوعين مختلفين من Mail Merge العمليات: بسيطة Mail Merge و Mail Merge مع المناطق.
المثال الأكثر شيوعا لاستخدام بسيط Mail Merge هو عندما تريد إرسال مستند لعملاء مختلفين من خلال تضمين أسمائهم في بداية المستند. للقيام بذلك، تحتاج إلى إنشاء حقول دمج مثل First Name و Last Name في القالب الخاص بك، ثم تعبئتها بالبيانات من مصدر البيانات الخاص بك. في حين أن المثال الأكثر شيوعا لاستخدام Mail Merge مع المناطق هو عندما تريد إرسال مستند يتضمن أوامر محددة مع قائمة بجميع العناصر داخل كل طلب. للقيام بذلك، ستحتاج إلى إنشاء مناطق دمج داخل منطقة القالب الخاصة بك لكل طلب، من أجل ملئه بجميع البيانات المطلوبة للعناصر.
يتمثل الاختلاف الرئيسي بين عمليتي الدمج في أن Mail Merge البسيط (بدون مناطق) يكرر المستند بأكمله لكل سجل مصدر بيانات، بينما Mail Merge مع المناطق يكرر المناطق المعينة فقط لكل سجل. يمكنك التفكير في عملية Mail Merge بسيطة كحالة معينة من الدمج مع المناطق التي تكون فيها المنطقة الوحيدة هي المستند بأكمله.
عملية بسيطة Mail Merge
يتم استخدام Mail Merge بسيط لملء الحقول Mail Merge داخل القالب الخاص بك بالبيانات المطلوبة من مصدر البيانات الخاص بك (تمثيل جدول واحد). لذلك فهو مشابه للكلاسيكية Mail Merge في Microsoft Word.
يمكنك إضافة حقل دمج واحد أو أكثر في القالب الخاص بك ثم تنفيذ عملية Mail Merge البسيطة. يوصى باستخدامه إذا كان القالب الخاص بك لا يحتوي على أي مناطق دمج.
القيد الرئيسي لاستخدام هذا النوع هو أن محتوى المستند بأكمله سيتكرر لكل سجل في مصدر البيانات.
كيفية تنفيذ عملية Mail Merge بسيطة
بمجرد أن يصبح القالب جاهزا، يمكنك البدء في تنفيذ العملية البسيطة Mail Merge. Aspose.Words يسمح لك بتنفيذ عملية Mail Merge بسيطة باستخدام Execute methods مختلفة تقبل كائنات البيانات المختلفة كمصدر للبيانات.
يوضح مثال التعليمات البرمجية التالي كيفية تنفيذ عملية Mail Merge بسيطة باستخدام إحدى طرق Execute:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET.git. | |
// Include the code for our template. | |
Document doc = new Document(); | |
DocumentBuilder builder = new DocumentBuilder(doc); | |
// Create Merge Fields. | |
builder.InsertField(" MERGEFIELD CustomerName "); | |
builder.InsertParagraph(); | |
builder.InsertField(" MERGEFIELD Item "); | |
builder.InsertParagraph(); | |
builder.InsertField(" MERGEFIELD Quantity "); | |
// Fill the fields in the document with user data. | |
doc.MailMerge.Execute(new string[] { "CustomerName", "Item", "Quantity" }, | |
new object[] { "John Doe", "Hawaiian", "2" }); | |
doc.Save(ArtifactsDir + "BaseOperations.SimpleMailMerge.docx"); |
يمكنك ملاحظة الفرق بين المستند قبل تنفيذ بسيط mail merge:

وبعد تنفيذ بسيط mail merge:

كيفية إنشاء مستندات مدمجة متعددة
في Aspose.Words، تملأ العملية القياسية Mail Merge مستندا واحدا فقط بمحتوى من مصدر البيانات الخاص بك. لذلك، ستحتاج إلى تنفيذ عملية Mail Merge عدة مرات لإنشاء مستندات مدمجة متعددة كإخراج.
يوضح مثال التعليمات البرمجية التالية كيفية إنشاء مستندات مدمجة متعددة أثناء عملية Mail Merge:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET.git. | |
string connString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + DatabaseDir + "Northwind.accdb"; | |
Document doc = new Document(MyDir + "Mail merge destination - Northwind suppliers.docx"); | |
OleDbConnection conn = new OleDbConnection(connString); | |
conn.Open(); | |
OleDbCommand cmd = new OleDbCommand("SELECT * FROM Customers", conn); | |
OleDbDataAdapter da = new OleDbDataAdapter(cmd); | |
DataTable data = new DataTable(); | |
da.Fill(data); | |
// Perform a loop through each DataRow to iterate through the DataTable. Clone the template document | |
// instead of loading it from disk for better speed performance before the mail merge operation. | |
// You can load the template document from a file or stream but it is faster to load the document | |
// only once and then clone it in memory before each mail merge operation. | |
int counter = 1; | |
foreach (DataRow row in data.Rows) | |
{ | |
Document dstDoc = (Document) doc.Clone(true); | |
dstDoc.MailMerge.Execute(row); | |
dstDoc.Save(string.Format(ArtifactsDir + "BaseOperations.ProduceMultipleDocuments_{0}.docx", counter++)); | |
} |
Mail Merge مع المناطق
يمكنك إنشاء مناطق مختلفة في القالب الخاص بك للحصول على مناطق خاصة يمكنك ببساطة ملؤها ببياناتك. استخدام Mail Merge مع المناطق إذا كنت ترغب في إدراج الجداول والصفوف مع تكرار البيانات لجعل المستندات الخاصة بك تنمو بشكل حيوي عن طريق تحديد تلك المناطق داخل القالب.
يمكنك إنشاء مناطق متداخلة (فرعية) بالإضافة إلى مناطق دمج. الميزة الرئيسية لاستخدام هذا النوع هي زيادة الأجزاء داخل المستند ديناميكيا. اطلع على مزيد من التفاصيل في المقالة التالية “متداخلة Mail Merge مع المناطق”.
كيفية تنفيذ Mail Merge مع المناطق
المنطقة Mail Merge هي جزء محدد داخل مستند يحتوي على نقطة بداية ونقطة نهاية. يتم تمثيل كلتا النقطتين كحقول Mail Merge لها أسماء محددة “TableStart:XXX” و “TableEnd:XXX”. سيتم تكرار جميع المحتويات المضمنة في منطقة Mail Merge تلقائيا لكل سجل في مصدر البيانات.
Aspose.Words يسمح لك بتنفيذ Mail Merge مع مناطق تستخدم Execute methods مختلفة تقبل كائنات بيانات مختلفة كمصدر للبيانات.
كخطوة أولى، نحتاج إلى إنشاء DataSet
لتمريرها لاحقا كمعلمة إدخال إلى طريقة ExecuteWithRegions
:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET.git. | |
private DataSet CreateDataSet() | |
{ | |
// Create the customers table. | |
DataTable tableCustomers = new DataTable("Customers"); | |
tableCustomers.Columns.Add("CustomerID"); | |
tableCustomers.Columns.Add("CustomerName"); | |
tableCustomers.Rows.Add(new object[] { 1, "John Doe" }); | |
tableCustomers.Rows.Add(new object[] { 2, "Jane Doe" }); | |
// Create the orders table. | |
DataTable tableOrders = new DataTable("Orders"); | |
tableOrders.Columns.Add("CustomerID"); | |
tableOrders.Columns.Add("ItemName"); | |
tableOrders.Columns.Add("Quantity"); | |
tableOrders.Rows.Add(new object[] { 1, "Hawaiian", 2 }); | |
tableOrders.Rows.Add(new object[] { 2, "Pepperoni", 1 }); | |
tableOrders.Rows.Add(new object[] { 2, "Chicago", 1 }); | |
// Add both tables to a data set. | |
DataSet dataSet = new DataSet(); | |
dataSet.Tables.Add(tableCustomers); | |
dataSet.Tables.Add(tableOrders); | |
// The "CustomerID" column, also the primary key of the customers table is the foreign key for the Orders table. | |
dataSet.Relations.Add(tableCustomers.Columns["CustomerID"], tableOrders.Columns["CustomerID"]); | |
return dataSet; | |
} |
يوضح مثال التعليمات البرمجية التالية كيفية تنفيذ Mail Merge مع المناطق باستخدام طريقة ExecuteWithRegions(DataSet):
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET.git. | |
Document doc = new Document(); | |
DocumentBuilder builder = new DocumentBuilder(doc); | |
// The start point of mail merge with regions the dataset. | |
builder.InsertField(" MERGEFIELD TableStart:Customers"); | |
// Data from rows of the "CustomerName" column of the "Customers" table will go in this MERGEFIELD. | |
builder.Write("Orders for "); | |
builder.InsertField(" MERGEFIELD CustomerName"); | |
builder.Write(":"); | |
// Create column headers. | |
builder.StartTable(); | |
builder.InsertCell(); | |
builder.Write("Item"); | |
builder.InsertCell(); | |
builder.Write("Quantity"); | |
builder.EndRow(); | |
// We have a second data table called "Orders", which has a many-to-one relationship with "Customers" | |
// picking up rows with the same CustomerID value. | |
builder.InsertCell(); | |
builder.InsertField(" MERGEFIELD TableStart:Orders"); | |
builder.InsertField(" MERGEFIELD ItemName"); | |
builder.InsertCell(); | |
builder.InsertField(" MERGEFIELD Quantity"); | |
builder.InsertField(" MERGEFIELD TableEnd:Orders"); | |
builder.EndTable(); | |
// The end point of mail merge with regions. | |
builder.InsertField(" MERGEFIELD TableEnd:Customers"); | |
// Pass our dataset to perform mail merge with regions. | |
DataSet customersAndOrders = CreateDataSet(); | |
doc.MailMerge.ExecuteWithRegions(customersAndOrders); | |
doc.Save(ArtifactsDir + "BaseOperations.MailMergeWithRegions.docx"); |
يمكنك ملاحظة الفرق بين المستند قبل تنفيذ Mail Merge مع المناطق:

وبعد تنفيذ Mail Merge مع المناطق:

حدود Mail Merge مع المناطق
هناك بعض النقاط المهمة التي تحتاج إلى أخذها في الاعتبار عند إجراء Mail Merge مع المناطق:
- يجب أن تكون نقطة البداية TableStart:Orders ونقطة النهاية TableEnd:Orders في نفس الصف أو الخلية. على سبيل المثال، إذا بدأت منطقة دمج في خلية جدول، فيجب إنهاء منطقة الدمج في نفس الصف مثل الخلية الأولى.
- يجب أن يتطابق اسم حقل الدمج مع اسم العمود في DataTable. ما لم تكن قد حددت الحقول المعينة، فلن ينجح Mail Merge مع المناطق لأي حقل دمج له اسم مختلف عن اسم العمود.
إذا تم كسر إحدى هذه القواعد، فستحصل على نتائج غير متوقعة أو قد يتم طرح استثناء.