ການຂຽນໂປຣແກຣມດ້ວຍສະຄຣິບ Python

ແມັກໂຄຣ Python ແມ່ນຟັງຊັນທີ່ຢູ່ໃນໄຟລ໌ .py ເຊິ່ງເອີ້ນວ່າໂມດູນ. ແມັກໂຄຣ Python ໃຊ້ ອອບເຈັກ XSCRIPTCONTEXT ເພື່ອເຂົ້າເຖິງ UNO. ທິວໂພ (tuple) ສາກົນ g_exportedScripts ຈະລະບຸລາຍການແມັກໂຄຣທີ່ສາມາດເລືອກໃຊ້ໄດ້ໃນໂມດູນ. ໂມດູນ Python ແຕ່ລະອັນຈະແຍກອອກຈາກກັນ.

ຕົວປ່ຽນສາກົນ XSCRIPTCONTEXT

ຄວາມສາມາດຂອງ UNO ສາມາດເຂົ້າເຖິງໄດ້ຜ່ານຕົວປ່ຽນສາກົນ XSCRIPTCONTEXT. ເບິ່ງ ຄຳອະທິບາຍ XSCRIPTCONTEXT ໃນ API ຂອງ LibreOffice. ເມັດທອດຂອງ XSCRIPTCONTEXT ສາມາດສະຫຼຸບໄດ້ດັ່ງນີ້:

ເມັດທອດ

ຄຳອະທິບາຍ

ທຽບເທົ່າໃນ Basic ຄື

getDocument()

ການອ້າງອີງເຖິງເອກະສານທີ່ສະຄຣິບສາມາດເຮັດວຽກນຳໄດ້.

ThisComponent

getDesktop()

ການອ້າງອີງເຖິງເດັສທັອບທີ່ສະຄຣິບສາມາດເຮັດວຽກນຳໄດ້.

StarDesktop

getComponentContext()

ບໍລິບົດສ່ວນປະກອບທີ່ສະຄຣິບສາມາດໃຊ້ເພື່ອສ້າງສ່ວນປະກອບ UNO ອື່ນໆ.

GetDefaultContext


ສະຄຣິບ HelloWorld ແລະ Capitalise ທີ່ມາພ້ອມກັບການຕິດຕັ້ງ ສະແດງໃຫ້ເຫັນການໃຊ້ຕົວປ່ຽນ XSCRIPTCONTEXT.

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

ໄຟລ໌ຜົນອອກມາດຕະຖານຂອງ Python ຈະບໍ່ມີໃຫ້ໃຊ້ເມື່ອຣັນແມັກໂຄຣ Python ຈາກເມນູ ເຄື່ອງມື - ແມັກໂຄຣ - ຣັນແມັກໂຄຣ. ເບິ່ງ ການນຳເຂົ້າ/ສົ່ງອອກ ຫນ້າຈໍ ສຳລັບຂໍ້ມູນເພີ່ມເຕີມ.


ການນຳເຂົ້າໂມດູນ

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

XSCRIPTCONTEXT ບໍ່ໄດ້ຖືກສົ່ງໃຫ້ກັບໂມດູນທີ່ນຳເຂົ້າມາ.


ໄລບຣາຣີຂອງ LibreOffice Basic ປະກອບມີຄລາສ, ຣູທິນ ແລະ ຕົວປ່ຽນ, ສ່ວນໂມດູນ Python ປະກອບມີຄລາສ, ຟັງຊັນ ແລະ ຕົວປ່ຽນ. ສ່ວນປະກອບ Python ທີ່ໃຊ້ຄືນໄດ້ຄວນເກັບໄວ້ໃນ ແມັກໂຄຣຂອງຂ້ອຍ ພາຍໃຕ້ pythonpath. ໃຫ້ນຳເຂົ້າ uno.py ພາຍໃນໂມດູນທີ່ໃຊ້ຮ່ວມກັນ.

ສາມາດເຂົ້າເຖິງ UNO ໄດ້ໂດຍໃຊ້ໂມດູນ uno.py. ໃຊ້ Python interactive shell ເພື່ອເບິ່ງລາຍລະອຽດຂອງໂມດູນໂດຍໃຊ້ຄຳສັ່ງ dir() ແລະ help().

ຟັງຊັນ

ຄຳອະທິບາຍ

ທຽບເທົ່າໃນ Basic ຄື

absolutize()

ສົ່ງຄືນ URL ໄຟລ໌ແບບເຕັມ (absolute) ຈາກ URL ທີ່ກຳນົດ.

createUnoStruct()

ສ້າງໂຄງສ້າງ (struct) ຫຼື ຂໍ້ຜິດພາດ (exception) ຂອງ UNO ຕາມທີ່ລະບຸໃນ typeName.

CreateUNOStruct()

fileUrlToSystemPath()

ສົ່ງຄືນເສັ້ນທາງຂອງລະບົບ (system path).

ConvertFromURL()

getClass()

ສົ່ງຄືນຄລາສຂອງ exception, struct ຫຼື interface ຂອງ UNO.

