Python для libreoffice windows

Using Python on Windows

Please view the wiki usage guidelines
before contributing.

Introduction to Python on Apache OpenOffice

You need Apache OpenOffice installed with its Python-UNO bridge.

If you do not customize the installation, Python-UNO bridge is installed as default on recent version. Install Apache OpenOffice. If you are installing it for the first time, then be sure to do a Custom install and install the Python-UNO bridge under Optional Components.

If you already have Apache OpenOffice installed, then go into your Apache OpenOffice folder and run Setup. Pick Modify, click Next. Under Optional Components, be sure to install the Python-UNO bridge.

In order to use the python-uno bridge, the python code must run from the Python that comes with Apache OpenOffice. There is apparently some issue with the standard C library. The Python 2.2.2 that comes with Apache OpenOffice has been compiled using the StdCLib that Apache OpenOffice uses rather than the one that python would normally be compiled with.

If you want an interactive Python command shell right now, go into your Apache OpenOffice\program subfolder and run the batch file named python.bat. You get a python shell. You can then use the statement Code:

You can now connect to any Apache OpenOffice that will accept a remote UNO connection.

I suppose that leads us to the next issue… Configuring Apache OpenOffice to listen for UNO connections.

It is also possible to write a component in Python and install it into the office. It is my understanding (but I have not tried yet) that when you do this you do NOT need to configure Apache OpenOffice to listen for uno connections.

Therefore, the two ways to use Python are.

  • Outside of Apache OpenOffice — with a remote uno connection.
  • Inside of Apache OpenOffice — as an installed component.

Approach 1 is the quick and easy way to write and debug code.

Approach 2 is a great way to _deliver_ finished code to a user.

See this for more information about the Python-UNO bridge in Apache OpenOffice. https://www.openoffice.org/udk/python/python-bridge.html

Configuring Apache OpenOffice to listen for UNO connections

If you write programs in Java or Python and run them external to Apache OpenOffice, then you need to configure Apache OpenOffice to listen for a uno connection.

It is possible to run your program on computer A, and connect to computer B which is running Apache OpenOffice, and have your program at A manipulate the Apache OpenOffice running on B. In fact, A and B can even be running different operating systems. I have done this personally using Java. With Python, I have only run my program on the same computer as Apache OpenOffice — but it should work the same way.

In the past, it was necessary to either

  • launch Apache OpenOffice with a special parameter to make it listen
  • hand edit one of Apache OpenOffice’s configuration files

You can hand edit an XML file for version 1.0 of OpenOffice.org, or an XCU file for version 1.1 of OpenOffice.org.

My UnoConnectionListener document can be obtained from OpenOffice.org Macros on Sourceforge.

Just download the document. Open it. Configure text boxes to taste. (Read the text of the above post if necessary.) Then click a button. Quit Apache OpenOffice. Re-launch Apache OpenOffice and it should henceforth (until you reconfigure it again) always listen for Uno connections. You can configure it to listen to connections only from localhost, or from any other computer.

Читайте также:  Logitech c615 windows 10 не работает

Автоматический запуск Libre/OpenOffice в режиме прослушивания из Python

Libre/Open Office предоставляют возможность работы с офисом через UNO API. Для того, чтобы можно было обратиться к офису необходимо запустить его в режиме прослушивания.

Данный подход вполне логичен и понятен с точки зрения разработчиков офиса, но несет ряд неудобств. В частности, нужно самостоятельно запускать Libre/Open Office в режиме прослушивания. Лично мне не понятно, почему разработчики поленились и не предоставили функции запуска офиса. Ну да ладно, было бы все сделано, не нужны были бы программисты. Посему будем решать задачу своими силами.

Самый простой способ решить данную задачу — поместить строку запуска офиса в скриптовый файл. В нем запускать сперва офис, а потом свое приложение. Но что если это, например, библиотека и нет возможности обратиться к ней через скриптовый файл. К тому же нужно не просто дождаться запуска офиса, но еще и дождаться пока он будет в режиме прослушивания. В общем этот подход годится лишь для тестовых задач, не более.
Я остановился на следующей реализации:
1. Форк процесса, который запускает офис в режиме прослушивания.
2. С определенной периодичностью пытаться обращаться к офису, пока попытка не окажется успешной.
3. Если через определенное время попытка подключения к офису не будет успешной, то генерировать исключение com.sun.star.connection.NoConnectException.

