TOP

Создаем Python функцию для LibreOffice Calc

Описание

LibreOffice Calc дает пользователям возможность создавать собственные функции, используя встроенный язык программирования StarBasic. Данный язык очень похож на VBA однако имеет ограниченный функционал, поскольку редко используется.

Современные языки программирования, такие как Python, дают гораздо больше возможностей и имеют более широкий спектр дополнительных библиотек на все случаи жизни.

Итак, давайте узнаем, как можно создавать собственную функцию, используя такой популярный на сегодняшний день язык программирования как Python.


Пакет офисных программ LibreOffice позволяет создавать собственные функции на таких сторонних языках программирования как Python, JavaScript, C++, Java.

StarBASIC Код для функции Greeting()

Сначала давайте вспомним, как можно написать собственное приложение, используя стандартные инструменты LibreOffice Calc для написания макросов и функций.

Ниже приведен код для функции Greeting , которая возвращает фразу "Hello " + входной параметр в выбранную ячейку используя встроенный язык программирования StarBasic.

Чтобы добавить свою функцию, откройте меню Tools - Macros - Edit Macros... , выберите Module1 и скопируйте следующий текст в модуль:

Function Greeting(sName As String) As String
    Greeting = "Hello " & sName & "!"
End Function

Затем закройте Macro Editor, вернитесь в LibreOffice Calc и введите имя этой функции в любую ячейку и укажите входной параметр.

Python Folder

Перед тем, как написать функцию на Python, нам нужно сначала создать *.py файл (myPyScripts.py) в следующей папке:

%APPDATA%\LibreOffice\4\user\scripts\python

Если папки scripts да python отсутствуют, то вам нужно создать их вручную.

Python Код для функции Greeting()

Ниже приведен Python скрипт для функции Greeting , прописывающий фразу "Python say 'Hello' to " + входной параметр в выбранную ячейку в программе LibreOffice Calc.

Чтобы добавить этот скрипт, откройте файл myPyScripts.py с помощью Notepad++ (или Windows Notepad) и скопируйте туда приведенный ниже текст:

def Greeting(sName):
    return "Python say 'Hello' to " + sName + "!"

Затем, закройте Notepad++ и вернитесь к LibreOffice Calc.

Мы не можем сразу запустить эту функцию, поскольку интерфейс LO Calc не имеет прямого соединения с функциями Python.

Чтобы решить эту проблему, нам необходимо создать промежуточную функцию на StarBasic:

Function Greeting(sName As String) As String
    pyFile = "myPyScripts.py"
	pyFunc = "Greeting"
	pyParams = Array(sName)
	
	ScriptProvider = CreateUNOService("com.sun.star.script.provider.MasterScriptProviderFactory").createScriptProvider("")
	pyScript = ScriptProvider.getScript("vnd.sun.star.script:" & pyFile & "$" & pyFunc & "?language=Python&location=user")
    Greeting = pyScript.invoke(pyParams, Array(), Array())
End Function

Добавьте эту промежуточную функцию в редактор макросов StarBasic (меню Tools - Macros - Edit Macros...).

Теперь вызовите StarBasic функцию Greeting() , которая, в свою очередь, вызывает Python версию функции Greeting() . Просто введите Greeting() в любую ячейку и выберите любое значение в качестве параметра.

Использование расширения

Вы также можете воспользоваться готовым набором функций да утилит написанных на Python установив расширение YLC Utilities .

После этого данный функционал будет доступен во всех файлах, которые будут открыты в LibreOffice Calc.