getComponentContext()

ສົ່ງຄືນບໍລິບົດສ່ວນປະກອບ UNO ທີ່ໃຊ້ເພື່ອເລີ່ມຕົ້ນລະບົບ Python.

GetDefaultContext()

Enum()

getConstantByName()

ຄົ້ນຫາຄ່າຂອງຄ່າຄົງທີ່ IDL ໂດຍການລະບຸຊື່.

ເບິ່ງກຸ່ມຄ່າຄົງທີ່ຂອງ API

isInterface()

ສົ່ງຄືນຄ່າ True ເມື່ອ obj ເປັນຄລາສຂອງສ່ວນຕິດຕໍ່ UNO.

systemPathToFileUrl()

ສົ່ງຄືນ URL ໄຟລ໌ສຳລັບເສັ້ນທາງລະບົບທີ່ກຳນົດ.

ConvertToURL()


ສະຄຣິບ LibreLogo, NamedRanges, SetCellColor ແລະ TableSample ທີ່ຕິດຕັ້ງມາລ່ວງໜ້າແມ່ນໃຊ້ໂມດູນ uno.py.

ຕົວຢ່າງ Python-Basic ເພີ່ມເຕີມ

Python UNO

ຄຸນສົມບັດ Basic UNO

ctx = uno.getComponentContext()

smgr = ctx.getServiceManager()

obj = smgr.createInstanceWithContext( .. , ctx)

CreateUnoService()

ເບິ່ງ ການເປີດໄດອາລັອກ

CreateUnoDialog()

ເບິ່ງ ການສ້າງ Listener

CreateUnoListener()

ເບິ່ງປະເພດຂໍ້ມູນ UNO

CreateUnoValue()

CreateObject()

ໃຊ້ຕົວດຳເນີນການປຽບທຽບ "==" ຫຼື "!="

EqualUnoObjects()

ctx = uno.getComponentContext()

smgr = ctx.getServiceManager()

GetProcessServiceManager()

def hasUnoInterfaces(obj, *interfaces):

return set(interfaces).issubset(t.typeName for t in obj.Types)

HasUnoInterfaces()

IsUnoStruct()

ctx = uno.getComponentContext()

smgr = ctx.getServiceManager()

DESK = 'com.sun.star.frame.Desktop'

desktop = smgr.createInstanceWithContext(DESK , ctx)

StarDesktop

desktop = smgr.createInstanceWithContext(DESK , ctx)

doc = desktop.CurrentComponent

ThisComponent


ການນຳເຂົ້າໂມດູນທີ່ຝັງໄວ້

ເຊັ່ນດຽວກັນກັບ LibreOffice Basic ທີ່ຮອງຮັບການທ່ອງເບິ່ງ ແລະ ການໂຫຼດໄລບຣາຣີແບບໄດນາມິກ, ໄລບຣາຣີ Python ສາມາດສຳຫຼວດ ແລະ ນຳເຂົ້າໄດ້ຕາມຄວາມຕ້ອງການ. ສຳລັບຂໍ້ມູນເພີ່ມເຕີມກ່ຽວກັບຄອນເທນເນີໄລບຣາຣີ, ໃຫ້ເຂົ້າໄປເບິ່ງ LibreOffice Application Programming Interface (API) ຫຼື ດາວໂຫຼດ LibreOffice Software Development Kit (SDK).

ການນຳເຂົ້າໂມດູນ Python ທີ່ຝັງໃນເອກະສານແມ່ນສະແດງໄວ້ຂ້າງລຸ່ມນີ້:


            import uno, sys, zipimport
            
            def load_library(library_name: str, module_name=None):
                """ ໂຫຼດໄລບຣາຣີ ແລະ ນຳເຂົ້າໂມດູນ
                
                ປັບປຸງມາຈາກ 'Bibliothèque de fonctions' ໂດຍ Hubert Lambert
                ທີ່ https://forum.openoffice.org/fr/forum/viewtopic.php?p=286213"""
                doc = XSCRIPTCONTEXT.getDocument()  # ເອກະສານປັດຈຸບັນ
                url = uno.fileUrlToSystemPath( \
                    '{}/{}'.format(doc.URL, 'Scripts/python'+library_name))  # ConvertToURL()
                if not url in sys.path:  # ເພີ່ມເສັ້ນທາງຖ້າຈຳເປັນ
                    sys.path.insert(0, url)  # doclib ມາກ່ອນ
                if module_name:  # ນຳເຂົ້າຖ້າມີການຮ້ອງຂໍ
                    return zipimport.zipimporter(url).load_module(module_name)
            
            def import_embedded_python():
                ui = load_library("my_gui",'screen_io')  # ເພີ່ມເສັ້ນທາງໄລບຣາຣີ + ນຳເຂົ້າໂມດູນ
                ui.MsgBox(sys.modules.keys())
            
            g_exportedScripts = (import_embedded_python,)  # Public macros
        
ກະລຸນາສະໜັບສະໜູນພວກເຮົາ!

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