ເນື້ອໃນ

# ການຮຽກໃຊ້ສະຄຣິບ Python ຈາກ Basic

ການຮຽກໃຊ້ສະຄຣິບ Python ຈາກມາໂຄຣ LibreOffice Basic ສາມາດເຮັດໄດ້ ແລະ ຈະຊ່ວຍໃຫ້ໄດ້ຄຸນສົມບັດທີ່ມີປະໂຫຍດ ເຊັ່ນ:

- ສາມາດລະບຸ ComputerName ຫຼື ກວດສອບ OSName ໄດ້,

- ຟັງຊັນ FileLen() ຂອງ Basic ແລະ com.sun.star.ucb.SimpleFileAccess.getSize() ຂອງ API ມີຂີດຈຳກັດຂະໜາດໄຟລ໌ສູງສຸດຢູ່ທີ່ 2 Gigabytes ເຊິ່ງ Python ສາມາດຊ່ວຍແກ້ໄຂບັນຫານີ້ໄດ້,

- ສາມາດປັບ com.sun.star.util.PathSettings ໃຫ້ເປັນມາດຕະຖານໄດ້,

- ແລະ ອື່ນໆອີກຫຼາຍຢ່າງ.

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

## ການດຶງສະຄຣິບ Python ມາໃຊ້

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

             Option Explicit

             Public Function GetPythonScript(macro As String, _
                     Optional location As String) As com.sun.star.script.provider.Xscript
                 ''' ດຶງວັດຖຸສະຄຣິບ Python ກ່ອນການປະມວນຜົນ
                 ' ອາຄິວເມນ (Arguments):
                 '    macro   : ໃນຮູບແບບ "library/module.py$macro" ຫຼື "module.py$macro"
                 '    location: ໃນຮູບແບບ "document", "share", "user" ຫຼື ENUM(eration)
                 ' ຜົນລັບ:
                 '    ບໍລິການ UNO com.sun.star.script.provider.XScript ທີ່ລະບຸຕຳແໜ່ງແລ້ວ'''
                 If IsMissing(location) Then location = "user"
                 Dim mspf As Object ' com.sun.star.script.provider.MasterScriptProviderFactory
                 Dim sp As Object ' ເຂົ້າກັນໄດ້ກັບ com.sun.star.script.provider.XScriptProvider
                 Dim uri As String
                 If location="document" Then
                     sp = ThisComponent.getScriptProvider()
                 Else
                     mspf = CreateUnoService("com.sun.star.script.provider.MasterScriptProviderFactory")
                     sp = mspf.createScriptProvider("")
                 End If
                 uri = "vnd.sun.star.script:"& macro &"?language=Python&location="& location
                 GetPythonScript = sp.getScript(uri)
             End Function ' GetPythonScript

## ການປະມວນຜົນສະຄຣິບ Python

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

### ໄວຍາກອນ (Syntax)

workstation_name = script.invoke(Array(), Array(), Array())

opSysName = script.invoke(Array(), in_outs, Array()) ' in_out ແມ່ນ Array

file_len = script.invoke(Array(systemFilePath), Array(), Array())

normalizedPath = script.invoke(Array(systemFilePath), Array(), Array())

### ຕົວຢ່າງສະຄຣິບແບບຝັງຕົວ

ລຸ່ມນີ້ແມ່ນຣູທີນ ComputerName ແລະ GetFilelen ທີ່ຮຽກໃຊ້ສ່ວນຂອງ Python ໂດຍໃຊ້ຟັງຊັນ GetPythonScript ທີ່ກ່າວມາຂ້າງເທິງ. ການຈັດການຂໍ້ຍົກເວັ້ນບໍ່ໄດ້ສະແດງລາຍລະອຽດ.

             Option Explicit
             Option Compatible ' ຮອງຮັບ Properties

             Private scr As Object ' com.sun.star.script.provider.XScript

             Private Property Get ComputerName As String
                 '''ຊື່ເຄື່ອງຄອມພິວເຕີ (Workstation name)'''
                 scr = GetPythonScript("Platform.py$computer_name", "document")
                 ComputerName = scr.invoke(Array(), Array(), Array())
             End Property ' ComputerName

             Private Function GetFilelen(systemFilePath As String) As Currency
                 '''ຂະໜາດໄຟລ໌ເປັນໄບຕ໌ (bytes)'''
                 scr = GetPythonScript("Os/Path.py$get_size", Script.ISEMBEDDED)
                 GetFilelen = scr.invoke(Array(systemFilePath), Array(), Array(),)
             End Function ' GetFilelen

             Private Type _SCRIPT_LOCATION
                 ISEMBEDDED As String ' ສະຄຣິບໃນເອກະສານ
                 ISPERSONAL As String ' ສະຄຣິບຂອງຜູ້ໃຊ້
                 ISSHARED As String ' ມາໂຄຣຂອງ LibreOffice
             End Type ' _SCRIPT_LOCATION

             Public Function Script() As Object ' Text enumeration
                 Static enums As _SCRIPT_LOCATION : With enums
                 If .ISEMBEDDED = "" Then
                     .ISEMBEDDED = "document" ' ສະຄຣິບໃນເອກະສານ
                     .ISPERSONAL = "user" ' ສະຄຣິບຂອງຜູ້ໃຊ້
                     .ISSHARED = "share" ' ມາໂຄຣຂອງ LibreOffice
                 End If : End With ' enums
                 Script = enums
             End Function ' Script

