اذهب إلى المحتوى

أتمتة حفظ أوراق ليبر أوفيس كالك بتنسيق PDF باستعمال الماكرو


Ola Abbas

سنشرح في هذا المقال كيفية التصدير أو الحفظ بتنسيق 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 كما يلي:

11_LibreOffice-CALC-Save-As-PDF-Macro-Sheet.png

تشغيل الماكرو

يمكنك رؤية محتوى الورقة 1 محفوظًا في المجلد المحدَّد المذكور في الماكرو السابق، حيث يوضّح الشكل التالي محتوى ملف pdf الذي أنشأناه باستخدام هذا الماكرو:

12_LibreOffice-Save-As-PDF-Macro.png

التصدير أو الحفظ بتنسيق PDF لمجال محدَّد من أوراق ليبر أوفيس كالك باستخدام الماكرو

يُعَد تصدير محتوى ورقة ليبر أوفيس إلى PDF ضروريًا بسبب الاستخدام الواسع لملفات PDF لتوزيعها ولإعداد التقارير وما إلى ذلك. أوضحنا سابقًا كيفية تصدير محتوى ورقة إلى ملف pdf، وسنوضّح الآن كيفية تصدير مجال معين (مثل A1: B2) إلى ملف pdf.

يجب أن يحتوي ملف pdf على لون وقيم مجال الخلايا من A1 إلى I3 الموضَّحة أدناه، ويجب أن يحتوي اسم ملف pdf على التاريخ الحالي واسم الورقة (أي "mySheet" في هذا المثال) وقيمة ثابتة من خلية (أي الخلية B5 في مثالنا).

13_Source-LO-Sheet.png

تفاصيل الماكرو

يحضّرهذا الماكرو أولًا اسم ملف 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 الذي أنشاناه مع محتويات مجال الأوراق:

14_PDF-File-Created-After-Run.png

ملف PDF المُنشَأ بعد التشغيل

15_Run-pdf-Contents.png

محتويات ملف 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.

اقرأ أيضًا


تفاعل الأعضاء

أفضل التعليقات

لا توجد أية تعليقات بعد



انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أضف تعليق

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • أضف...