ການເອີ້ນໃຊ້ແມັກໂຄຣ Basic ຈາກ Python

ທ່ານສາມາດເອີ້ນໃຊ້ແມັກໂຄຣ LibreOffice Basic ຈາກສະຄຣິບ Python ໄດ້, ແລະ ຈະໄດ້ຮັບຄຸນສົມບັດທີ່ໂດດເດັ່ນກັບຄືນມາ ເຊັ່ນ:

ໂຄງຮ່າງການຂຽນສະຄຣິບ API ຂອງ LibreOffice ຮອງຮັບການຣັນສະຄຣິບຂ້າມພາສາລະຫວ່າງ Python ແລະ Basic ຫຼື ພາສາອື່ນໆທີ່ຮອງຮັບ. ອາຄິວເມນ (Arguments) ສາມາດສົ່ງໄປມາໄດ້ລະຫວ່າງການເອີ້ນໃຊ້, ໂດຍມີເງື່ອນໄຂວ່າ ຕ້ອງເປັນປະເພດຂໍ້ມູນພື້ນຖານທີ່ທັງສອງພາສາຮູ້ຈັກ ແລະ ໂຄງຮ່າງການຂຽນສະຄຣິບຈະແປງພວກມັນໃຫ້ຢ່າງເໝາະສົມ.

ໄອຄອນ ເຄັດລັບ

ຂໍແນະນຳໃຫ້ມີຄວາມຮູ້ກ່ຽວກັບໂມດູນມາດຕະຖານຂອງ Python ແລະ ຄຸນສົມບັດຂອງ LibreOffice API ກ່ອນທີ່ຈະເຮັດການເອີ້ນໃຊ້ຂ້າມພາສາຈາກ Python ໄປຫາ Basic, JavaScript ຫຼື ເຄື່ອງຈັກສະຄຣິບອື່ນໆ.


ໄອຄອນ ຄຳເຕືອນ

ເມື່ອຣັນສະຄຣິບ Python ຈາກສະພາບແວດລ້ອມການພັດທະນາແບບເບັດເສັດ (IDE), ເຄື່ອງຈັກ Basic ທີ່ຝັງຢູ່ໃນ LibreOffice ອາດຈະບໍ່ມີຢູ່. ໃຫ້ຫຼີກເວັ້ນການເອີ້ນໃຊ້ Python-to-LibreOffice Basic ໃນສະຖານະການດັ່ງກ່າວ. ຢ່າງໃດກໍຕາມ, ສະພາບແວດລ້ອມ Python ແລະ Universal Networks Objects (UNO) ແມ່ນສາມາດໃຊ້ງານໄດ້ຢ່າງເຕັມສ່ວນ. ເບິ່ງຂໍ້ມູນເພີ່ມເຕີມໄດ້ທີ່ ການຕັ້ງຄ່າ IDE ສຳລັບ Python.


ການດຶງຂໍ້ມູນສະຄຣິບ LibreOffice Basic

ແມັກໂຄຣ LibreOffice Basic ສາມາດເປັນແບບສ່ວນຕົວ, ແບບແບ່ງປັນ ຫຼື ແບບຝັງຢູ່ໃນເອກະສານ. ເພື່ອຣັນພວກມັນ, ລະບົບ Python ຈຳເປັນຕ້ອງຮູ້ຕຳແໜ່ງຂອງແມັກໂຄຣ Basic. ການນຳໃຊ້ສ່ວນຕິດຕໍ່ com.sun.star.script.provider.XScriptProvider ຊ່ວຍໃຫ້ສາມາດດຶງສະຄຣິບທີ່ພ້ອມຣັນໄດ້:


		 import uno
		 from com.sun.star.script.provider import Xscript
		     
		 def getBasicScript(macro='Main', module='Module1', library='Standard',
		         isEmbedded=False) -> XScript:
		     '''ດຶງເອົາອອບເຈັກສະຄຣິບ Basic ກ່ອນທີ່ຈະເອີ້ນໃຊ້.'''
		     ctx = uno.getComponentContext()
		     smgr = ctx.ServiceManager
		     if isEmbedded:
		         desktop = smgr.createInstanceWithContext('com.sun.star.frame.Desktop', ctx)
		         scriptPro = desktop.CurrentComponent.getScriptProvider()
		         location = "document"
		     else:
		         mspf = smgr.createInstanceWithContext(
		             "com.sun.star.script.provider.MasterScriptProviderFactory", ctx)
		         scriptPro = mspf.createScriptProvider("")
		         location = "application"
		     scriptName = "vnd.sun.star.script:"+library+"."+module+"."+macro+ \
		                  "?language=Basic&location="+location
		     xScript = scriptPro.getScript(scriptName)
		     return xScript
		 

ການຣັນສະຄຣິບ LibreOffice Basic

ເອກະສານຂອງຊຸດພັດທະນາຊອບແວ (SDK) LibreOffice ສຳລັບສ່ວນຕິດຕໍ່ com.sun.star.script.provider.XScript ໃຫ້ລາຍລະອຽດກ່ຽວກັບວິທີການເອີ້ນໃຊ້ຂ້າມພາສາ. ການເອີ້ນໃຊ້ຟັງຊັນຕ້ອງໃຊ້ ອາເຣ (Array) ສາມຊຸດ:

ໄວຍາກອນ Python

results = script.invoke((prompt,buttons,title), (), ())

script.invoke((message,), tuple, ())

