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.