Если ли какой-нибудь элегантный способ, чтобы привязать выполнение функции привязать к кнопке на панели инструментов?
В помощи написано следующее, вроде можно запустить из кода Bacsic
https://help.libreoffice.org/6.4/km/text/sbasic/guide/basic_2_python.html?&DbPAR=BASIC&System=Unknown%20OS
Option Explicit
Public Function GetPythonScript(macro As String, _
Optional location As String) As com.sun.star.script.provider.Xscript
''' Grab Python script object before execution
' Arguments:
' macro : as "library/module.py$macro" or "module.py$macro"
' location: as "document", "share", "user" or ENUM(eration)
' Result:
' located com.sun.star.script.provider.XScript UNO service'''
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 compatible
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
Что должны означать параметры macro и location
Цитата: vcomp71 от 27 июля 2023, 10:47Представишь рабочий скрипт
Повежливее, пожалуйста. Так помощь не просят.
Элегантные способы запустить Python-макрос:1. Панель инструментов: Сервис - Настройка - Панели... - Макрокоманды - Выбрать
2. Горячая клавиша: Сервис - Настройка - Клавиши - Клавиатура - Категория - Макрокосы LibreOffice - Назначить
3. Кнопка в документе: Рисуем кнопку - ПКМ по кнопке - Свойства эл - События - [...] - Выбрать py-макрос
4. Поле (серая текстовая кнопка) в документе Writer: Ctrl+F2 - Функции - Выполнить макрос - Макрос...
5. Из Basic макроса: ищем на Форуме примеры по слову invoke
Конечно, все не так просто. Сам макрос должен быть заранее положен в libreoffice\share\Scripts\python
Это должен быть *.py файл в котором есть UDF-функции (они станут именами "макросов" в п. 1-5), нужные импорты и константы (аргументы для UDF). Если же аргументы нужно задавать интерактивно или брать из документа - то простые методы 1-4 обычно заменяются 5-м, с передачей аргументов методу invoke(). Сложные вызовы как в #0 могут быть нужны если макрос должен понимать контекст выполнения, изменять сам документ, лежать в другом месте итд.