Добавление функций модуля Питон на лист в LibreOffice Calc

Автор juceser, 31 марта 2025, 11:41

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

juceser

Добрый день,

Написан модуль Питон. Прилагается.
Необходимо в Calc кнопки для вывода результатов типа -

df.info()


Первые записи

df.head()

   
Последние записи

df.tail()

   
Вывод с форматированием

df.style.background_gradient(cmap='Blues', axis=0).format("{:.3f}")

plt.show()

Пока не понимаю как это сделать.

Сам Питон и редактор Visual Calc установлены.
Установлено расширение APSO 1.4.4

Создание модуля получается через встроившуюся нову строку в меню Сервис - Макросы - Organize Python Script.

Там этот модуль создал и редактировал через Edit - Module create и далее Module - Edit.

При создании на рабочем столе кнопки при подвязывании ро действию на нее макроса модуля с макросами Питон не видно.

Также не обратиться и к функциям Питон в модуле через =Формула, тк Calc не понимает этих функций.
Как присвоить выполнение функций модуля Питона к листу Calc через =Формула или кнопок ?

Спасибо.

 






mikekaganski

С уважением,
Михаил Каганский

juceser

Прошу извинить, программа называется Visual Studio Code.
Не имеет отношения к MS Visual Studio.

mikekaganski

В Вашем архиве два файла: Работа5.ods и Module1.py. Файл .py содержит код. Но этот файл не имеет отношения к LibreOffice, потому что макросы документа содержатся только внутри самого документа, а не лежат рядом. Ну и да, внутри Работа5.ods есть свой Module1.py в Scripts/python, но он практически пустой.

Если Вы будете работать с внутренним файлом .py, то Вы получите возможность привязывать соответствующие функции к событиям (в т.ч. кнопок). Но использовать этот код как функции таблиц напрямую нельзя. Либо Вы сделаете функции Basic, которые можно использовать как функции таблиц (и из них будете вызывать код Python), либо Вы оформите Ваш код как расширение. См. например https://ask.libreoffice.org/t/user-defined-function-in-calc-using-python/105612 и https://ask.libreoffice.org/t/unable-to-run-the-simpliest-python-macro-for-calc-udf/95916
С уважением,
Михаил Каганский

juceser

Я заметил что внутренний модуль пустой и уже скопировал туда код.

Я видел ссылки где показано что можно создать на листе кнопку и навесить на нее функцию из модуля Питона.
Но у меня это не работает, поскольку в перечне макросов нет модуля Питона по выбору ...

mikekaganski

Цитата: juceser от 31 марта 2025, 12:46Я заметил что внутренний модуль пустой и уже скопировал туда код.
...
Но у меня это не работает, поскольку в перечне макросов нет модуля Питона по выбору

В том файле, который приложен в начальном посте, ситуация до Ваших исправлений. Нет файла с исправлениями - нет возможности посмотреть и посоветовать.
С уважением,
Михаил Каганский

juceser


mikekaganski

Цитата: juceser от 31 марта 2025, 11:41Установлено расширение APSO 1.4.4
И Вы, конечно, использовали его для управления скриптами документа?
С уважением,
Михаил Каганский

juceser

Добавляю скриншоты чтобы пояснить как встроен APSO, как открываю модуль Питона. Добавляю скрин на примере кнопки что модуль Питона не виден для присвоения кнопке.
Добавляю файл с полностью внесенным кодом.
Добавляю пошаговую инструкцию что надо сделать в рамках работы.

juceser

Все скриншоты не вошли.

mikekaganski

Когда у Вас в APSO выделен Module1, попробуйте двойной щелчок по нему.
С уважением,
Михаил Каганский

juceser

Сколько не щелкай, ничего не появляется по Module1, а если выбирать Standard - Module1, то видны функции VBA.

А Вы можете в файле по кнопке привязать например -

with plt.style.context('ggplot'):
    plt.figure(figsize=(8, 4))
    plt.suptitle('Сглаженный график двух функций')
    plt.plot(X_, Y_, label=r'$y(x)$')
    plt.plot(X_, Z_, label=r'$z(x)$')
    plt.xlabel(r'$x$', fontsize=12)
    plt.ylabel(r'$f(x)$', fontsize=12)
    plt.legend(loc='best', fontsize=10);
    plt.show()

?

Интересно было бы посмотреть как это вообще привязывается, это же не процедура, не функция, а набор кода.

mikekaganski

Цитата: juceser от 31 марта 2025, 15:31Сколько не щелкай, ничего не появляется по Module1

Неправда, появляется сообщение об ошибке индентации - потому что Ваш код неправильно отформатирован (в Python индентация важна синтаксически).

С уважением,
Михаил Каганский

juceser

Появляется где? Я сказал что не появляется при присвоении кнопке.
А в редактировании появляется конечно.
Я и не говорил что не появляется.

Как код то к кнопке подвязать?

juceser

Я уже отформатировал эту ошибку, здесь важно чтобы с 1 позиции код шел почему-то.