LibreOffice Writer Python

Автор Ципихович Эндрю, 2 января 2024, 09:22

0 Пользователи и 1 гость просматривают эту тему.

Ципихович Эндрю

здравствуйте, насколько можно доверять джипити?, она мне выдала:
LibreOffice предоставляет поддержку macros для работы с различными языками программирования, в том числе Python. Вам потребуется установить и настроить PyOD для работы с LibreOffice.
После установки PyOD, вы можете использовать Python для написания скриптов. Вот пример скрипта на Python:
.............................
Для выполнения скрипта, вам нужно:
Установить и запустить LibreOffice.
Запустить Macro. - этот пункт НЕ ПОНЯТЕН, где это?
Выбрать Python из списка доступных языков программирования.
Ввести имя скрипта.
Запустить скрипт. - а отладка как в макросе по нажатию клавиши Эф8 доступна
Моя ОС - вин10х64
если всё совсем НЕ так можно пояснить как это делается?
спасибо

Ципихович Эндрю

другая сеть говорит:
Чтобы выполнить скрипт написанный на Python в LibreOffice, необходимо выполнить следующие действия:
Сохранить скрипт в виде файла с расширением .py.
Открыть документ LibreOffice, в котором вы хотите запустить скрипт.
Выберите Инструменты > Плагины > Управление плагинами.
Выберите Python Script Provider и нажмите Включить.
Выберите ОК.
После выполнения этих действий в меню Инструменты появится пункт Python. В этом пункте вы сможете найти список всех скриптов Python, которые доступны для выполнения в LibreOffice.
Чтобы запустить скрипт, выберите его в списке и нажмите Выполнить.
но у меня нет в меню Инструменты, если предположить что это может быть Сервис, в таком случае там нет Плагинов, пока в поиске внятного пояснения

Ципихович Эндрю

если открыть LibreOffice Writer а в нём
Сервис-Макросы-Управление макросами-Python - бинго!!
и что там тёмный лес
можно простецкие выбрать аля Привет мир и выполнить
а как создать свой, или редактировать имеющийся? спасибо

economist

#3
Вы явно умеете и без ChatGPT искать информацию, но слишком спешите с выводами. С Либрой так не прокатит - тут нужно читать книжки Питоньяка, пробежать документацию, потратить на это не один месяц и вот тогда наступит "плато продуктивности". А до этом момента будет только скучная учеба.

Этот путь (макрокодинг в LO до уровня Middle) труден настолько, что пройти его удается, на мой взгляд, 10% айтишников (0,1% обычных людей). Так что терпение...

LO использует очень сложные концепции программирования, все эти Model-View-Controller итд.

Python - это ловушка "легкости", ее тут нет. В LO он необычный, урезанный (лечится), все его взаимодействие с самим LO основано на библиотеке uno, которая "отображает" тьму API-методов, которые за 25-летнюю историю софта стали невыносимо длинными.

Но в то же время Python в своей не-LO функциональности - по прежнему прост и эффективен. Я нашел баланс в работе с файлами LO "снаружи", с помощью Python и Pandas. И только там где нельзя иначе - использую uno


По вопросу - есть только одно обязательное к использованию расширение - APSO. Оно работает на любых версиях либры, на любых ОСях и архитектурах. Оно дает пошаговую отладку.  Править py-файлы можно в чем угодно внешнем, сам LO этого не умеет. 
Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...

Ципихович Эндрю

Цитата: economist от  3 января 2024, 12:00Python - это ловушка "легкости", ее тут нет. В LO он необычный, урезанный
это я уже прошёл и освоился в Notepad++

Ципихович Эндрю