script.invoke((args), (), results)

ຕົວຢ່າງຂອງສະຄຣິບສ່ວນຕົວ ຫຼື ແບບແບ່ງປັນ

ຕົວຢ່າງໃນ ການນຳເຂົ້າ/ສົ່ງອອກ ຫາໜ້າຈໍ ໃຫ້ລາຍລະອຽດກ່ຽວກັບການເອີ້ນໃຊ້ Python ຫາ Basic. ການຕິດຕາມເຫດການຂອງເອກະສານ ສະແດງໃຫ້ເຫັນການໃຊ້ *args ຂອງ Python ເພື່ອສະແດງຜົນພາຣາມິເຕີຫຼາຍຕົວໄປຫາໄດອາລັອກຄອນໂຊນລັອກຂອງ Access2Base.

ໄອຄອນ ເຄັດລັບ

ໃນລະຫວ່າງການພັດທະນາ, ທ່ານສາມາດຢຸດການຣັນສະຄຣິບ Python ໄດ້ໂດຍການໃຊ້ ສ່ວນຂະຫຍາຍ Xray ເພື່ອກວດສອບຄຸນສົມບັດ ແລະ ເມັດທອດ (methods) ຂອງອອບເຈັກ UNO. ຕົວດີບັກ (debugger) ຂອງສ່ວນຂະຫຍາຍ APSO ຊ່ວຍໃຫ້ສາມາດກວດສອບອອບເຈັກໄດ້ໂດຍໃຊ້ສ່ວນຂະຫຍາຍ Xray ຫຼື MRI.



	  def xray(myObject):
	  	  script = getBasicScript(library="XrayTool", module="_Main", macro="Xray")
	  	  script.invoke((myObject,), (), ())
	  

ຕົວຢ່າງຂອງສະຄຣິບທີ່ຝັງຢູ່ໃນເອກະສານ

ໄວຍາກອນ *args ແບບງ່າຍຂອງ Python ສາມາດໃຊ້ຮ່ວມກັບຣູທິນຂອງ LibreOffice Basic ທີ່ຮອງຮັບອາຄິວເມນຫຼາຍຕົວ. ຂ້າງລຸ່ມນີ້ ຟັງຊັນ Print ແລະ SUM ຂອງ Python ຈະເອີ້ນໃຊ້ Print ແລະ SUM ຂອງ Basic ໂດຍໃຊ້ຟັງຊັນ getBasicScript ທີ່ກ່າວມາຂ້າງເທິງ. ການຈັດການຂໍ້ຜິດພາດ (Exception handling) ແມ່ນບໍ່ໄດ້ລະບຸໄວ້ລະອຽດ.


	  # -*- coding: utf-8 -*-
	  from __future__ import unicode_literals
	      
	  def Print(*args):
	      """ສະແດງຂໍ້ຄວາມ ຫຼື ຄ່າຕົວເລກທີ່ລະບຸໄວ້ໃນກ່ອງໄດອາລັອກ."""
	      xScript = getBasicScript("Print", "Scripting", embedded=True)
	      xScript.invoke((args), (), ())
	      
	  def SUM(*args):
	      """ລວມຍອດຄ່າຕົວເລກທີ່ລະບຸໄວ້."""
	      xScript = getBasicScript("SUM", "Scripting", embedded=True)
	      res = xScript.invoke((args), (), ())
	      return res[0]
	      
	  # def getBasicScript()  # see above
	      
	  def playWithArgs():
	      Print("Fun with *args ", -9.81, 297864.681974, 8762E-137)
	      Print(SUM(45, -9.81, 297864.681974))
	      Print(SUM(45, -9.81, 297864.681974, 8762E+137))
	      
	  g_exportedScripts = (playWithArgs,)
	  

ຣູທິນ Print ແລະ SUM ໃນ Basic ຂອງ LibreOffice ຮອງຮັບອາຄິວເມນຫຼາຍຕົວ. ຄຸນລັກສະນະ Private ຫຼື Public ບໍ່ມີຜົນຫຍັງ. ການກວດສອບປະເພດອາຄິວເມນແມ່ນຂ້າມໄປເພື່ອຄວາມຊັດເຈນ.


	  Option Compatible ' "Standard.Scripting" module
	  Option Explicit
	      
	  Private Sub Print(ParamArray args() As Variant, Optional sep As String = " ")
	      ''' ສະແດງລາຍການທີ່ມີຈຳນວນຕົວແປບໍ່ຄົງທີ່ '''
	      ' ຍອມຮັບທຸກອາຄິວເມນທີ່ສາມາດແປງດ້ວຍ CStr() ໄດ້
	      Dim str As String, i As Integer
	      If UBound(args) >= 0 Then
	          For i = 0 To UBound(args)
	              str = str + Cstr(args(i))+ sep 
	          Next i
	      End If
	      Print str
	  End Sub ' Standard.Scripting.Print()
	      
	  Public Function SUM(ParamArray args() As Variant) As Variant
	      ''' ລວມຍອດລາຍການຕົວເລກ '''
	      Dim ndx As Integer
	      If UBound(args) >= 0 Then
	          For ndx = 0 To UBound(args)
	              SUM = SUM + args(ndx)
	          Next ndx
	      End If
	  End Function ' Standard.Scripting.SUM()
	  
ກະລຸນາສະໜັບສະໜູນພວກເຮົາ!

ກະລຸນາສະໜັບສະໜູນພວກເຮົາ!