Данный пример будет пытаться запустить Libre/Open Office с периодичностью 0.1 секунда на протяжении 30 секунд.
В качестве теста на наличие запущенного в режиме прослушивания офиса используется функция init_office(). Вместо нее может быть использована любая другая из Вашей библиотеки.

Ранее, в статье «PyOOCalc — Библиотека для генерации отчетов, счетов Libre/Open Office Calc на Python», я описал как проще работать с Libre/OpenOffice для определенной категории задач. Но библиотека PyOOCalc на имела возможности автоматического запуска офиса в режиме прослушивания, и вышеприведенный код можно переписать следующим образом.
Вместо функции init_office() можно написать:

Это так же может быть любая другая библиотека. Необходимо вызывать метод, который будет пытаться подключиться к Libre/Open Office.

Так же я добавил возможность автоматического запуска офиса в библиотеку PyOOCalc.
Пример использования:

PyOOCalc — Библиотека для генерации отчетов, счетов Libre/Open Office Calc на Python

Порой возникают задачи, когда необходимо формировать отчеты и прочие документы. В моей практике данная задача возникала не раз.

Проекты, в которых возникала данная задача:

  • складской учет
  • учет объектов недвижимости
  • документооборот

Первый мой опыт был с MS Office, но позже возникла необходимость в разработке кросс-платформенных решений, посему выбор пал на OpenOffice. Т.к. в большинстве случаев нужно было формировать таблицы, то был выбран OpenOffice Calc.

Сперва я решал подобные задачи на С++, разработал библиотеку, которую использовал в разных проектах. Все было хорошо, но чуть ли не каждая минорная версия офиса требовала пересборки библиотеки, а не редко и правки кода. Под каждый дистрибутив и его новую версию приходилось в лучшем случае пересобирать пакеты, править пути с учетом версии офиса, замену OpenOffice на LibreOffice и т.п. А это очень утомительно и отнимает время.

Все эти трудности привели к поиску более простых решений. Я посмотрел список поддерживаемых языков и увидел Python, что меня очень заинтересовало, т.к. уже довольно активно его начал использовать. Нашел простенький пример, попробовал — работает. Проверил на разных версиях и — о, чудо! Без малейших правок один и тот же скрипт работает на разных дистрибутивах и версиях офиса.

Те, кто уже сталкивался с подобными задачами — знает, что ковыряние API дело не благодарное. Посему первым делом я принялся искать уже готовые библиотеки. Наиболее интересным вариантом для меня оказался PyOO. Данная библиотека содержит довольно обширный функционал и проста в использовании. В ней реализованы функции от создания/сохранения документов до объединения ячеек и создания диаграмм. Но… Ни одна из найденных мной библиотек не обеспечивала необходимый мне функционал. Много вкусного, но лишнего для меня.

Вернемся к изначальной задаче: необходимо формировать отчеты и счета. Как уже упоминалось выше, шаблоны проще всего создавать в офисном пакете. Ведь их смогут создавать и конечные пользователи без участия разработчиков.

Читайте также:  Radmin windows 10 не весь экран

С созданием шаблонов все ясно, но как знать, куда необходимо вставлять данные. Можно использовать индексы (колонка, строка) или имя (например: «E5»).

А что если для одного отчета необходимо создать несколько шаблонов для генерации документа. Например один шаблон для книжного расположения, второй для альбомного. Но нет никакой гарантии, что и в одном и в другом шаблоне одно и то же поле (данные) необходимо вставить по одному и тому же имени (или индексу) ячейки. А это означает, что нужно хранить данные о расположении полей в шаблоне. Но есть более простое универсальное решение. Данную задачу можно реализовать через NamedRange.

NamedRange — это имя ячейки или области на листе. При этом NamedRange уникальный в рамкой одной книги (документа).

