Запуск 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папки еще не существуют, создайте их. В справочнике по расположению скриптов также объясняются другие контейнеры для макросов: макросы приложений и макросы, встроенные в документ.

Файл Python с именем hello_calc.py находится в папке Scripts/python в пользовательском интерфейсе LibreOffice.
Поместите модуль макросов в папку Scripts/python пользователя, чтобы LibreOffice мог отобразить его в разделе «Мои макросы».

Макросы документа хранятся внутри определенного файла и доступны только тогда, когда этот документ открыт. Для многоразового использования в личных целях обычно проще поддерживать папку «Мои макросы». Избегайте изменения папки макросов LibreOffice, доступной для всего приложения, поскольку для этого могут потребоваться права администратора.

2. Создайте и экспортируйте небольшую тестовую функцию.

Откройте текстовый редактор, создайте hello_calc.pyпапку, указанную выше, и добавьте:

def hello_calc(*args):
    doc = XSCRIPTCONTEXT.getDocument()
    sheet = doc.Sheets[0]
    sheet.getCellRangeByName("A1").setString("Hello from Python")

g_exportedScripts = (hello_calc,)

Функция получает документ, в данный момент связанный с вызовом макроса, выбирает его первый лист и записывает безобидную тестовую строку в ячейку A1. Последняя строка важна: без экспортированного кортежа функция может не отображаться как исполняемый макрос. Сохраните файл как обычный текст с расширением .push .py, а не как документ с форматированным текстом или файл с расширением .push .py.txt.

Макрос на Python с использованием XSCRIPTCONTEXT и выводом строки hello_calc в g_exportedScripts
Экспортируемая функция использует XSCRIPTCONTEXT для доступа к открытому документу и записи тестового значения в ячейку A1.

LibreOffice передает XSCRIPTCONTEXTэту переменную в модуль макросов. Она не передает ее автоматически модулям, импортируемым вашим кодом, поэтому первый тест должен быть самодостаточным. Если вы позже разделите многократно используемые функции на другие модули, следуйте рекомендациям LibreOffice по импорту модулей Python .

3. Откройте файл Calc и запустите экспортированную функцию.

  1. Откройте тестовую электронную таблицу в Calc. При разработке используйте копию или пустую рабочую книгу.
  2. Выберите Инструменты > Макросы > Запустить макрос .
  3. В списке библиотек разверните раздел «Мои макросы» , выберите модуль Python и выберите hello_calcодин из названий макросов.
  4. Нажмите «Выполнить» .

Ту же функцию можно запустить из расширения APSO, которое LibreOffice рекомендует для выполнения скриптов Python в процессе работы и которое также предоставляет оболочку Python. Для базового сценария запуска макроса, описанного здесь, APSO не требуется.

В меню выбора макросов LibreOffice в разделе «Мои макросы» выделен параметр hello_calc, а кнопка «Выполнить» видна.
Выберите экспортированную функцию hello_calc в разделе «Мои макросы», затем запустите её из Calc.
В LibreOffice Calc отображается сообщение "Hello from Python" в выбранной ячейке A1.
Отображаемое значение в ячейке 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. Если ячейка остается неизменной, убедитесь, что нужная рабочая книга была активна и что макрос был выбран из «Мои макросы». После успешного прохождения этого минимального теста замените тестовую запись реальным вычислением и протестируйте его на копии рабочей книги, прежде чем использовать его с важными данными.

Оставить комментарий

Запуск Python в Calc с помощью системы макросов LibreOffice

Запуск Python в Calc с помощью системы макросов LibreOffice

Создайте функцию Python, доступную в Calc, запустите ее на открытой электронной таблице и устраняйте неполадки, связанные с отсутствующими макросами или импортами, не смешивая LibreOffice и системный Python.

Защитите выделенный текст, созданный пользователем, паролем раздела.

Защитите выделенный текст, созданный пользователем, паролем раздела.

Заблокируйте определенный фрагмент текста от обычного редактирования, сохранив при этом доступность остальной части документа Writer, и узнайте, когда шифрование файлов является лучшим вариантом.

Сделайте текст в электронных таблицах читаемым в темном режиме LibreOffice Calc.

Сделайте текст в электронных таблицах читаемым в темном режиме LibreOffice Calc.

Исправьте трудноразличимый текст в электронных таблицах, проверив тему оформления, цвет шрифта ячеек, заливку и условное форматирование в Calc.

В LibreOffice Calc формулы отображаются как текст? Восстановите результаты.

В LibreOffice Calc формулы отображаются как текст? Восстановите результаты.

Узнайте, почему Calc отображает текст формул вместо вычисленных значений, и исправьте режим отображения, ячейки с текстовым форматированием, апострофы или устаревшие результаты.

Объединение писем от автора с логотипом и полями электронной таблицы.

Объединение писем от автора с логотипом и полями электронной таблицы.

Создайте многоразовый шаблон для слияния почты в Writer, используя данные получателей из Calc и встроенное изображение, затем просмотрите и сохраните персонализированные письма.

Ограничение необязательной диагностики и обновление данных в LibreOffice

Ограничение необязательной диагностики и обновление данных в LibreOffice

Отключите необязательную статистику обновлений и запросы на отчеты о сбоях в LibreOffice, затем проверьте, что именно включают эти настройки и как их проверить.

Используйте регулярные выражения в LibreOffice Writer для пакетного редактирования текста.

Используйте регулярные выражения в LibreOffice Writer для пакетного редактирования текста.

Очистка пробелов, поиск структурированного текста и перестановка имен с помощью регулярных выражений Writer, которые можно предварительно просмотреть перед заменой.

В программе Writer настройте написание абзацев на арабском и иврите справа налево.

В программе Writer настройте написание абзацев на арабском и иврите справа налево.

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

Восстановите шрифты Calibri и Arial в LibreOffice без лишних догадок.

Восстановите шрифты Calibri и Arial в LibreOffice без лишних догадок.

Установите шрифты Linux, совместимые с метрической системой, или используйте резервные шрифты LibreOffice, учитывая при этом различия в лицензировании шрифтов Microsoft и особенностях компоновки.

Создавайте заполняемые PDF-файлы из форм в LibreOffice Writer.

Создавайте заполняемые PDF-файлы из форм в LibreOffice Writer.

Добавьте в Writer функциональные текстовые поля, флажки и выпадающие списки, а затем экспортируйте PDF-файл, который получатели смогут заполнить и сохранить.