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

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

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

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


         # -*- coding: utf-8 -*-
         from __future__ import unicode_literals
          
         import platform
          
         def computer_name() -> str:
             return platform.node()
          
         def OSname() -> str:
             return platform.system()
      

         # -*- 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 ປະກອບມີຄັງໜັງສືມາດຕະຖານຫຼາຍຢ່າງທີ່ມີປະໂຫຍດ. ພວກມັນມີຄຸນສົມບັດຫຼາກຫຼາຍ ເຊັ່ນ (ແຕ່ບໍ່ຈຳກັດພຽງແຕ່):

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

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