Глава 13 – Работа с макросами в LibreOffice¶
Чаще всего, макрос это сохранённая последовательность команд или нажатий клавиш, предназначенная для последующего использования. Например, можно сохранить и «впечатывать» свой адрес. Язык программирования LibreOffice очень гибок и позволяет автоматизировать как простые, так и сложные задачи. Макросы часто используются, когда мы хотим повторять ещё и ещё раз определённую последовательность действий в схожих условиях.
Макросы в LibreOffice обычно записываются на языке, называемом LibreOffice Basic или просто Basic. Конечно можно долго изучить Basic и наконец начать программировать, но это руководство поможет вам сразу решать простые задачи. Начинающие пользователи часто с успехом применяют макросы, написанные кем-либо другим. Также, можно использовать функцию записи макросов, чтобы сохранить последовательность нажатий клавиш и использовать её ещё раз.
Большинство действий в LibreOffice выполняются путём отправки команды (посылки команды, dispatching a command), которая перехватывается и выполняется. Функция записи макросов позволяет записать непосредственные команды, которые обрабатываются (смотрите Платформа диспетчера).
Ваш первый макрос¶
Добавление макроса¶
Первый шаг в изучении программирования макросов, это найти и использовать существующие макросы. В этом разделе подразумевается, что у вас уже имеется макрос, который вы хотите использовать. Вы могли найти его в Интернете или в какой-нибудь книге. Рассмотрим пример 1. Чтобы записать этот макрос, вы должны предварительно создать библиотеку и модуль, и уже в модуле написать текст макроса, смотрите Организация макросов.
Пример 1: Простой макрос, который пишет “Hello, World”:
Sub HelloMacro Print "Hello, World" End Sub
Чтобы создать библиотеку, необходимо выполнить следующие шаги:
- Выберете пункты главного меню Сервис ‣ Макросы ‣ Управление макросами ‣ LibreOffice Basic , чтобы открыть диалог работы с макросами Libreoffice Basic.
Диалог работы с макросами LibreOffice Basic
- Нажмите Управление, чтобы открыть диалог организатора макросов и выберите вкладку Библиотеки.
- Выберите в выпадающем списке Приложение/Документ пункт Мои макросы и диалоги.
Диалог организатора макросов LibreOffice Basic
- Нажмите Создать, чтобы открыть диалог создания новой библиотеки.
- Введите имя библиотеки, например, TestLibrary и нажмите OK.
- Выберите вкладку Модули.
- В списке модулей раскройте Мои макросы и выберите TestLibrary. Модуль с именем Module1 уже существует, он может содержать ваши макросы. Если необходимо, том можно нажать Создать, чтобы создать другой модуль в библиотеке.
- Выберите Module1 или новый модуль, который вы создали и нажмите Правка, чтобы открыть интегрированную среду разработки (IDE). Интегрированная среда разработки это текстовый редактор, включённый в LibreOffice, который позволяет создавать и редактировать макросы.
Интегрированная среда разработки макросов
- После создания нового модуля он содержит комментарий и пустой макрос, названный Main, который ничего не делает.
- Добавьте новый макрос или до Sub Main или после End Sub . В примере ниже приведен новый макрос, который был добавлен до Sub Main .
Пример 2: Module1 после добавления нового макроса:
REM ***** BASIC ***** Sub HelloMacro Print "Привет" End Sub Sub Main End Sub
- Нажмите на значок Компилировать на панели инструментов, чтобы откомпилировать макрос.
- Поставьте курсор в процедуру HelloMacro и нажмите на значок Выполнить BASIC на панели инструментов или нажмите клавишу F5 , чтобы выполнить HelloMacro в модуле. Откроется маленький диалог со словом Привет . Если курсор не находится внутри процедуры Sub или функции Function , откроется диалог выбора макроса для запуска.
- Нажмите OK, чтобы закрыть диалог.
- Чтобы выбрать и выполнить любой макрос в данном модуле, нажмите значок Выбрать макрос на стандартной панели инструментов или выберите Сервис ‣ Макросы ‣ Управление макросами ‣ LibreOffice Basic .
- Выберите макрос и нажмите Выполнить.
Запись макросов¶
Если вы хотите многократно ввести одинаковую информацию, вы можете скопировать эту информацию после того, как она введена в первый раз, затем вставлять эту информацию в ваш документ каждый раз по мере необходимости. Однако, если вы скопировали в буфер обмена что-то ещё, содержимое буфера меняется. Это означает, что вы должны заново скопировать вашу повторяющуюся информацию. Чтобы обойти эту проблему, вы можете создать макрос, который в процессе выполнения вводит нужную вам информацию.
Для некоторых типов многократно вводимой в документах информации более удобно создать файл автотекста. Описание работы с автотекстом смотрите в справочной системе и в главе Глава 3 – Использование Стилей и Шаблонов данного руководства.
- Убедитесь, что функция записи макросов активизирована, выбрав Сервис ‣ Параметры ‣ LibreOffice ‣ Расширенные возможности . Установите флажок Включить запись макросов. По умолчанию эта функция отключена, когда LibreOffice впервые установлен на ваш компьютер.
- Выберите Сервис ‣ Макросы ‣ Записать макрос из главного меню, чтобы запустить запись макроса. Появится маленький диалог, подтверждающий, что LibreOffice записывает ваши действия.
- Наберите желаемую информацию или выполните необходимые действия. Например, напечатайте ваше имя.
- Нажмите Завершить запись в маленьком диалоге, чтобы остановить запись, и появится диалог работы с макросами LibreOffice.
- Откройте библиотечный контейнер Мои макросы.
- Найдите библиотеку с именем Standard в Моих макросах. Обратите внимание, что каждый библиотечный контейнер содержит библиотеку Standard .
- Выберите библиотеку Standard и нажмите Создать модуль, чтобы создать новый модуль, содержащий макросы. Откроется диалог создания модуля.
- Задайте название для нового модуля, например, Recorded и нажмите OK, чтобы создать модуль. В диалоге работы с макросами теперь виден этот новый модуль в составе библиотеки Standard .
- В поле Имя макроса напечатайте имя для макроса, который вы только что записали, например, EnterMyName .
- Нажмите Записать, чтобы сохранить макрос и закрыть диалог работы с макросами.
- Если вы верно выполнили все шаги, описанные выше, библиотека Standard теперь содержит модуль Recorded , и этот модуль содержит макрос EnterMyName .
Когда LibreOffice создаёт новый модуль, в этот модуль автоматически добавляется процедура с именем Main .
Запуск макроса¶
- Выберите Сервис ‣ Макросы ‣ Выполнить макрос , чтобы открыть диалог выбора макроса.
- Например, выберите ваш только что созданный макрос EnterMyName и нажмите Выполнить.
- Можно также вызвать из главного меню Сервис ‣ Макросы ‣ Управление макросами ‣ LibreOffice Basic , чтобы открыть диалог работы с макросами, выбрать ваш макрос и нажать Выполнить.
Просмотр и редактирование макросов¶
Чтобы просмотреть или отредактировать созданные вами макросы выполните:
- Сервис ‣ Макросы ‣ Управление макросами ‣ LibreOffice Basic , чтобы открыть диалог работы с макросами.
- Выберите ваш новый макрос EnterMyName и нажмите Правка, чтобы открыть макрос в интегрированной среде разработки.
Макрос EnterMyName не так уж сложен, как может показаться. Изучение нескольких вещей существенно поможет в понимании макросов. Начнём сначала и посмотрим на самую первую строку примера.
Макрос EnterMyName не так уж сложен, как может показаться. Изучение нескольких вещей существенно поможет в понимании макросов. Начнём сначала и посмотрим на самую первую строку примера.
Пример 3: Сгенерированный макрос EnterMyname :
REM ***** BASIC ***** Sub Main End Sub sub EnterMyName rem ------------------------------------------------------------- rem define variables (определение переменных) dim document as object dim dispatcher as object rem ------------------------------------------------------------- rem get access to the document (получение доступа к документу) document = ThisComponent.CurrentController.Frame dispatcher = createUnoService("com.sun.star.frame.DispatchHelper") rem ------------------------------------------------------------- dim args1(0) as new com.sun.star.beans.PropertyValue args1(0).Name = "Text" args1(0).Value = "Иван Сидорович Петров" dispatcher.executeDispatch(document, ".uno:InsertText", "", 0, args1()) end sub
Комментарии¶
Подробные комментарии являются необходимой частью программы. Без комментариев и сам программист зачастую забывает, что же он написал несколько недель (а может и месяцев или лет) тому назад.
Все комментарии в макросах начинаются с ключевого слова REM . Весь текст строки после REM игнорируется компьютером при выполнении макроса. Можно также использовать символ одинарной кавычки ( ‘ ), чтобы начать комментарий.
Ключевые слова в LibreOffice Basic могут быть записаны в любом регистре, таким образом REM , Rem , и rem могут начинать комментарий. Если вы используете символические константы, определяемые в программном интерфейсе приложения (Application Programming Interface, API), безопаснее считать, что имена чувствительны к регистру. Символические константы не описаны в данном руководстве, они не нужны, когда вы используете функцию записи макросов в LibreOffice.
Определение процедур¶
Отдельные макросы сохраняются в процедурах, которые начинаются с ключевого слова SUB . Окончание процедуры обозначается END SUB . Код модуля в примере 3 начинается с определения процедуры, названной Main, в которой нет ничего, и она ничего не делает. Следующая процедура, EnterMyName , содержит сгенерированный код вашего макроса.
Когда LibreOffice создаёт новый модуль, в этот модуль всегда автоматически добавляется процедура с именем Main .
Существует много полезной информации, не вошедшей в данное руководство, однако знание о ней весьма интересно:
- Вы можете написать процедуры, которые используют некоторые “входные” величины, называемые аргументами. Однако, функция записи макросов не предоставляет возможности использовать аргументы в процедурах.
- Помимо процедур существуют также функции, которые могут “возвращать” значение. Функции определяются ключевым словом FUNCTION в начале. Однако, записанные макросы, – это всегда процедуры, а не функции.
Определение переменных¶
Вы можете записать информацию на листе бумаги и позднее воспользоваться этой информацией. Переменные, подобно листу бумаги, содержат информацию, которую можно изменять или читать. Ключевое слово Dim используется для описания типа переменной и для задания размерности массивов. Оператор dim в макросе EnterMyName используется подобно подготовке листа бумаги для записи информации.
В макросе EnterMyName переменные document и dispatcher определены с типом object (объект). Другие часто используемые типы переменных включают string (строка), integer (целое) и date (дата). Третья переменная с именем args1 – это массив значений свойств. Массивы это переменные, содержащие несколько величин, подобно тому, как в одной книге содержится несколько страниц. Величины в массивах обычно нумеруются начиная с нуля. Число в скобках задаёт максимальный номер, используемый для доступа к элементу массива. В данном примере в массиве содержится только одна величина, и она имеет номер ноль.
Как это работает¶
Разберёмся более подробно с кодом макроса EnterMyName . Может быть вы и не поймёте всех тонкостей, но разбор каждой строки в коде позволит вам осознать то, как работают макросы.
Определение начала макроса: