سنستخدم عناصر تحكم بالنماذج Controls -مثل الأزرار ومربعات النصوص- ونافذة فتح الملفات ضمن جدول بيانات ليبر أوفيس كالك LibreOffice Calc، وسنسند لها ماكرو، حيث سنعطي أمثلة بسيطة توضّح الأساسيات ولكن يمكنك تطويرها لتشمل احتياجاتك المختلفة.
هذا المقال جزء من سلسلة مقالات حول إنشاء ماكرو في ليبر أوفيس كالك، فهرس السلسلة:
- مدخل إلى كتابة ماكرو Macro في ليبر أوفيس كالك LibreOffice Calc
- معالجة محتويات خلايا ليبر أوفيس كالك باستخدام الماكرو
- معالجة مجال من الخلايا باستخدام الماكرو في ليبر أوفيس كالك
- استخدام عناصر التحكم بالنماذج ونافذة فتح الملفات من خلال الماكرو في ليبر أوفيس
- التعامل مع عناصر التحكم بمربع الحوار ومعالجة النماذج باستخدام الماكرو في ليبر أوفيس كالك
- أتمتة حفظ أوراق ليبر أوفيس كالك بتنسيق PDF باستعمال الماكرو
إضافة زر إلى جدول بيانات كالك
انتقل إلى قائمة عرض View ثم أشرطة الأدوات Toolbars ثم عناصر التحكم بالنموذج Form Controls، حيث يتكون عنصر التحكم بالنموذج من عناصر تحكم متعددة وزر تبديل لوضع التصميم وغير ذلك.
سنضيف الآن زرًا إلى جدول بيانات كالك باستخدام عنصر تحكم الزر. لنكتب برنامجًا بسيطًا بلغة بيسك Basic قبل أن نسند أيّ ماكرو له، حيث سيُنفَّذ هذا البرنامج البسيط عند الضغط على الزر.
إليك البرنامج المُنفَّذ عند النقر على الزر:
Sub hello_world Dim my_doc as object Dim my_sheets as object Dim my_cell as object my_doc = ThisComponent my_sheets = my_doc.Sheets my_cell = ThisComponent.Sheets(0).getCellByPosition(2,2) my_cell.String = "A string populated by a button!" Msgbox "~~~ Welcome ~~~" & chr(13) & "LibreOffice Form Controls Demo",,"DebugPoint.com" End Sub
ارجع إلى جدول بيانات كالك وحدّد الزر بعد أن يصبح البرنامج جاهزًا. انقر على زر "عناصر التحكم Controls" في شريط أدوات عناصر التحكم بالنموذج، أو يمكنك النقر بزر الفأرة الأيمن على الزر ثم النقر على عناصر التحكم Controls من قائمة السياق، ثم ستفتح نافذة خصائص الزر.
إسناد ماكرو إلى الزر
انقر على الزر الصغير بجوار العنوان "تنفيذ الإجراء Execute action"، حيث ستفتح نافذة جديدة هي "إسناد الإجراء Assign Action". اختر "تنفيذ الإجراء" وانقر على الزر "ماكرو Macro" لتحديد ماكرو.
اختر الآن الماكرو الذي تريد تنفيذه (وهو "hello world" في مثالنا) وانقر على "موافق".
سيظهر الماكرو المختار في نافذة "إسناد الإجراء" عند تحديده، ثم انقر على "موافق" للعودة إلى جدول البيانات.
تشغيل الماكرو
حان الوقت الآن لتشغيل شيفرة الماكرو، ولكن يجب قبل ذلك إيقاف تشغيل وضع التصميم Design Mode بالنقر على زر "تشغيل / إيقاف تشغيل وضع التصميم Design Mode On/Off" في شريط أدوات عناصر تحكم النموذج، ثم انقر على الزر وشاهد النتيجة.
يمكنك باستخدام هذه الطريقة إسناد ماكرو بسرعة إلى عناصر التحكم وأتمتة المهام المختلفة في ليبر أوفيس.
إدراج وقراءة النص في عنصر تحكم مربع النص TextField
سنوضّح كيفية تهيئة سلسلة نصية وإدراجها في وقت التشغيل، وقراءتها من عنصر التحكم TextField باستخدام ماكرو مكتوب بلغة بيسك Basic.
كيفية إضافة عنصر TextField إلى نافذة
انقر على الرمز التالي واسحبه إلى نافذة جديدة لإضافة عنصر TextField:
كيفية قراءة نص من عنصر TextField
استخدم الدالة getText()
لقراءة نص من عنصر TextField، حيث ستعيد هذه الدالة النص المُدخَل كسلسلة نصية من عنصر TextField.
إليك المثال التالي:
oTextField = oDialog1.getControl("TextField1") Msgbox oTextField.getText()
كيفية إدراج أو تحديث نص في عنصر TextField
استخدم الدالة setText()
لتحديث محتويات عنصر TextField أثناء وقت التشغيل.
إليك المثال التالي:
oTextField = oDialog1.getControl("TextField1") oTextField.setText("Hello World!!!")
كيفية تهيئة نص افتراضيًا في عنصر TextField
هناك طريقتان يمكنك استخدامهما لتهيئة نص افتراضيًا في عنصر TextField. يمكنك تهيئة أي نص افتراضيًا لعنصر TextField أثناء التصميم باستخدام الخاصية Text
، حيث يمكنك كتابة أيّ شيء تريده في الخاصية Text
وستُملَأ في TextBox. الخيار الثاني هو استخدام الدالة setText()
أثناء تحميل النافذة باستخدام عناصر التحكم الخاصة بها.
خاصية TextField الافتراضية Text
شيفرة الماكرو الكاملة
انسخ والصق الشيفرة التالية في محرّر الماكرو ضمن ليبر أوفيس، وأنشئ نافذة بها زر ومربع نص، ثم أسند الدالة test()
إلى حدث نقر الزر.
قراءة النص:
Dim oDialog1 As Object Sub StartDialog1() BasicLibraries.LoadLibrary("Tools") oDialog1 = LoadDialog("Standard", "Dialog1") oDialog1.Execute() End Sub Sub test() oTextField = oDialog1.getControl("TextField1") Msgbox oTextField.getText() End Sub
ضبط النص:
Dim oDialog1 As Object Sub StartDialog1() BasicLibraries.LoadLibrary("Tools") oDialog1 = LoadDialog("Standard", "Dialog1") oDialog1.Execute() End Sub Sub test() oTextField = oDialog1.getControl("TextField1") oTextField.setText("Hello World!!!") End Sub
استخدام نافذة فتح ملف من خلال ماكرو
سنوضّح فيما يلي كيفية فتح نافذة اختيار ملف في ليبر أوفيس LibreOffice وأوبن أوفيس OpenOffice باستخدام ماكرو.
تُستخَدم نافذة اختيار ملف لتحديد ملف أو ملفات في عمليات الأتمتة المختلفة مثل فتح مصنف أوبن أوفيس OpenOffice أو ليبر أوفيس LibreOffice أو مثل استيراد ملف نصي أو ملف csv وما إلى ذلك.
إنشاء الكائنات
لنعرّف دالة يمكن أن يستخدمها أيّ ماكرو لفتح نافذة منتقي الملفات.
Function open_file() As String ' open file picker dialog here and return the path of the chosen file End Function
استخدم خدمة FilePicker
الخاصة بوحدة com.sun.star.ui.dialogs
وخدمة SimpleFileAccess
الخاصة بالوحدة com.sun.star.ucb
لفتح نافذة اختيار ملف، حيث ستوفر هاتان الخدمتان المقابض اللازمة لفتحها.
صرّح وأنشئ كائنين لهذه الخدمات كما يلي:
Dim file_dialog as Object Dim ucb as object GlobalScope.BasicLibraries.LoadLibrary("Tools") file_dialog = CreateUnoService("com.sun.star.ui.dialogs.FilePicker") ucb = createUnoService("com.sun.star.ucb.SimpleFileAccess")
يوفر الكائن ucb -اختصارًا إلى Universal Content Broker- طريقة للوصول إلى محتويات متنوعة عبر UCP (مزوّدو المحتوى العالمي Universal Content Providers).
تنسيق النافذة
يجب تقديم بعض المعلومات قبل فتح نافذة منتقي الملفات مثل أنواع الملفات أو الامتدادات (.jpg و .png وغير ذلك) التي ستكون متاحة بوصفها مرشّحات Filters، ويجب ضبط المجلد الافتراضي لتحديده عند تنفيذ النافذة.
عرّف مصفوفة تحتوي على امتدادات الملفات التي يجب تحميلها في قائمة النوع المنسدلة، ثم مرّرها إلى الدالة AddFiltersToDialog
باستخدام كائن dialog
.
Dim filterNames(3) as String filterNames(0) = "*.*" filterNames(1) = "*.png" filterNames(2) = "*.jpg" AddFiltersToDialog(FilterNames(), file_dialog)
استخدم الدالة SetDisplayDirectory
مع كائن dialog
لضبط المجلد الافتراضي الذي ستفتحه النافذة. تحوّل الدالة ConvertToUrl
مسار لينكس إلى مسار نظام ملفات مثل المسار /usr
الذي يُحوَّل إلى file:///usr
.
init_path = ConvertToUrl("/usr") If ucb.Exists(init_path) Then file_dialog.SetDisplayDirectory(init_path) End If
فتح النافذة
افتح نافذة اختيار الملف لإعادة اسم الملف، حيث ستفتح نافذة اختيار الملف عند تنفيذ الدالة Execute
الخاصة بنافذة الملف، حيث تعيد هذه الدالة قيمتين هما 0 و 1 بناءً على إجراءات المستخدم. إذا اخترتَ ملفًا وضغطت على "موافق OK"، فستُعاد القيمة 1، وإذا ضغطت على "إلغاء CANCEL"، فستُعاد القيمة 0، وإذا حدّد المستخدم ملفًا أو ملفات متعددة، فستُعاد مصفوفة. لنحدّد في مثالنا ملفًا واحدًا ونعيد اسم الملف.
أخيرًا، نفّذ الدالة Dispose
لتحرير جميع الموارد.
open_status = file_dialog.Execute() If open_status = 1 Then file_path = file_dialog.Files(0) open_file = file_path End If file_dialog.Dispose()
استدعِ بعد ذلك الدالة open_file()
من إجراء آخر، ولنعرض مسار الملف الُمحدَّد في مربع رسالة.
Sub pick_a_file() Dim fName As String fName = open_file() MsgBox fName & chr(10) & ConvertFromUrl(fName) End Sub
تشغيل الشيفرة
إذا شغّلت الدالة pick_a_file()
، فيمكنك رؤية النافذة ومربع الرسالة مع مسار الملف المُحدَّد.
فتح نافذة تحديد ملف باستخدام ماكرو
خرج فتح ملف
شيفرة الماكرو الكاملة
Sub pick_a_file() Dim fName As String fName = open_file() MsgBox fName & chr(10) & ConvertFromUrl(fName) End Sub Function open_file() as String Dim file_dialog as Object Dim status as Integer Dim file_path as String Dim init_path as String Dim ucb as object Dim filterNames(3) as String filterNames(0) = "*.*" filterNames(1) = "*.png" filterNames(2) = "*.jpg" GlobalScope.BasicLibraries.LoadLibrary("Tools") file_dialog = CreateUnoService("com.sun.star.ui.dialogs.FilePicker") ucb = createUnoService("com.sun.star.ucb.SimpleFileAccess") AddFiltersToDialog(FilterNames(), file_dialog) 'Set your initial path here! init_path = ConvertToUrl("/usr") If ucb.Exists(init_path) Then file_dialog.SetDisplayDirectory(init_path) End If status = file_dialog.Execute() If status = 1 Then file_path = file_dialog.Files(0) open_file = file_path End If file_dialog.Dispose() End Function
اختيار ملفات متعددة
لنعدّل الماكرو السابق قليلًا بحيث يعيد قائمة أسماء الملفات (المسار الكامل) المُحدَّدة. الاختلاف الوحيد هو أن الدالة معرَّفة بوصفها متغيرًا Variant
واستخدام خاصية نافذة الملف file_dialog.setMultiSelectionMode(True)
والدالة file_dialog.getSelectedFiles()
.
توضّح الشيفرة التالية شيفرة ماكرو كاملة لاختيار ملفات متعددة والحصول على أسمائها:
Sub pick_a_file() Dim fName() As Variant fName = open_file() for i = 0 to Ubound(fName) str1 = str1 & fName(i) & chr(10) next MsgBox str1 End Sub Function open_file() as Variant Dim file_dialog as Object Dim status as Integer Dim init_path as String Dim ucb as object Dim filterNames(3) as String filterNames(0) = "*.*" filterNames(1) = "*.png" filterNames(2) = "*.jpg" GlobalScope.BasicLibraries.LoadLibrary("Tools") file_dialog = CreateUnoService("com.sun.star.ui.dialogs.FilePicker") ucb = createUnoService("com.sun.star.ucb.SimpleFileAccess") AddFiltersToDialog(FilterNames(), file_dialog) 'Set your initial path here! init_path = ConvertToUrl("/usr") file_dialog.setMultiSelectionMode(True) If ucb.Exists(init_path) Then file_dialog.SetDisplayDirectory(init_path) End If status = file_dialog.Execute() If status = 1 Then file_path = file_dialog.getSelectedFiles() open_file = file_path End If file_dialog.Dispose() End Function
ترجمة -وبتصرُّف- للمقالات Using Form Controls in LibreOffice Macro و Use Open File Dialog using Macro in LibreOffice/OpenOffice و Insert and Read Text in TextField Control Using LibreOffice Basic Macro لصاحبها Arindam.
أفضل التعليقات
لا توجد أية تعليقات بعد
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.