ການຊ່ວຍເຫຼືອ LibreOffice 26.2
ທ່ານສາມາດເອີ້ນໃຊ້ແມັກໂຄຣ LibreOffice Basic ຈາກສະຄຣິບ Python ໄດ້, ແລະ ຈະໄດ້ຮັບຄຸນສົມບັດທີ່ໂດດເດັ່ນກັບຄືນມາ ເຊັ່ນ:
ລະບົບການບັນທຶກລັອກແບບງ່າຍດາຍຈາກຄອນໂຊນ Trace ຂອງໄລບຣາຣີ Access2Base,
ຟັງຊັນ I/O ຫນ້າຈໍ InputBox ແລະ MsgBox ທີ່ອີງໃສ່ Basic ເພື່ອຄວາມສະດວກໃນການພັດທະນາ Python,
ການເອີ້ນໃຊ້ Xray ເພື່ອຢຸດການເຮັດວຽກຂອງສະຄຣິບ 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 ສາມາດເປັນແບບສ່ວນຕົວ, ແບບແບ່ງປັນ ຫຼື ແບບຝັງຢູ່ໃນເອກະສານ. ເພື່ອຣັນພວກມັນ, ລະບົບ 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
ເອກະສານຂອງຊຸດພັດທະນາຊອບແວ (SDK) LibreOffice ສຳລັບສ່ວນຕິດຕໍ່ com.sun.star.script.provider.XScript ໃຫ້ລາຍລະອຽດກ່ຽວກັບວິທີການເອີ້ນໃຊ້ຂ້າມພາສາ. ການເອີ້ນໃຊ້ຟັງຊັນຕ້ອງໃຊ້ ອາເຣ (Array) ສາມຊຸດ:
ຊຸດທຳອິດແມ່ນລາຍການອາຄິວເມນຂອງຣູທິນທີ່ຖືກເອີ້ນ
ຊຸດທີສອງແມ່ນລະບຸອາຄິວເມນທີ່ຖືກແກ້ໄຂ
ຊຸດທີສາມແມ່ນເກັບຄ່າທີ່ສົ່ງກັບຄືນມາ
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()