ເນື້ອໃນ

# ການຂຽນໂປຣແກຣມດ້ວຍສະຄຣິບ 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

ຫົວຂໍ້ທີ່ກ່ຽວຂ້ອງ

ອອບເຈັກ, ຟັງຊັນ ແລະ ບໍລິການ UNO ຂອງ Basic

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

ການນຳເຂົ້າ/ສົ່ງອອກ ຫນ້າຈໍ

ການຊ່ວຍເຫຼືອສະຄຣິບ Python ຂອງ LibreOffice

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