الرئيسية
» مكتب MS
»
كيفية إنشاء دمج بريد تلقائي مع الصور في برنامج LibreOffice Writer
كيفية إنشاء دمج بريد تلقائي مع الصور في برنامج LibreOffice Writer
يمكنك إنشاء دمج مراسلات مثالي في LibreOffice Writer للأسماء والعناوين والتواريخ وغيرها من حقول النصوص، ثم تكتشف أنه بمجرد أن يحتاج كل مستلم إلى صورة أو توقيع أو صورة منتج أو رمز QR أو شارة مختلفة، يصبح سير العمل البسيط غير عملي. والسبب مهم: حقول دمج المراسلات الموثقة في Writer هي حقول قاعدة بيانات تُستخدم كعناصر نائبة للنصوص. يدعم LibreOffice أيضًا الرسومات المضمنة والمرتبطة، لكن دليل المساعدة الحالي لا يوثق "حقل صورة دمج المراسلات" الأصلي الذي يستبدل تلقائيًا صورة من عمود مسار الملف لكل سجل.
هذا يترك خيارين عمليين. إذا كانت جميع المستندات المدمجة تستخدم نفس الشعار أو صورة الخلفية، فاستخدم دمج المراسلات العادي في برنامج Writer وثبّت تلك الصورة في القالب. أما إذا كان لا بد من تغيير الصورة لكل صف، فالطريقة الأكثر تحكمًا هي الاحتفاظ ببيانات النص والصورة في برنامج Calc، وحجز كائن رسومي مُسمى في قالب Writer، وأتمتة عملية الدمج باستخدام ماكرو LibreOffice Basic. يستخدم هذا الدليل الطريقة الثانية.
تتوافق هذه التعليمات مع وثائق LibreOffice 26.2 المتوفرة في عام 2026. قد تختلف القوائم قليلاً في الإصدارات الأخرى أو على نظام macOS. يشير دليل LibreOffice Writer الحالي إلى إمكانية تضمين الصور أو ربطها، بينما تتيح واجهة برمجة تطبيقات UNO الوصول إلى كائنات رسومية في Writer، XTextGraphicObjectsSupplierكما تسمح بأتمتة تعيين صورة من عنوان URL خارجي. تُمكّن هذه الميزات من إنشاء سير عمل للصور لكل سجل على حدة، على الرغم من أن معالج دمج البريد القياسي لا يوفرها كحقل صورة مخصص.
اختر سير العمل المناسب قبل البدء
متطلبات
أفضل نهج
المقايضة الرئيسية
نفس الشعار أو الصورة على كل حرف
دمج البريد في برنامج Standard Writer
بسيط، لكن الصورة لا تتغير أبدًا بالتسجيل
صورة مختلفة لكل مستلم
قالب Writer + Calc + أتمتة Basic/UNO
يتطلب الأمر مزيدًا من الإعداد، لكن التحكم في الصورة يمكن التنبؤ به
تخزن قاعدة البيانات الصورة نفسها بدلاً من مسارها
سير عمل قاعدة البيانات/النموذج أو رمز UNO مخصص
أفضل لقواعد البيانات المُدارة، لكنها أثقل من عملية الدمج القائمة على جداول البيانات.
مئات أو آلاف الوثائق في مجموعات غير مراقبة
ماكرو أو نص برمجي خارجي للعبة أونو
يتطلب ذلك الاختبار والتسجيل والالتزام بمسارات الملفات
أنشئ ورقة عمل حسابية تحتوي على صف عناوين واحد وسجل واحد في كل صف. احتفظ بمراجع الصور في عمود منفصل. يُعدّ التنسيق التالي عمليًا CustomerID: FirstName، ، LastName، Email، ImagePath، و OutputName.
احتفظ بمسار صورة واحد واسم ملف إخراج واحد لكل صف حتى تتمكن الأتمتة من حل كل سجل دون تخمين.
استخدم المسارات المطلقة أثناء بناء واختبار عملية الدمج. صحيح أنها أقل قابلية للنقل، لكنها تزيل الغموض. على سبيل المثال، يسهل تشخيص المشكلة C:\MailMerge\Imageslice.jpgفي نظامي التشغيل ويندوز أو /home/user/mailmerge/images/alice.jpgلينكس مقارنةً بالمسارات النسبية التي يتغير دليلها الأساسي تبعًا لكيفية فتح المستند.
لا تخلط بين تنسيقات مسارات ويندوز ولينكس في ملف الإنتاج نفسه. تُظهر الأمثلة المختلطة في الرسم التوضيحي نوع القيمة التي يحتويها العمود فقط. يجب أن يستخدم مصدر بياناتك الحقيقي مسارات صالحة على الجهاز الذي يُجري عملية الدمج.
يمنع العمود الجيد OutputNameأيضًا تضارب أسماء الملفات. يُفضّل استخدام مُعرّف ثابت أو اسم مُنقّح بدلاً من عنوان بريد إلكتروني أو نص حرّ عشوائي. إذا ظهرت القيمة نفسها مرتين، فحدّد مُسبقًا ما إذا كان يجب على الماكرو استبدالها، أو إضافة لاحقة، أو إيقاف العملية.
الخطوة الثانية: التأكد من أن الكاتب يستطيع قراءة السجلات
يستخدم دمج المراسلات القياسي في برنامج Writer مصدر بيانات مُسجّل. يمكنك استخدام معالج دمج المراسلات، أو مصدر بيانات العناوين، أو مستعرض مصادر البيانات. تُتيح وثائق المساعدة الحالية لبرنامج LibreOffice، والموجودة في قسم الأدوات > معالج دمج المراسلات ، إمكانية إدراج حقول قاعدة البيانات من خلال إدراج > حقل > المزيد من الحقول > قاعدة البيانات . راجع مرجع حقول قاعدة البيانات الرسمي .
استخدم عرض مصدر البيانات الخاص بـ Writer للتحقق من أن الأعمدة والسجلات المتوقعة مرئية قبل إضافة أتمتة الصور.
يُعد هذا الفحص مفيدًا حتى لو كان الماكرو النهائي يقرأ جدول البيانات مباشرةً. فهو يكشف المشاكل الشائعة مبكرًا: مثل ورقة العمل الخاطئة، أو أسماء العناوين غير المتوقعة، أو السجلات الفارغة، أو جدول البيانات الذي تم نقله بعد التسجيل.
لإجراء دمج مراسلات نصية عادية، يمكنك سحب عنوان عمود إلى المستند أو إدراج حقل دمج مراسلات من علامة تبويب قاعدة البيانات. يؤكد دليل Writer الرسمي أن هذه الحقول تُستبدل بمحتوى قاعدة البيانات عند تشغيل عملية الدمج. أما بالنسبة للصورة المتغيرة، فلا تفترض أن سحبها ImagePathإلى الصفحة سيحول المسار إلى صورة. ستبقى بيانات ما لم يقم البرنامج بتفسيرها وتحديث كائن رسومي.
الخطوة 3: أنشئ قالب الكاتب وقم بتسمية العنصر النائب للصورة
أنشئ تخطيط الرسالة أو الشهادة أو الشارة أو التقرير في برنامج Writer. بالنسبة للقيم النصية، استخدم إما حقول دمج البريد العادية أو استخدم رموزًا مميزة مثل {FirstName}و {LastName}و {CustomerID}إذا كان الماكرو الخاص بك سيستبدلها تلقائيًا.
بعد ذلك، أدرج صورة نموذجية في المكان الذي يجب أن تظهر فيه الصورة المتغيرة. حدد الحجم المطلوب، والتفاف الصورة، ونقطة التثبيت قبل أتمتة العملية. يوثق LibreOffice تغيير حجم الصورة، وتحديد موضعها، وتثبيتها، والتفافها، وسلوك الصور المرتبطة في فصل "الصور والرسومات" الحالي من برنامج Writer 26.2 .
احجز موضع الصورة النهائي في القالب وأعطِ الكائن الرسومي اسمًا ثابتًا مثل MergeImage.
أعطِ الكائن الرسومي اسمًا ثابتًا، مثل MergeImage. قد يختلف مربع حوار الخصائص باختلاف الإصدار، لذا إذا لم تكن متأكدًا من الكائن الذي يعرضه برنامج Writer، فاستخدم أدوات > أدوات التطوير . تستطيع أدوات التطوير في LibreOffice فحص الكائنات الرسومية وخصائصها وأساليبها وواجهاتها في المستند الحالي. وهذا يجعلها أداة تشخيصية أكثر أمانًا من تخمين اسم الكائن الداخلي.
للحصول على تصميم متناسق، استخدم نفس نسبة العرض إلى الارتفاع لجميع الصور المصدرية، أو حدد طريقة قصها. يمكن لبرنامج Writer تغيير حجم الصورة لتناسب أبعاد العنصر النائب، ولكن صورة عمودية مُدرجة في إطار عريض على شكل لافتة ستبدو غير صحيحة ما لم تُعدّل تنسيق الملفات أولاً.
الخطوة الرابعة: أتمتة تصدير الصور والمستندات المتغيرة
عملية الأتمتة الرئيسية بسيطة: افتح القالب، استبدل النصوص، ابحث عن الكائن الرسومي المطلوب، حمّل ملف صورة الصف في هذا الكائن، ثم صدّر النتيجة. توفر وثائق واجهة برمجة تطبيقات UNO الخاصة بـ LibreOffice معلومات getGraphicObjects()حول الوصول إلى الرسومات المضمنة والمرتبطة، بالإضافة إلى TextGraphicObjectخدمة خصائص الرسومات. GraphicURLتم إيقاف استخدام هذه الخاصية لتخزين الكائنات بشكل عام Graphic، ولكن واجهة برمجة التطبيقات الحالية تشير بوضوح إلى أن تعيين عنوان URL خارجي يُحمّل تلك الصورة في الكائن الرسومي. هذا يُسهّل استخدام ماكرو Basic بسيط يعتمد على مسارات الملفات المحلية.
طبقة الأتمتة هي التي تحول قيمة ImagePath إلى الرسم الفعلي المعروض في كل مستند تم إنشاؤه.
المثال التالي صغير الحجم عمدًا. غيّر المسارات الثلاثة، واسم الورقة، وفهرس الأعمدة، وأسماء العناصر النائبة لتتوافق مع ملفاتك. اختبره على سجلين قبل تشغيل مجموعة كبيرة.
Sub MailMergeWithImages()
Dim calcDoc As Object, sheet As Object, doc As Object
Dim graphics As Object, imageObj As Object
Dim row As Long
Dim firstName As String, lastName As String
Dim imagePath As String, outputName As String
Dim sourceURL As String, templateURL As String, outputDir As String
sourceURL = ConvertToURL("C:\MailMerge\customers.ods")
templateURL = ConvertToURL("C:\MailMerge\LetterTemplate.odt")
outputDir = ConvertToURL("C:\MailMerge\Output")
calcDoc = StarDesktop.loadComponentFromURL(sourceURL, "_blank", 0, Array())
sheet = calcDoc.Sheets.getByName("Sheet1")
row = 1 ' row 0 contains headers
Do While sheet.getCellByPosition(0, row).String <> ""
firstName = sheet.getCellByPosition(1, row).String
lastName = sheet.getCellByPosition(2, row).String
imagePath = sheet.getCellByPosition(4, row).String
outputName = sheet.getCellByPosition(5, row).String
doc = StarDesktop.loadComponentFromURL(templateURL, "_blank", 0, Array())
ReplaceAll doc, "{FirstName}", firstName
ReplaceAll doc, "{LastName}", lastName
graphics = doc.getGraphicObjects()
If graphics.hasByName("MergeImage") Then
imageObj = graphics.getByName("MergeImage")
imageObj.GraphicURL = ConvertToURL(imagePath)
Else
MsgBox "Graphic object MergeImage was not found."
doc.close(True)
Exit Sub
End If
Dim args(1) As New com.sun.star.beans.PropertyValue
args(0).Name = "FilterName"
args(0).Value = "writer_pdf_Export"
args(1).Name = "Overwrite"
args(1).Value = True
doc.storeToURL(outputDir & outputName & ".pdf", args())
doc.close(True)
row = row + 1
Loop
calcDoc.close(True)
End Sub
Sub ReplaceAll(doc As Object, findText As String, replacement As String)
Dim d As Object
d = doc.createReplaceDescriptor()
d.SearchString = findText
d.ReplaceString = replacement
doc.replaceAll(d)
End Sub
هذا الماكرو عبارة عن نمط، وليس برنامجًا جاهزًا للاستخدام. قد تختلف سياسات أمان الماكرو وقواعد مسار نظام التشغيل وتخطيطات القوالب في إصدارات LibreOffice. من أهم مفاهيم واجهة برمجة التطبيقات (API) التي تم التحقق منها أن Writer يعرض مجموعة كائنات الرسومات الخاصة به، وأن LibreOffice يستطيع تعيين رسم من عنوان URL خارجي. بالنسبة لعمليات النشر واسعة النطاق، يُنصح بتحميل الرسم من خلال Graphicواجهة برمجة التطبيقات الحديثة بدلاً من الاعتماد على سلوك التوافق GraphicURL. المراجع الرسمية هي XTextGraphicObjectsSupplier و TextGraphicObject .
الخطوة 5: قم بتشغيل دفعة صغيرة وتحقق من النتيجة
قبل معالجة مصدر البيانات بالكامل، قم بتشغيل صفين أو ثلاثة صفوف مختلفة عمدًا: صف واحد بصيغة JPG، وصف واحد بصيغة PNG، ويفضل صورة واحدة بنسبة عرض إلى ارتفاع مختلفة. تأكد من كل ما يلي قبل تكبير الصورة:
اسم المستلم في المستند يطابق الصورة من نفس صف جدول البيانات.
لا يظهر مسار الصورة كنص حرفي في المستند النهائي.
اسم ملف الإخراج يطابق السجل المقصود ولا يقوم بالكتابة فوق سجل مستلم آخر.
تتناسب الصورة مع المساحة المحجوزة دون دفع النص إلى صفحة جديدة أو تغطية عنصر آخر.
يفتح ملف PDF أو ODT المُنشأ بشكل مستقل بعد إغلاق LibreOffice و Calc.
يُعدّ هذا الفحص الأخير مهمًا لأنّ الرسومات المرتبطة والرسومات المضمنة تتصرفان بشكل مختلف. يشرح دليل Writer الحالي أنّ الصورة المرتبطة تبقى مرجعًا منفصلاً للملف، بينما تُصبح الصورة المضمنة جزءًا من المستند. إذا كنت تُرسل ملفات ODT إلى جهاز آخر، فتأكد من أنّ النتيجة لا تعتمد على مسار محلي موجود فقط على الجهاز الذي أجرى عملية الدمج.
الأعطال الشائعة وأسرع الحلول
يُظهر الناتج مسار الملف بدلاً من الصورة
لقد أدرجتَ ImagePathحقل دمج بريد عاديًا، ومن المتوقع أن ينتج عن ذلك نص. احتفظ بالمسار في مصدر البيانات، ولكن دع الماكرو يُحمّله في الكائن الرسومي المُسمى.
كل سجل يحصل على نفس الصورة
لم يتم تغيير صورة القالب بين السجلات، أو أن حلقة التكرار تقرأ خلية ثابتة. سجّل رقم الصف ImagePathأثناء اختبار سجلين. إذا تغير المسار ولكن الصورة لم تتغير، فافحص اسم الكائن الرسومي باستخدام أدوات المطور.
يُشير الماكرو إلى أن برنامج MergeImage غير موجود.
تمت إعادة تسمية الرسم، أو استبداله، أو أنه غير معروض بالاسم الذي تتوقعه. حدد الصورة وافحصها باستخدام الأدوات > أدوات التطوير . تعرض واجهة برمجة تطبيقات UNO كائنات الرسومات بالاسم، لذا يجب أن يتطابق الماكرو والقالب تمامًا.
تختفي الصور على جهاز كمبيوتر آخر
ربما قمت بحفظ مستند لا يزال يحتوي على إشارات إلى ملفات خارجية. إذا كانت قابلية النقل مهمة، فتأكد من تضمين الصورة في الملف المُخرَج، أو قم بتصديره إلى PDF بعد تحميل الصورة. يشرح دليل الصور في LibreOffice الفرق بين الرسومات المرتبطة والرسومات المُضمَّنة، وكيفية كسر الروابط لتضمين الملفات.
يؤدي دمج البريد بتنسيق HTML إلى فقدان الصور
هذا قيد موثق يُنصح بالتحقق منه قبل اختيار طريقة إرسال البريد الإلكتروني. تشير تعليمات LibreOffice إلى أنه عند استخدام تنسيق HTML للرسالة النموذجية، لا تُرسل الصور المضمنة أو المرتبطة مع البريد الإلكتروني. إذا كانت الصورة ضرورية، فاستخدم مرفق PDF أو جرّب طريقة إرسال أخرى بدلاً من افتراض أن دمج البريد بتنسيق HTML سيحفظها. راجع قسم " إنشاء رسالة نموذجية" .
متى يُنصح باستخدام خدمة دمج البريد UNO من LibreOffice بدلاً من ذلك؟
إذا كانت حقول النصوص لديك تستخدم بالفعل دمج المراسلات الأصلي لقاعدة بيانات Writer، وتحتاج إلى تحكم برمجي في المخرجات، فإن LibreOffice يوفر MailMergeخدمةً لذلك. تتضمن خصائصها الموثقة ما يلي DataSourceName: Commandو و DocumentURLو OutputURLو FileNameFromColumnو و SaveAsSingleFile. تُعد واجهة برمجة التطبيقات هذه مفيدةً عندما ترغب في أتمتة دمج المراسلات القياسي من خلال التعليمات البرمجية. مع ذلك، لا توثق هذه الواجهة حقل مسار ملف الصورة لكل سجل، لذا قد تحتاج إلى دمج تنفيذ دمج المراسلات مع معالجة الكائنات الرسومية. راجع مرجع خدمة دمج المراسلات الرسمي .
قائمة التحقق النهائية
استخدم دمج البريد العادي في برنامج Writer عندما تكون الصورة ثابتة لكل مستلم.
استخدم ImagePathعمودًا واحدًا نظيفًا عندما تختلف الصورة باختلاف السجل.
قم بتسمية العنصر النقطي للرسم البياني الخاص بالكاتب وحافظ على ثبات أبعاده.
قم بحل مسار الصورة في عملية التشغيل الآلي؛ لا تتوقع أن يصبح حقل دمج النص صورة تلقائيًا.
اختبر سجلين أو ثلاثة قبل تشغيل دفعة كاملة.
افتح الملفات المصدرة بعد إغلاق المستندات المصدرية للتأكد من أن المخرجات مكتفية ذاتيًا.
بالنسبة لمعظم المشاريع الصغيرة والمتوسطة، توفر ورقة عمل Calc مع قالب Writer ووحدة ماكرو Basic قصيرة أفضل توازن بين الشفافية والتحكم. يتطلب الأمر إعدادًا أكثر تعقيدًا من دمج البريد النصي العادي، ولكن يمكنك معرفة الصف الذي يحتوي على كل صورة بدقة، واختيار اسم ملف الإخراج، والتحقق من النتيجة قبل إرسال مئات الملفات المُخصصة.