libreoffice basic автозавершение кода
Программирование LibreOffice Base. Часть 1
В opensource офисных пакетах OpenOffice, LibreOffice есть редко используемая и очень скупо документированная возможность — программирование, которая позволяет быстро разрабатывать приложения, аналогичные, например, приложениям Microsoft Access. Сегодня я сделаю небольшой обзор возможностей программирования OpenOffice, LibreOffice.
Вопрос: а зачем?
Я не буду сейчас влазить в исторические причины, т.к. у работников, причастных к автоматизации — это и руководители предприятий, и дистрибьюторы ERP-систем, и IT-службы внутри предприятия, и консалтинг — у всех свои причины (зачастую подкрепленные денежной выгодой) отстаивать именно свою точку зрения. Но я думаю, все согласятся с тем что в повседневной работе подразделений предприятий Excel и его бесплатный аналог Calc (из пакета OpenOffice, LibreOffice) используется очень широко. И уж если такое явление существует, то можно утверждать что это уже не случайность, а так сказать производственная необходимость, и уж точно не вина работников — а скорее недоработка автоматизаторов.
В пакетах OpenOffice, LibreOffice есть компонент для работы с базами данных — Base. Я пытался освоить работу с ним еще до OpenOffice, LibreOffice — во времена StarBase. Но все мои попытки упирались в полное отсутствие документации по разработке (программированию). На сегодня, документации по-прежнему мало, и, наверное, наиболее полезным ресурсом является книга большого энтузиаста программирования OpenOffice, LibreOffice — Andrew Pitonyak. Также была издана книга на русском языке, включающая главу 7. Язык OOo Basic — УДК 681.3.06 ББК 32.973.26-018.2 К59 Козодаев, Р. Ю. К59 OpenOffice.org 3. Полное руководство пользователя / Р. Ю. Козодаев, А. В. Маджугин / Под ред. Е. В. Ушаковой. — СПб.: БХВ-Петербург, 2010. — 704 с.: ил. + Дистрибутив (на CD-ROM) — (Библиотека ГНУ/Линуксцентра) ISBN 978-5-9775-0385-3
Поэтому в качестве распространения информации о возможностях программирования OpenOffice, LibreOffice с упором на компонент Base создано это сообщение.
Пакет LibreOffice сейчас актуален в версии 6.2 которую можно получить на сайте разработчика.
Также пакет предустановлен на многих дистрибутивах Linux (иногда не предустановлен пакет Base, так как он сравнительно редко используется).
На этапе создания новой базы данных Base можно выбрать вариант работы со встроенной базой данных или присоединиться к серверу базы данных. То есть многопользовательская работа поддерживается. Для экспериментов можно выбрать любой из вариантов.
Редактор макросов открывается последовательным выбором пунктов меню Tools->Macros->Organize Macros->LibreOffice Basic.
Перед вами появится выбор место хранения макросов. Наиболее логичным будет хранить макросы в файле базы данных, т.к. их в этом случае можно будет распространять одним файлом.
Создадим самый простой макрос:
Далее создадим форму Forms->Create Form In Design View. И добавим в конструкторе формы элемент кнопка. После создания кнопки распахнем палитру свойств кнопки, нажав правую кнопку мыши и далее последовательно выбрав Control->Execute Action->Macro->Имя библиотеки->Hello.
Сохранив форму вызываем ее на выполнение и наблюдаем работу макроса. Или не наблюдаем. Все дело в защите которая в связи с участившимися вредоносными макросами отключает их работу по умолчанию.
Если тем вызовет хоть какой-то интерес готов продолжить более конкретными темами.
Введение
В настоящее время у человечества стоит задача автоматизировать и роботизировать наиболее опасные, трудоемкие, не интересные виды человеческой деятельности. Наиболее актуальна роботизация при выполнении боевых задач, видов деятельности, сопряженных с риском для жизни человека.
Программирование является ключевым звеном в процессе создания высокопроизводительных автоматизированных производств, роботов, высокотехнологичных и высокодоходных изделий оборонного и гражданского назначения.
Особую ценность имеет возможность создания в бесплатной среде новых уникальных программ, собираемых из широкодоступных программ и библиотек на слабооборудованных рабочих местах или в домашних условиях.
1 OpenOffice Basic и LibreOffice Basic
OpenOffice Basic и Libre O ffice Basic ранее назывались StarOffice Basic, StarBasic, OpenOffice.org Basic, OOo Basic. LibreOffice Basic в настоящее время развивается, опережая OpenOffice Basic, поэтому в дальнейшем будем преимущественно говорить о Libre O ffice Basic.
OOo Basic схож с другими диалектами Basic, например, с Visual Basic for Application может иметь одинаковый программный код в широкой области применения.
OOo Basic позволяет программировать в пакетах офисных программ OpenOffice и LibreOffice, а также автоматизировать управляющие этими пакетами действия. ООо Basic не позволяет создавать самостоятельно выполняемые программы с расширением exe.
— легок для изучения;
— поддерживает объекты COM ( ActiveX ) и расширенные возможности GUI в OpenOffice ;
— есть сообщество пользователей в Интернет;
— это решение для нескольких платформ (Linux, Windows и т.д.).
Кроссплатформенность (совместимость с 32/64-битными системами, поддержка таких самых популярных операционных систем, как Microsoft Windows, GNU/Linux и Mac OS X), свободное распространение для бесплатного использования в частных и коммерческих целях, открытый исходный код придают Libre O ffice Basic особую ценность.
В справке по OpenOffice или LibreOffice, вызываемой при нажатии на F1, в разделе «Макросы и программирование» можно получить львиную долю информации о программировании на OOo Basic.
2 Мой первый макрос: “ Hello World ” [1]
3 Левый Alt нажать одновременно с F11 для открытия ООо Basic IDE
4 Оператор REM или апостроф ‘ перед комментарием
‘П рограмма начинается оператором Sub с именем Main
REM К омментарий для людей программа не выполняет
Print » REM или ‘ перед комментарием » ‘ Выведем
‘ Следующий оператор завершает программу
End Sub REM программа завершилась
REM — это сокращение слова remark (комментарий).
5 Циклы Do. Loop
Цикл Do While Условие … Loop п роверяет перед каждым выполнением цикла истинно ли условие и выполняться пока (While) истинно условие:
Цикл Do Until Условие … Loop выполняется до (Until) истинности условия. Цикл выполняется, если условие ложно:
Цикл Do … Loop While Условие выполняется по крайней мере один раз и продолжает выполняться пока (While) истинно условие:
Loop While Условие
Цикл Do … Loop Until Условие выполняется один или большее число раз до (Until) наступления момента истинности условия
6 Группировка текста программ [1]
Листинг 3.2 : “Hello world” с использованием процедуры и функции.
Function HelloWorldString () As String
HelloWorldString = «Hello World»
Каждый модуль (m odule) содержит набор процедур (функций). Библиотека (Library) содержит набор модулей. Документ (document) может содержать библиотеку или несколько библиотек. Библиотека может существовать также на уровне Приложения (application level), такого как OOo Writer.
7 Передача параметров процедурам и функциям
П роцедуры и ф ункции могут получать несколько параметров. После имени процедуры или функции передаваемые параметры заключаются в круглые скобки, н апример,
‘ Параметр A теперь имеет значение 20
Sub ChangeValue ( TheValue As Integer )
Вы можете также передать параметр по значению, если Вы не хотите, чтобы последующие изменения параметра затронули значение, которое было передано первоначально. Чтобы определить, что параметр нужно передать по значению, удостоверьтесь, что ключевое слово ByVal предшествует объявлению переменной в заголовке функции.
В предыдущем примере, если мы заменяем функцию ChangeValue на функцию
Sub ChangeValue ( ByVal TheValue As Integer )
тогда переменная A остается незатронутой этим изменением. После вызова функции ChangeValue, переменная A сохраняет значение 10.
Примечание Метод для передачи параметров процедурам и функциям в OOo Basic фактически идентичен VBA. По умолчанию, параметры передаются по ссылке. Чтобы передавать параметры по значению, используйте ключевое слово ByVal. В VBA, Вы можете также использовать ключевое слово ByRef, чтобы вынудить параметр быть переданным по ссылке. OOo Basic не поддерживает это ключевое слово, потому что оно уже используется по умолчанию в процедурах OOo Basic.
8 Необязательные (Optional) параметры
Функции и процедуры можно вызвать, только если все необходимые параметры передаются во время вызова. OOo Basic позволяет Вам определять параметры как необязательные, то есть, если соответствующие значения не включены в запрос, OOo Basic передает пустой параметр. В примере [ 9 ; стр. 24 ]
параметр A обязателен, тогда как параметр B является необязательным. Функция IsMissing проверяет, передан ли параметр или нет.
Dim B_Local As Integer
‘ Проверка, присутствует ли параметр B фактически
If Not IsMissing ( B ) Then
B_Local = B ‘ Параметр B присутствует
Пример сначала проверяет, передали ли параметр B и, в случае необходимости, передает этот параметр внутренней переменной B_Local. Если соответствующий параметр отсутствует, то значение по умолчанию (в этом случае, значение 0) передается B_Local, а не переданному параметру.
Примечание Ключевое слово ParamArray присутствующее в VBA не поддерживается в OOo Basic.
9 OpenOffice.org и LibreOffice API
OpenOffice и LibreOffice API (application programming interface) не является языком программирования, он только интерфейс программирования приложений в виде готового набора методов, предлагаемых сервисом для создания программ. OpenOffice и LibreOffice API содержат много сервисов (Services) и объектов (Objects).
Способы использования StarBasic API в программировании на каком-то языке могут без особых усилий применяться для интеграции StarBasic API с другими поддерживаемыми языками программирования ( Basic, C, C++, Java, Python).
9.1 Справочная информация по API OpenOffice.org и LibreOffice
Документация о сервисах, их свойствах, методах и интерфейсах сосредоточена в справочнике по OpenOffice.org API на сайте www.openoffice.org по ссылке:
Онлайн документация по Libreoffice API расположена по адресу:
9.2 Создание и обращение к объектам
Объект ThisComponent является глобальной переменной, предоставляющей доступ к активному документу. Следующая программа объявляет активный документ OpenOffice или LibreOffice как объект Doc:
Dim Doc As Object ‘Doc объявляется как объект
Doc = ThisComponent ‘ Активный документ получает имя Doc
9.3 Сервисы LibreOffice Basic
Все сервисы OOo Basic начинаются с com.sun.star и составляют большой перечень, из которого наиболее важные:
— com.sun.star.drawing содержит все сервисы, используемые для рисования линий, прямоугольников, кругов и т.д. (collects all services used for drawing line, rectangles, circles etc).
— com.sun.star.frame содержит сервисы Desktop(). Вы можете использовать этот сервис для открытия существующих документов или создания новых (contains the Desktop() service. You use this service to open existing documents or create new ones).
— com.sun.star.presentation предоставляет все сервисы для создания и работы с презентациями (provides all services to create and work with presentations).
— com.sun.star.sheet содержит сервисы для электронных таблиц. Сервис SpreadheetDocument() используется для работы с листами электронных таблиц (contains services for spreadsheets. Its SpreadheetDocument() service is used to work with spreadsheets).
— com.sun.star.table предоставляет все сервисы для таблиц в текстовых документах и электронных таблицах (provides all services for tables in text documents and spreadsheets).
— com.sun.star.text группы сервисов, связанных с текстовыми документами. Сервис TextDocument() предоставляет все интерфейсы, необходимые для работы с текстовыми документами (groups the services dealing with text documents. The TextDocument() service provides all interfaces needed to work with text documents).
9.4 Список всех сервисов, поддерживаемых LibreOffice Basic
Все поддерживаемые LibreOffice сервисы (1022 сервиса) отсортированы по алфавиту:
Рутина на потоке. Осваиваем простейшие приемы автоматизации работы с LibreOffice
Содержание статьи
warning
Перед запуском первого макроса LibreOffice может потребовать установить JRE (Java Runtime Environment). Скачать инсталлятор можно здесь.
Что такое LibreOffice
Еще LibreOffice можно установить на сервер и запускать в браузере. Для этого сервер должен управляться Linux и на нем должна быть установлена библиотека GTK3 (она нужна для трансляции графики в HTML5).
Программный пакет включает в себя следующие компоненты:
Специально для тебя мы сделали подборку исходников макросов для LibreOffice. Ищи их в репозиториях GitHub к этому номеру.
.bash и LibreOffice
Создавать и редактировать документы LibreOffice можно напрямую из shell, используя LibreOffice API. В качестве примера сконвертируем ODT-файл в docx:
Языки, на которых можно написать макрос
Для написания макросов на этом языке не нужно устанавливать никаких дополнений. Пакет LibreOffice Basic поставляется с обширной коллекцией примеров кода для разных ситуаций, и этот способ автоматизации отлично документирован на сайте проекта. Большая часть нашей статьи посвящена этому способу.
Открываем менеджер макросов
Хакер #188. Ботнеты, изменившие мир
Этот способ достался в наследство от OpenOffice (проект курировала компания Oracle). BeanShell — это скриптовый язык, созданный для тестирования и отладки Java-программ. Для написания макросов на этом языке необходимо изменить установить соответствующее расширение goo.gl/OzHo1W.
Кнопка Edit неактивна. С Python все не так просто
Для того чтобы автоматизировать работу с LibreOffice на Python, нужно установить соответствующее дополнение:
Если ты используешь LibreOffice под Windows, тогда надо установить это дополнение через Tools → Options → LibreOffice → General.
После установки можно редактировать Python-макросы из встроенного редактора.
Java Script
C JS ситуация аналогична ситуации с Python. Для выполнения макросов требуется установить libreoffice-script=provider-js.
Соответственно, для Windows способ установки также аналогичен предыдущему пункту.
Как и в MS Office, в LibreOffice есть возможность записывать макросы. Это можно сделать через пункт меню Record Macro.
Можно настроить несколько способов вызова макроса:
Примеры макросов:
В принципе, на LibreOffice Basic можно имитировать любые действия пользователя. Для наглядности приведем примеры автоматизаций для различных компонентов LibreOffice.
Hello world
Пример простейшего макроса для вывода сообщения с текстом:
SpreadSheet
Этот код красит первую ячейку во втором листе в книге в черный цвет:
UNO — компонентная модель для взаимодействия объектов в OpenOffice и LibreOffice. Для программного управления этой моделью существуют UNO API. С помощью его производится обращение к LibreOffice из сторонних скриптов (Python, JS и BeanShell).
Presentation
Макрос для создания нового слайда в презентации:
Drawing
Этот макрос удаляет все линии с рисунка. Когда это может пригодиться? Допустим: нарисовали 30-страничную схему, где линиями соединены все объекты. Потом пришел твой шеф и сказал: «Нафиг линиями? И без них все понятно!»
Аналогичным образом можно удалить все стрелочки или другие фигуры.
Автоматизация OpenOffice
Если ты олдфаг, привык к OpenOffice и не хочешь менять его не на что‑то другое, это не лишает тебя возможности автоматизировать свою работу. Многие примеры из этой статьи будут работать в этом пакете. А документации по автоматизации OpenOffice гораздо больше, чем по LibreOffice. Вот ссылка на отличный FAQ, в котором есть ответы на все вопросы по автоматизации OpenOffice:
Database
С помощью макросов можно выполнять запросы к базам данных (предварительно необходимо установить соединение с database-сервером):
Pandoс
Утилита для обработки текстовых файлов. Она может конвертировать Markdown, LaTeX и HTML в целый калейдоскоп различных форматов. Вот некоторые из них:
Заключение
LibreOffice Basic синтаксически идентичен VBA и всем остальным разновидностям бейсика, с которыми многим из нас пришлось столкнуться в школе и институте. Но не надо ставить LOB на один уровень с его братом от Microsoft. Во‑первых, редактор макросов в LB гораздо дружественнее и терпимее к промахам пользователя. В частности, в случае ошибки не надо гуглить ее код по форумам в стиле «информатика для школьника», чаще всего понять, что не так, можно, не выходя из окна с кодом. Во‑вторых, выполнение макроса никогда не парализует работу компьютера (как это иногда может сделать бесконечный цикл в VBA). А в‑третьих, благодаря возможностям UNO API автоматизировать можно почти все что угодно.
Завершение слов
Задает параметры завершения часто встречающихся слов при вводе.
Содержание
Включить завершение слов
Хранение часто используемых слов и автоматическое завершение слова после того, как будут введены первые три буквы сохраненного слова.
Добавлять пробел
Если после слова не ставится знак препинания, LibreOffice добавляет пробел. Этот пробел добавляется, когда пользователь начинает ввод следующего слова.
Показывать как подсказку
Завершенное слово отображается как подсказка.
Сбор слов
Добавляет часто используемые слова в список. Чтобы удалить слово из списка «Завершение слов», выберите это слово и нажмите кнопку Удалить запись.
При закрытии документа удалите слова, извлеченные из списка.
Если этот список активирован, то при закрытии текущего документа он будет удален. Если список деактивирован, то после закрытия текущего документа текущий список подстановки слов останется доступен для других документов. Список будет доступен до завершения работы с LibreOffice.
Принимать автозавершение при нажатии
Выберите клавишу, которая будет использоваться для принятия автоматического завершения слова.
Чтобы отклонить завершение слова, нажмите клавишу ESC. |
Мин. длина слова
Введите минимальную длину слова, для которого будет возможно автоматическое завершение.
Макс. записей
Введите максимальное число слов, которое может храниться в списке автоматического завершения.
Список завершения слов
Выводит список собранных слов. Список действителен до закрытия текущего документа. Чтобы сделать список доступным для других документов в текущем сеансе, снимите флажок «При закрытии документа удалить слова, извлеченные из списка».
Если включена функция автоматической проверки орфографии, будут собираться только слова, которые распознаются этой функцией. |
Удалить запись
Удаляет выделенные слова из списка завершения слов.
Редактор Basic
Редактор Basic обладает всеми теми стандартными функциями редактирования, которыми вы привыкли пользоваться при работе с текстовыми документами. Он поддерживает функции меню Правка (Вырезать, Удалить, Вставить), выделение текста при помощи клавиши Shift, а также функции позиционирования курсора (например, перемещение от слова к слову при помощи Ctrl и клавиш со стрелками).
Длинные строки могут быть разбиты на части при помощи пробела и символа подчеркивания _ в конце строки. Этим последующая строка объединяется с предыдущей в одну логическую строку. Использование директивы «Option Compatible» в модулях Basic позволяет также разбивать на строки и комментарии.
Если щелкнуть по значку Выполнить BASIC на панели Макрос, выполнение программы начнется с первой строки в редакторе Basic. Выполняется первая подпрограмма или функция, после чего выполнение программы останавливается. Процедура «Sub Main» не запускается в первую очередь при выполнении программы.
Вставьте свой код Basic между строками Sub Main и End Sub, которые появляются при первом открытии IDE. Либо удалите все строки и затем введите собственный код Basic. |
Содержание
Навигация в проекте
Список «Библиотека»
Выберите библиотеку из списка Библиотека в левой части панели инструментов, чтобы загрузить ее в редактор. Будет показан первый модуль выбранной библиотеки.
Каталог объектов
Щелкните значок Каталог объектов
на панели макросов, чтобы отобразить каталог объектов.
В этом диалоговом окне показан список всех существующих объектов в иерархическом представлении. Если дважды щелкнуть элемент списка, будут открыты его дочерние объекты.
Чтобы отобразить в редакторе определенный модуль или установить курсор на выбранную подпрограмму или функцию, выделите соответствующий элемент и щелкните значок Показать
Чтобы закрыть каталог объектов, щелкните значок (X) в строке заголовка.
Сохранение и загрузка исходного кода Basic
Код Basic можно сохранить в текстовом файле, чтобы сохранить и импортировать его в другие системы программирования.