Помощ за Collabora Office 24.04
Възможно е от макроси на Collabora Office Basic да се извикват скриптове на Python, което дава достъп до полезна функционалност, например:
извличане на името на компютъра и операционната система с ComputerName и OSName,
преодоляване на ограничението от 2 гигабайта за размер на файла във функцията FileLen() на Basic и com.sun.star.ucb.SimpleFileAccess.getSize() с помощта на Python,
нормализиране на пътищата от com.sun.star.util.PathSettings,
и много други.
Препоръчва се преди да използвате междуезикови обръщения от Basic към Python, JavaScript или друга скриптова машина да сте се запознали в достатъчна степен с Collabora Office Basic и функциите на интерфейса за приложно програмиране (API).
Скриптовете на Python могат да бъдат лични, споделени или вградени в документи. За да ги стартира, Collabora Office Basic трябва да разполага с местоположенията им. Намирането на 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 преди изпълнението
' Аргументи:
' macro : например "library/module.py$macro" или "module.py$macro"
' location: например "document", "share", "user" или стойност от ENUM
' Резултат:
' намерена 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 е масив
file_len = script.invoke(Array(systemFilePath), Array(), Array())
normalizedPath = script.invoke(Array(systemFilePath), Array(), Array())
По-долу ComputerName и GetFilelen викат съответствията си от Python чрез споменатата функция GetPythonScript. Обработката на изключения не е показана.
Option Explicit
Option Compatible ' Поддържат се свойства
Private scr As Object ' com.sun.star.script.provider.XScript
Private Property Get ComputerName As String
'''Име на компютъра'''
scr = GetPythonScript("Platform.py$computer_name", "document")
ComputerName = scr.invoke(Array(), Array(), Array())
End Property ' ComputerName
Private Function GetFilelen(systemFilePath As String) As Currency
'''Размер на файл в байтове'''
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 ' Макрос на Collabora Office
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" ' Макрос на Collabora Office
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 е идентичен с този за вградени скриптове. Имената на библиотеки съответстват на папки. Системните файлови пътища до потребителския профил в Collabora Office и споделените модули могат да се намерят както е показано в Получаване на информация за сесията. По-долу OSName, HelloWorld и NormalizePath извикват съответствията си на Python чрез споменатата функция GetPythonScript. Обработката на изключения не е показана.
Option Explicit
Option Compatible ' Поддържат се свойства
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()
'''Пример за споделен скрипт на Collabora Office Python'''
scr = GetPythonScript("HelloWorld.py$HelloWorldPython", Script.ISSHARED)
scr.invoke(Array(), Array(), Array(),)
End Sub ' HelloWorld
Public Function NormalizePath(systemFilePath As String) As String
'''Премахване на излишното '\..' от пътя'''
scr = GetPythonScript("Os/Path.py$normalyze", "user")
NormalizePath = scr.invoke(Array(systemFilePath), Array(), Array())
End Function ' NormalizePath
Вграденият Python на Collabora Office съдържа множество полезни стандартни библиотеки. Ето някои от предлаганите от тях възможности:
argparse синтактичен анализ на параметри, аргументи и подкоманди на командния ред
cmath математически функции за комплексни числа
csv четене и записване на CSV файлове
datetime истински типове за дата и час
json кодиране и декодиране на JSON
math математически функции
re операции с регулярни изрази
socket мрежов интерфейс на ниско ниво
sys зависими от системата параметри и функции
unittest и trace среда за компонентно тестване, проследяване изпълнението на Python
xml.etree.ElementTree ElementTree API за XML