ладно, отправная точка есть:
Самое первое, что нужно сделать, если вы захотите использовать Python для написания своих макросов (помимо знания самого ython'a) - это установить расширение APSO
как это сделать придётся записать здесь, может кому ещё понадобится (в том числе и мне-часто забываю)
Сервис-Расширения, установленного там по умолчанию, поэтому качать файл apso.oxt пришлось самому, там имеется ссылка "Расширения в интернете", положил в каталог: C:\Program Files\LibreOffice\share\extensions
где share\extensions=общий ресурс\расширения
устанавливал нажатием кнопки "Добавить", устанавливал этот файл, принял лицензионное соглашение, после чего LibreOffice перезагрузилось и расширение установлено........
а далее нужно читать
https://antilibreoffice.blogspot.com/2019/01/python-libreoffice.html

economist

Освоиться с Python в LO - это значит научиться строить GUI-приложения в LO, писать и построчно отлаживать макросы с uno в нормальном IDE (VisualStudio Code, Codium, PyCharm, Thonny, JupyterLab) c автодополнением uno-api-методами LO, c авто-докой итд. Не знаю сколько людей это умеют, но известных готовых приложений по сути нет не только на русском, но и вообще в мире (единицы специфических, взлетевших на индивидуальном упорстве).

Создайте в Notepad++ файл *.py в кодировке utf-8 в той же папке что и демо-макросы (HelloWorld.py) и этот макрос можно будет выполнить из LO. Чтобы он что-то менял в самом LO - нужно задействовать UNO. Исключение - UDF-функции листа Calc, они могут быть на чистом Python, но д.б. обернуты в StarBasic c invoke()     
Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...

Ципихович Эндрю

economist спасибо за ответ
ок демо-макросы (HelloWorld.py) находится в каталоге: C:\Program Files\LibreOffice\share\Scripts\python
создал там файл 1111.py - текст для пробы поместил примерно тот же, что и в HelloWorld.py и стал его запускать - Сервис-Макросы-Управление макросами-Python раскрыл Макросы приложения, там есть папка 1111, но она не раскрывается по аналогии как раскрывается папка HelloWorld и уже в ней находится скрипт HelloWorld
я что-то упустил или не так сделал?


economist

py-файл - это "модуль" (вид как у папки), а макросы в нем - это UDF-функции, которые задаются с помощью ключевого слова def fun_name()
 
Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...

Ципихович Эндрю

Цитата: economist от  3 января 2024, 14:50py-файл - это "модуль" (вид как у папки), а макросы в нем - это UDF-функции, которые задаются с помощью ключевого слова def fun_name()
ну ок, пытаюсь сделать по аналогии, в файле 1111.py указано ключевое слово:
def Help():
    ........ текст скрипта идентичен тексту с файла HelloWorld.py
но папка 1111 так и не раскрывается - то есть нет доступа к запуску скрипта.........

economist

Наверняка пропустили

g_exportedScripts = ...
Лучше покажите код или py-файл.
Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...

Ципихович Эндрю

Цитата: economist от  3 января 2024, 18:41g_exportedScripts = ...
так его там нет, мой код файла HelloWorld.py - имеется ввиду, тот, что был установлен вместе с установкой либры
# HelloWorld python script for the scripting framework

#
# This file is part of the LibreOffice project.
#
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
#
# This file incorporates work covered by the following license notice:
#
#   Licensed to the Apache Software Foundation (ASF) under one or more
#   contributor license agreements. See the NOTICE file distributed
#   with this work for additional information regarding copyright
#   ownership. The ASF licenses this file to you under the Apache
#   License, Version 2.0 (the "License"); you may not use this file
#   except in compliance with the License. You may obtain a copy of
#   the License at http://www.apache.org/licenses/LICENSE-2.0 .
#

def HelloWorldPython():
    """Prints the string 'Hello World (in Python)' into the current document.
    """

    # Get the doc from the scripting context which is made available to all
    # scripts.
    desktop = XSCRIPTCONTEXT.getDesktop()
    model = desktop.getCurrentComponent()

    # Check whether there's already an opened document.
    # Otherwise, create a new one
    if not hasattr(model, "Text"):
        model = desktop.loadComponentFromURL(
            "private:factory/swriter", "_blank", 0, ())

    # get the XText interface
    text = model.Text

    # create an XTextRange at the end of the document
    tRange = text.End

    # and set the string
    tRange.String = "Hello World (in Python)"

    return None

# vim: set shiftwidth=4 softtabstop=4 expandtab:
а файл 1111.py ничем не отличается от вышеуказанного только изменил
def HelloWorldPython():
на
def Help():
и всё, так сказать для пробы

bigor

Поддержать наш форум можно здесь

Ципихович Эндрю

Цитата: bigor от  3 января 2024, 19:08а в питоне help не зарезервирован?
ну ок, изменил на def Helpik(): - не помогло
2
так а почему же нет у меня в файле
HelloWorld.py
g_exportedScripts = ...
???

bigor

У меня отработал нормально
Поддержать наш форум можно здесь