سنشرح في هذا المقال كيفية التصدير أو الحفظ بتنسيق PDF سواءً لكامل الملف أو لمجال محدَّد من أوراق ليبر أوفيس كالك باستخدام الماكرو.
هذا المقال جزء من سلسلة مقالات حول إنشاء ماكرو في ليبر أوفيس كالك، فهرس السلسلة:
- مدخل إلى كتابة ماكرو Macro في ليبر أوفيس كالك LibreOffice Calc
- معالجة محتويات خلايا ليبر أوفيس كالك باستخدام الماكرو
- معالجة مجال من الخلايا باستخدام الماكرو في ليبر أوفيس كالك
- استخدام عناصر التحكم بالنماذج ونافذة فتح الملفات من خلال الماكرو في ليبر أوفيس
- التعامل مع عناصر التحكم بمربع الحوار ومعالجة النماذج باستخدام الماكرو في ليبر أوفيس كالك
- أتمتة حفظ أوراق ليبر أوفيس كالك بتنسيق PDF باستعمال الماكرو
التصدير أو الحفظ بتنسيق PDF في أوراق ليبر أوفيس كالك باستخدام الماكرو
سنوضح فيما يلي كيفية حفظ ورقة ليبر أوفيس كالك LibreOffice Calc مباشرة كملف pdf باستخدام الماكرو، إذ تُستخدَم هذه الميزة البسيطة في العديد من مهام الأتمتة.
كتابة الماكرو
لنطلق على الدالة التي ستجري هذه العملية الاسم exportToPDF()
. عرّف أولًا كائنين يحتفظ أحدهما بمستند كالك ويُستخدَم الكائن الآخر لتنفيذ الإجراءات.
dim document as object dim dispatcher as object document = ThisComponent.CurrentController.Frame dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
أنشئ ملفًا فارغًا باستخدام الدالة Open
. لاحظ أن المسار هو مسار نظام الملفات، بسبب وجود البادئة file://
، ثم أغلق الملف بعد إنشائه.
path ="file:///home/arindam/sheet1.pdf" Open path For Append As #1 Close #1
أنشئ الآن مصفوفة بالحجم 1 للاحتفاظ بقيمة خاصية التصدير بتنسيق pdf، ثم املأ هذه الخاصية بمصفوفة الاسم "URL" مع مسار الملف الذي أنشأناه للتو.
dim args1(0) as new com.sun.star.beans.PropertyValue args1(0).Name = "URL" args1(0).Value = "file:///home/arindam/sheet1.pdf"
أخيرًا، استدعِ التابع executeDispatch
لوضع محتوى الورقة 1 في ملف pdf واحفظه.
dispatcher.executeDispatch(document, ".uno:ExportDirectToPDF", "", 0, args1())
الدالة الكاملة موضَّحة أدناه:
Sub ExportToPDF() dim document as object dim dispatcher as object document = ThisComponent.CurrentController.Frame dispatcher = createUnoService("com.sun.star.frame.DispatchHelper") ' غيّر المسار حسب احتياجاتك path ="file:///home/arindam/sheet1.pdf" Open path For Append As #1 Close #1 dim args1(0) as new com.sun.star.beans.PropertyValue args1(0).Name = "URL" args1(0).Value = "file:///home/arindam/sheet1.pdf" ' غيّر المسار حسب احتياجاتك dispatcher.executeDispatch(document, ".uno:ExportDirectToPDF", "", 0, args1()) End Sub
تشغيل دالة الحفظ بتنسيق pdf
افتح ليبر أوفيس كالك وأنشئ ماكرو وضَع فيه الدالة السابقة، ثم اكتب أي شيء في الورقة 1 كما يلي:
تشغيل الماكرو
يمكنك رؤية محتوى الورقة 1 محفوظًا في المجلد المحدَّد المذكور في الماكرو السابق، حيث يوضّح الشكل التالي محتوى ملف pdf الذي أنشأناه باستخدام هذا الماكرو:
التصدير أو الحفظ بتنسيق PDF لمجال محدَّد من أوراق ليبر أوفيس كالك باستخدام الماكرو
يُعَد تصدير محتوى ورقة ليبر أوفيس إلى PDF ضروريًا بسبب الاستخدام الواسع لملفات PDF لتوزيعها ولإعداد التقارير وما إلى ذلك. أوضحنا سابقًا كيفية تصدير محتوى ورقة إلى ملف pdf، وسنوضّح الآن كيفية تصدير مجال معين (مثل A1: B2) إلى ملف pdf.
يجب أن يحتوي ملف pdf على لون وقيم مجال الخلايا من A1 إلى I3 الموضَّحة أدناه، ويجب أن يحتوي اسم ملف pdf على التاريخ الحالي واسم الورقة (أي "mySheet" في هذا المثال) وقيمة ثابتة من خلية (أي الخلية B5 في مثالنا).
تفاصيل الماكرو
يحضّرهذا الماكرو أولًا اسم ملف pdf ديناميكيًا بناءً على قيمة معينة كما هو موضّح أدناه، حيث يتكون اسم ملف pdf من اسم الورقة وقيمة من الخلية B5 والتاريخ.
dim fileName fileName = ThisComponent.Sheets(0).Name & _ "_ratie_" & ThisComponent.Sheets(0).getCellRangebyName("B5").String & _ "_" & Replace(Date,"/","-") & ".pdf"
إذا أردت الحصول على اسم الورقة النشطة أو تحديد اسم ورقة كالك الحالية، فاستخدم ما يلي:
fileName = ThisComponent.getCurrentController.getActiveSheet.Name & _
أنشئ كائن Frame
والكائن المرسِل dispatcher إلى الخدمة com.sun.star.frame.DispatchHelper
التي تساعد في تصدير ملف pdf عبر الدالة.
أنشئ ملفًا فارغًا في أيّ مسار ثم أغلق الملف.
' غيّر المسار حسب احتياجاتك path ="file:///home/arindam/" & fileName Open path For Append As #1 Close #1
يجب الآن وضع المحتوى ضمن ملف pdf، حيث سنحتاج إلى استخدام المرشّحات Filters
التي هي أزواج الأنواع والقيم التي يمكن وضعها في مصفوفة ويمكن تمريرها إلى الدالة executeDispatch
كوسيط. الأنواع مُعرَّفة مسبقًا وستُعالَج عند تمريرها، حيث يجب تمرير اسم الملف ومجال الأوراق التي تريد طباعتها فقط في ملف pdf، إذ سنستخدم في مثالنا الخاصية FilterData
المبنية مسبقًا.
document = ThisComponent.CurrentController.Frame dispatcher = createUnoService("com.sun.star.frame.DispatchHelper") oSheet = ThisComponent.CurrentController.getActiveSheet() oCellRange = oSheet.getCellRangeByName("A1:I3") dim aFilterData(0) as new com.sun.star.beans.PropertyValue aFilterData(0).Name = "Selection" aFilterData(0).Value = oCellRange dim args1(1) as new com.sun.star.beans.PropertyValue args1(0).Name = "URL" args1(0).Value = "file:///home/arindam/" & fileName ' غيّر المسار حسب احتياجاتك args1(1).Name = "FilterData" args1(1).Value = aFilterData()
مرّر الآن هذا الوسيط إلى الدالة executeDispatch
كوسيط لها كما يلي:
dispatcher.executeDispatch(document, ".uno:ExportDirectToPDF", "", 0, args1())
تشغيل الماكرو
إليك ملف pdf الذي أنشاناه مع محتويات مجال الأوراق:
ملف PDF المُنشَأ بعد التشغيل
محتويات ملف pdf
شيفرة الماكرو الكاملة
Sub ExportRangeToPDF() dim document as object dim dispatcher as object dim fileName fileName = ThisComponent.Sheets(0).Name & _ "_ratie_" & ThisComponent.Sheets(0).getCellRangebyName("B5").String & _ "_" & Replace(Date,"/","-") & ".pdf" document = ThisComponent.CurrentController.Frame dispatcher = createUnoService("com.sun.star.frame.DispatchHelper") oSheet = ThisComponent.CurrentController.getActiveSheet() oCellRange = oSheet.getCellRangeByName("A1:I3") dim aFilterData(0) as new com.sun.star.beans.PropertyValue aFilterData(0).Name = "Selection" aFilterData(0).Value = oCellRange ' غيّر المسار حسب احتياجاتك path ="file:///home/arindam/" & fileName Open path For Append As #1 Close #1 dim args1(1) as new com.sun.star.beans.PropertyValue args1(0).Name = "URL" args1(0).Value = "file:///home/arindam/" & fileName ' غيّر المسار حسب احتياجاتك args1(1).Name = "FilterData" args1(1).Value = aFilterData() dispatcher.executeDispatch(document, ".uno:ExportDirectToPDF", "", 0, args1()) End Sub
ترجمة -وبتصرُّف- للمقالان Export or Save As PDF in LibreOffice Calc Sheets using Macro و Export or Save As PDF A Specific Range in LibreOffice Calc Sheets using Macro لصاحبها Arindam.
أفضل التعليقات
لا توجد أية تعليقات بعد
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.