Еще одна необходимая функция для решения данной задачи — вставка строк. При этом вставка должна быть с учетом сохранения форматирования строки (шрифт, объединенные ячейки и т.п.).

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

  • Открытие и создание документов
  • Сохранение документов разных форматах (поддерживаемых Libre/Open Office)
  • Вставка/удаление листов
  • Вставка строк с копированием форматирования
  • Вставка/получения значения имен (NamedRange)
  • Вставка/получения значения ячеек по имени (индексу)

Пример использования:

Уверен, что данная задача возникала не только у меня. Рад, если кому-то пригодится.

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

Макросы/Руководство по проектированию Python

Содержание

Введение

Эта страница предназначена для разработчиков макросов на Python, желающих разрабатывать их для LibreOffice. Начинающие разработчики макросов на Python могут воспользоваться рекомендациями на этой странице. Обзор Python в LibreOffice доступен на странице Python Programmer’s Guide.

Эта страница предполагает, что вы знакомы с программированием на Python, а также, что вы знакомы с LibreOffice. Она содержит некоторые примеры кода на Python, а также описывает некоторые полезные расширения LibreOffice.

Документация

  • Документация на сайте Python.org конечно же
  • Learn Python the hard way не так сложно, как выглядит
  • Документация по Python на русском языке
  • Python — Apache OpenOffice
  • Real Python Tutorials, Python programming на Wikibooks

online courses or guides

Электронная библиография

  • OpenOffice.org 3.1 Developer’s Guide, online version, and examples, 2009
  • StarOffice (Basic) Programmer’s Tutorial, May 2000
  • Java LibreOffice Programming, Andrew Davison, March 2017

Унифицированный язык моделирования (UML)

Доступны некоторые утилиты для управления UML. Это произвольный список, в котором основное внимание уделяется бесплатному взаимодействию с приложениями с открытым исходным кодом:

  • ArgoUML : ArgoUML работает на любых Java платформах и доступна на десяти языках (Американский английский, Британский английский, Французский, Немецкий, Итальянский, Португальский, Испанский, Русский, Норвежский Bokmål и Китайский).
  • StarUML : StarUML доступна для macOS 10.6+, Windows XP+ и Ubuntu (64 или 32-bit). StarUML обладает богатым списком возможностей и доступна только на английском языке.
  • Umbrello : Umbrello распространяется с дистрибутивами GNU/Linux, доступна для Windows (64 или 32-bit) и macOS.

