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

استخدام عناصر التحكم بالنماذج ونافذة فتح الملفات من خلال الماكرو في ليبر أوفيس


Ola Abbas

سنستخدم عناصر تحكم بالنماذج Controls -مثل الأزرار ومربعات النصوص- ونافذة فتح الملفات ضمن جدول بيانات ليبر أوفيس كالك LibreOffice Calc، وسنسند لها ماكرو، حيث سنعطي أمثلة بسيطة توضّح الأساسيات ولكن يمكنك تطويرها لتشمل احتياجاتك المختلفة.

هذا المقال جزء من سلسلة مقالات حول إنشاء ماكرو في ليبر أوفيس كالك، فهرس السلسلة:

إضافة زر إلى جدول بيانات كالك

01_LO_Form_Controls_1.png

انتقل إلى قائمة عرض View ثم أشرطة الأدوات Toolbars ثم عناصر التحكم بالنموذج Form Controls، حيث يتكون عنصر التحكم بالنموذج من عناصر تحكم متعددة وزر تبديل لوضع التصميم وغير ذلك.

02_LO_Form_Controls_2.png

سنضيف الآن زرًا إلى جدول بيانات كالك باستخدام عنصر تحكم الزر. لنكتب برنامجًا بسيطًا بلغة بيسك 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 من قائمة السياق، ثم ستفتح نافذة خصائص الزر.

03_LO_Form_Controls_3.png

إسناد ماكرو إلى الزر

04_LO_Form_Controls_4.png

انقر على الزر الصغير بجوار العنوان "تنفيذ الإجراء Execute action"، حيث ستفتح نافذة جديدة هي "إسناد الإجراء Assign Action". اختر "تنفيذ الإجراء" وانقر على الزر "ماكرو Macro" لتحديد ماكرو.

05_LO_Form_Controls_5.png

اختر الآن الماكرو الذي تريد تنفيذه (وهو "hello world" في مثالنا) وانقر على "موافق".

06_LO_Form_Controls_6.png

سيظهر الماكرو المختار في نافذة "إسناد الإجراء" عند تحديده، ثم انقر على "موافق" للعودة إلى جدول البيانات.

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

07_LO_Form_Controls_7.png

حان الوقت الآن لتشغيل شيفرة الماكرو، ولكن يجب قبل ذلك إيقاف تشغيل وضع التصميم Design Mode بالنقر على زر "تشغيل / إيقاف تشغيل وضع التصميم Design Mode On/Off" في شريط أدوات عناصر تحكم النموذج، ثم انقر على الزر وشاهد النتيجة.

يمكنك باستخدام هذه الطريقة إسناد ماكرو بسرعة إلى عناصر التحكم وأتمتة المهام المختلفة في ليبر أوفيس.

إدراج وقراءة النص في عنصر تحكم مربع النص TextField

سنوضّح كيفية تهيئة سلسلة نصية وإدراجها في وقت التشغيل، وقراءتها من عنصر التحكم TextField باستخدام ماكرو مكتوب بلغة بيسك Basic.

كيفية إضافة عنصر TextField إلى نافذة

انقر على الرمز التالي واسحبه إلى نافذة جديدة لإضافة عنصر TextField:

10_TextField.png

كيفية قراءة نص من عنصر TextField

استخدم الدالة getText()‎ لقراءة نص من عنصر TextField، حيث ستعيد هذه الدالة النص المُدخَل كسلسلة نصية من عنصر TextField.

إليك المثال التالي:

oTextField = oDialog1.getControl("TextField1")
Msgbox oTextField.getText()

11_read-text-text-field.png

كيفية إدراج أو تحديث نص في عنصر TextField

استخدم الدالة setText()‎ لتحديث محتويات عنصر TextField أثناء وقت التشغيل.

إليك المثال التالي:

oTextField = oDialog1.getControl("TextField1")
oTextField.setText("Hello World!!!")

12_text-field-set-text.png

كيفية تهيئة نص افتراضيًا في عنصر TextField

هناك طريقتان يمكنك استخدامهما لتهيئة نص افتراضيًا في عنصر TextField. يمكنك تهيئة أي نص افتراضيًا لعنصر TextField أثناء التصميم باستخدام الخاصية Text، حيث يمكنك كتابة أيّ شيء تريده في الخاصية Text وستُملَأ في TextBox. الخيار الثاني هو استخدام الدالة setText()‎ أثناء تحميل النافذة باستخدام عناصر التحكم الخاصة بها.

13_TextField-default-Text-property.png

خاصية 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()‎، فيمكنك رؤية النافذة ومربع الرسالة مع مسار الملف المُحدَّد.

08_File-Selection-Dialog-Open-using-Macro.png

فتح نافذة تحديد ملف باستخدام ماكرو

09_File-Open-Output.png

خرج فتح ملف

شيفرة الماكرو الكاملة

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.

اقرأ أيضًا


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

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

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



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

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

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

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   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.


×
×
  • أضف...