ການຊ່ວຍເຫຼືອ LibreOffice 26.2
ການຮຽກໃຊ້ສະຄຣິບ 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 ສາມາດເປັນແບບສ່ວນຕົວ, ແບ່ງປັນ, ຫຼື ຝັງຢູ່ໃນເອກະສານ. ເພື່ອທີ່ຈະປະມວນຜົນພວກມັນ, 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
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 ທີ່ຝັງຢູ່ໃນ 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