Главная
» PC Советы
»
Запуск Python в Calc с помощью системы макросов LibreOffice
Запуск Python в Calc с помощью системы макросов LibreOffice
Если скрипт Python запускается из терминала, но не может прочитать или изменить открытую в Calc электронную таблицу, вероятно, он выполняется вне LibreOffice. Макрос Python для Calc должен работать внутри процесса LibreOffice, где LibreOffice предоставляет контекст активного документа. Сохраните скрипт как модуль в папке пользовательских скриптов Python, экспортируйте его функцию с помощью ` g_exportedScripts.` и запустите его из диалогового окна макросов Calc.
Это самый простой способ автоматизации небольшого процесса, связанного с открытой рабочей книгой. В текущей справке LibreOffice по скриптам Python описаны как макросы, создаваемые непосредственно в процессе работы, так и отдельно связанные скрипты Python; в приведенных ниже шагах используется метод, использующий макросы, создаваемые непосредственно в процессе работы.
Почему обычный скрипт на Python не видит открытую электронную таблицу?
LibreOffice предоставляет доступ к текущему документу для запущенного макроса Python через глобальную переменную XSCRIPTCONTEXT. Скрипт, запущенный с помощью обычной pythonкоманды, является отдельным процессом, поэтому глобальная переменная недоступна автоматически. Он по-прежнему может взаимодействовать с LibreOffice, но для этого требуется установить UNO-соединение с уже запущенным процессом Office. Для первого макроса запустите функцию внутри LibreOffice.
Макрос Python — это функция в .pyмодуле. Кортеж модуля g_exportedScriptsуказывает LibreOffice, какие функции следует отображать в списке макросов. Эти подробности описаны в справочнике по программированию на Python в LibreOffice .
Как добавить макрос Python в Calc?
1. Найдите папку с пользовательскими скриптами Python.
Используйте личное расположение «Мои макросы», если вам нужен скрипт, который можно запускать из любого открытого документа LibreOffice для вашей учетной записи пользователя. LibreOffice описывает эту папку так же, как %APPDATA%\LibreOffice\4\user\Scripts\pythonв Windows, $HOME/.config/libreoffice/4/user/Scripts/pythonLinux и macOS. Если Scripts/pythonпапки еще не существуют, создайте их. В справочнике по расположению скриптов также объясняются другие контейнеры для макросов: макросы приложений и макросы, встроенные в документ.
Поместите модуль макросов в папку Scripts/python пользователя, чтобы LibreOffice мог отобразить его в разделе «Мои макросы».
Макросы документа хранятся внутри определенного файла и доступны только тогда, когда этот документ открыт. Для многоразового использования в личных целях обычно проще поддерживать папку «Мои макросы». Избегайте изменения папки макросов LibreOffice, доступной для всего приложения, поскольку для этого могут потребоваться права администратора.
2. Создайте и экспортируйте небольшую тестовую функцию.
Откройте текстовый редактор, создайте hello_calc.pyпапку, указанную выше, и добавьте:
Функция получает документ, в данный момент связанный с вызовом макроса, выбирает его первый лист и записывает безобидную тестовую строку в ячейку A1. Последняя строка важна: без экспортированного кортежа функция может не отображаться как исполняемый макрос. Сохраните файл как обычный текст с расширением .push .py, а не как документ с форматированным текстом или файл с расширением .push .py.txt.
Экспортируемая функция использует XSCRIPTCONTEXT для доступа к открытому документу и записи тестового значения в ячейку A1.
LibreOffice передает XSCRIPTCONTEXTэту переменную в модуль макросов. Она не передает ее автоматически модулям, импортируемым вашим кодом, поэтому первый тест должен быть самодостаточным. Если вы позже разделите многократно используемые функции на другие модули, следуйте рекомендациям LibreOffice по импорту модулей Python .
3. Откройте файл Calc и запустите экспортированную функцию.
Откройте тестовую электронную таблицу в Calc. При разработке используйте копию или пустую рабочую книгу.
В списке библиотек разверните раздел «Мои макросы» , выберите модуль Python и выберите hello_calcодин из названий макросов.
Нажмите «Выполнить» .
Ту же функцию можно запустить из расширения APSO, которое LibreOffice рекомендует для выполнения скриптов Python в процессе работы и которое также предоставляет оболочку Python. Для базового сценария запуска макроса, описанного здесь, APSO не требуется.
Выберите экспортированную функцию hello_calc в разделе «Мои макросы», затем запустите её из Calc.Отображаемое значение в ячейке A1 подтверждает, что тестовый макрос достиг документа Calc и изменил ячейку.
Что делать, если макрос отсутствует или, кажется, ничего не делает?
Выполняйте эти проверки по порядку, а не изменяйте общие параметры безопасности:
Модуль не отображается в списке: убедитесь, что файл находится в точном Scripts/pythonпути пользователя, имеет .pyсуффикс и содержит правильно написанный g_exportedScriptsкортеж. Снова откройте диалоговое окно макросов; если LibreOffice по-прежнему не отображает недавно добавленный файл, закройте и перезапустите LibreOffice, затем проверьте еще раз.
Отсутствует имя макроса: убедитесь, что экспортируемый кортеж включает объект функции, например (hello_calc,). Запятая делает этот кортеж Python состоящим из одного элемента.
В терминале ничего не отображается: вывод print()недоступен при запуске макросов Python из стандартного диалогового окна макросов. Приведенный выше тест записывает результат в ячейку A1, поэтому он виден на листе. Для интерактивной отладки вывод отображается в оболочке APSO.
Ошибка импорта: установка пакета для вашего системного Python не гарантирует, что среда выполнения Python в LibreOffice сможет его импортировать. Пакет должен быть доступен в пути Python среды выполнения; в официальных рекомендациях по импорту описаны пути для пользовательских и разделяемых модулей. Начните с тестирования макроса без дополнительных импортов.
Появляется предупреждение системы безопасности: запускайте только те скрипты, которые вы написали или проверили и которым доверяете. Защита макросов предназначена для ограничения небезопасного кода; не снижайте глобальный уровень безопасности только для того, чтобы запустить макрос в незнакомом документе. Для разъяснения предупреждений обратитесь к параметрам безопасности макросов LibreOffice.
Используйте подход с внешним процессом только в том случае, если ваша автоматизация должна запускаться с терминала, планировщика или другого приложения. LibreOffice требует запуска офисного процесса через канал или сокет и подключения через свой UNO-мост; обычный автономный скрипт не эквивалентен макросу Calc, запущенному внутри процесса.
Как можно убедиться, что макрос сработал?
После нажатия кнопки «Выполнить» посмотрите на ячейку A1 на первом листе. В ней должно быть написано «Hello from Python» , и в строке формул должен отображаться тот же текст при выделении ячейки A1. Если ячейка остается неизменной, убедитесь, что нужная рабочая книга была активна и что макрос был выбран из «Мои макросы». После успешного прохождения этого минимального теста замените тестовую запись реальным вычислением и протестируйте его на копии рабочей книги, прежде чем использовать его с важными данными.