Более обширный список утилит (Unified Modeling Language (UML) доступен в Wikipedia.

StarOffice Programmer’s Tutorial подробный документ LibreOffice со справкой по диаграммам UML.

Software Design Patterns описан в Wikipedia, иногда сопровождается примерами Python.

Преамбула

Разработка макросов в LibreOffice осуществляется в интегрированной среде разработки (IDE), которая позволяет редактировать, отлаживать и отлаживать макросы на Basic. Для написания макросов на Python требуются дополнительные шаги для настройки вашей IDE. При этом вам предоставляется гибкий дизайн, основанный на ваших предпочтениях или привычках при разработке на Python. Ниже приведены рекомендации по установке IDE, сложности которых варьируются от начинающего до продвинутого пользователя.

Управление библиотеками и макросами, эквивалентных управлению библиотеками Basic, недоступно для Python. Тем не менее, управление традиционными модулями и функциями Python вполне возможно, а создание пакетов Python, по крайней мере частично, соответствует созданию расширений LibreOffice или пакетов UNO. Эта страница использует взаимозаменяемые модули для библиотек и функций для макросов. Предпочитается терминология Python, чтобы соблюдать культуру использования Python.

Макросы LibreOffice могут быть персональные, общие или встроенные в документы. В зависимости от их типа и в зависимости от платформы, они могут располагаться в различных местах, как это описано здесь.

Читайте также:  Retouch4me dodge burn mac os

Для управления макросами Python можно использовать либо библиотеки Windows, либо использовать файловый менеджер в GNU/Linux. Таким образом .py файлы могут быть организованы, используя перетаскивание. Описание расположения папок в соответствии с вашим окружением, которое поможет вам настроить библиотеки или файловый менеджер, можно найти в статье AOO wiki Python как язык макросов.

Проекты на Python могут быть организованы для каждой среды IDE в библиотеке Windows, как показано на рисунке.

Обязательное расширение Alternative Python Script Organizer позволяет управлять макросами на Python. Установив его, вы получаете большую интеграцию макросов на Python в LibreOffice. После перезапуска LibreOffice проверьте меню Сервис ▸ Макросы ▸ Организация макросов Python .

Это расширение предоставляет различные действия по управлению макросами на Python. Кнопка Выполнить запускает выделенный макрос. Действия, доступные в кнопке Меню зависят от выделенного элемента:

  • Создавайте макросы или библиотеки в виде персональных, общих или в варианте только для текущего документа
  • Редактируйте, переименовывайте, удаляйте макросы или библиотеки
  • Встраивайте макросы в документ из персонального или общего вариантов
  • Заменяйте встроенную в документ библиотеку модулем Python для платформы.
  • Экспортируйте встроенную в документ библиотеку в виде модуля Python
  • Отлаживайте выбранный макрос
  • Запускайте интерактивную консоль Python, также известную как интерпретатор Python

Дополнительная информация, связанная с организацией макросов и пакетами Python может быть найдена в разделе Debugging

Макрос LibreOffice уточняет, как использовать макросы в приложении LibreOffice.

Разработка

Многочисленные приложения используют Python. В LibreOffice встроен свой собственный интерпретатор Python, который позволяет использовать API через Universal Network Objects (UNO). Язык Python содержит собственный интерпретатор, который можно использовать параллельно с используемым в LibreOffice. Оба имеют общую базу и являются расширяемыми, поэтому они предоставляют одинаковые функции. Оригинальный Python не включает интерфейс UNO для API LibreOffice. И наоборот, Python из поставки LibreOffice не полностью ведет себя как оригинальный Python и не расширяет его функциональные возможности. Однако ни LibreOffice, ни сам по себе Python не облегчают разработку приложений на языке Python для Writer, Calc, Impress, Draw, Base или Math.

LibreOffice существует в 32- или 64-битных версиях. Интегрированная среда разработки (IDE), которая встроена в него, требует выполнения в одном и том же контексте, как в 32-, так и в 64-битном режиме. Многочисленные IDE существуют в вариантах от самых простых, таких как IDLE, до более сложных, например PyCharm или PyDev для Eclipse. Следующий список произвольно фокусируется на инструментах, которые являются бесплатными, с открытым исходным кодом, мультиплатформенными и, возможно, многоязычными. Ниже в Debugging chapter используется Pyzo и PyCharm исключительно для иллюстрации. Список IDE для Python доступен на сайте Python.org. Сравнение интегрированных сред разработки (IDE) для многих языков доступно в Википедии.

  • Integrated Development and Learning Environment (IDLE) поддерживает 32- и 64-бита. Доступна для многих платформ. IDLE — рекомендуемый инструмент для изучения Python.
  • Geany работает в 32- или 64-битах и доступна на 43 разных языках. Запускается на GNU/Linux, *BSD, macOS, AIX v5.3, Solaris Express и Windows. Geany легкая, подходит для небольших проектов и поддерживает интерпретатор Python из состава LibreOffice.
  • Liclipse
  • Отладка в Aptana выглядит возможной судя по этому треду
  • PyCharm (free edition) поддерживает Gnu/Linux, macOS и Windows. Доступна как 32 бит , и видимо вмещает 64 бит тоже. Наряду с многочисленными функциями, сопровождающими разработку Python, PyCharm содержит отладчик Python, совместимый с LibreOffice.
  • Pyzo доступен для Linux, OS X и Windows на 10 разных языках. Несколько интерпретаторов Python могут быть настроены, есть в 32 бита или 64 бита . Pyzo предлагает возможности отладки.

Ниже расположен список возможностей доступных из указанных выше IDE, при этом LibreOffice Basic IDE не обладает некоторыми из них.

Просмотр исходного кода и подсветка синтаксиса

Source exploration and syntax highlighting within IDLE, Geany and PyCharm are facilitating script edition. Geany and PyCharm support code folding. IDLE class browser does not support inner or embedded classes.

IDLE — Syntax highlighting and class browser.

Оцените статью