ໂມດູນ Python ສອງອັນທີ່ແຕກຕ່າງກັນຖືກຮຽກໃຊ້. ພວກມັນສາມາດຝັງຢູ່ໃນເອກະສານປັດຈຸບັນ ຫຼື ເກັບໄວ້ໃນລະບົບໄຟລ໌ກໍໄດ້. ການກວດສອບປະເພດອາຄິວເມນຖືກຂ້າມໄປເພື່ອຄວາມຊັດເຈນ:

- Platform.py

             # -*- coding: utf-8 -*-
             from __future__ import unicode_literals

             import platform

             def computer_name() -> str:
                 return platform.node()

             def OSname() -> str:
                 return platform.system()

- Os/Path.py

             # -*- coding: utf-8 -*-
             from __future__ import unicode_literals

             import os.path

             def get_size(systemFilePath: str) -> str:
                 return str(os.path.getsize(systemFilePath))

             def normalyze(systemPath: str) -> str:
                 return os.path.normpath(systemPath)

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

ກົນໄກການຮຽກໃຊ້ສະຄຣິບ Python ແບບສ່ວນຕົວ ຫຼື ແບບແບ່ງປັນ ແມ່ນຄືກັນກັບສະຄຣິບແບບຝັງຕົວ. ຊື່ຄັງໜັງສືຖືກເຊື່ອມໂຍງກັບໂຟນເດີ. ການຄຳນວນເສັ້ນທາງໄຟລ໌ລະບົບຂອງໂປຣໄຟລ໌ຜູ້ໃຊ້ LibreOffice ແລະ ໂມດູນທີ່ແບ່ງປັນສາມາດເຮັດໄດ້ຕາມລາຍລະອຽດໃນ ການດຶງຂໍ້ມູນເຊດຊັນ. ລຸ່ມນີ້ແມ່ນຣູທີນ OSName, HelloWorld ແລະ NormalizePath ທີ່ຮຽກໃຊ້ສ່ວນຂອງ Python ໂດຍໃຊ້ຟັງຊັນ GetPythonScript.

             Option Explicit
             Option Compatible ' ຮອງຮັບ Properties

             Private scr As Object ' com.sun.star.script.provider.XScript

             Private Property Get OSName As String
                 '''ຊື່ແພລັດຟອມ ເຊັ່ນ "Linux", "Darwin" ຫຼື "Windows"'''
                 scr = GetPythonScript("Platform.py$OSname", Script.ISPERSONAL)
                 OSName = scr.invoke(Array(), Array(), Array())
             End Property ' OSName

             Private Sub HelloWorld()
                 '''ຕົວຢ່າງ Python ແບບແບ່ງປັນຂອງ LibreOffice'''
                 scr = GetPythonScript("HelloWorld.py$HelloWorldPython", Script.ISSHARED)
                 scr.invoke(Array(), Array(), Array(),)
             End Sub ' HelloWorld

             Public Function NormalizePath(systemFilePath As String) As String
                 '''ຕັດ '\..' ທີ່ເກີນອອກໃນເສັ້ນທາງ (path)'''
                 scr = GetPythonScript("Os/Path.py$normalyze", "user")
                 NormalizePath = scr.invoke(Array(systemFilePath), Array(), Array())
             End Function ' NormalizePath

## ໂມດູນມາດຕະຖານຂອງ Python

Python ທີ່ຝັງຢູ່ໃນ LibreOffice ປະກອບມີຄັງໜັງສືມາດຕະຖານຫຼາຍຢ່າງທີ່ມີປະໂຫຍດ. ພວກມັນມີຄຸນສົມບັດຫຼາກຫຼາຍ ເຊັ່ນ (ແຕ່ບໍ່ຈຳກັດພຽງແຕ່):

- argparse ຕົວວິເຄາະສຳລັບຕົວເລືອກຄຳສັ່ງ (command-line options), ອາຄິວເມນ ແລະ ຄຳສັ່ງຍ່ອຍ

- cmath ຟັງຊັນຄະນິດສາດສຳລັບເລກຊ້ອນ (complex numbers)

- csv ການອ່ານ ແລະ ຂຽນໄຟລ໌ CSV

- datetime ປະເພດຂໍ້ມູນວັນທີ ແລະ ເວລາທີ່ແທ້ຈິງ

- json ຕົວເຂົ້າລະຫັດ ແລະ ຖອດລະຫັດ JSON

- math ຟັງຊັນຄະນິດສາດ

- re ການດຳເນີນການ Regular expression

- socket ອິນເຕີເຟສເຄືອຂ່າຍລະດັບຕ່ຳ

- sys ພາຣາມິເຕີ ແລະ ຟັງຊັນສະເພາະຂອງລະບົບ

- unittest ແລະ trace ໂຄງຮ່າງການທົດສອບຢູນິດ ແລະ ການຕິດຕາມການເຮັດວຽກຂອງ Python

- xml.etree.ElementTree ElementTree XML API

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

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

ວິທີໃຊ້ LibreOffice Basic

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

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