Добавление макроса
Первый шаг в изучении программирования макросов, это найти и использовать существующие макросы. В этом разделе подразумевается, что у вас уже имеется макрос, который вы хотите использовать. Вы могли найти его в Интернете или в какой-нибудь книге. Рассмотрим пример 1. Чтобы записать этот макрос, вы должны предварительно создать библиотеку и модуль, и уже в модуле написать текст макроса.
Пример 1: Простой макрос, который пишет “Hello, World”:
Sub HelloMacro
Print "Hello, World"
End Sub
Чтобы создать библиотеку, необходимо выполнить следующие шаги:
1.Выберете пункты главного меню Сервис ‣ Basic , чтобы открыть диалог работы с макросами.Пример 2: Module1 после добавления нового макроса:
REM ***** BASIC *****
Sub HelloMacro
Print "Привет"
End Sub
Sub Main
End Sub
11.Нажмите на значок Компилировать на панели
инструментов, чтобы откомпилировать макрос.
12.Поставьте курсор в процедуру HelloMacro и нажмите на
значок Выполнитьна панели инструментов
или нажмите клавишу F5, чтобы выполнить HelloMacro в модуле. Откроется маленький диалог со словом Привет. Если курсор не находится внутри процедуры Sub или функции Function, откроется диалог выбора
макроса для запуска.
13.Нажмите OK,
чтобы закрыть диалог.
14.Чтобы
выбрать и выполнить любой макрос в данном модуле, нажмите значок Выбрать
макрос на стандартной
панели инструментов или выберите Сервис ‣
Управление макросами ‣Basic.
15.Выберите макрос и нажмите Выполнить.
Запись макросов
Если вы хотите многократно ввести одинаковую информацию, вы можете скопировать эту информацию после того, как она введена в первый раз, затем вставлять эту информацию в ваш документ каждый раз по мере необходимости. Однако, если вы скопировали в буфер обмена что-то ещё, содержимое буфера меняется. Это означает, что вы должны заново скопировать вашу повторяющуюся информацию. Чтобы обойти эту проблему, вы можете создать макрос, который в процессе выполнения вводит нужную вам информацию.
- Убедитесь, что функция записи макросов активизирована, выбрав Сервис ‣ Параметры ‣ LibreOffice ‣ Расширенные возможности. Установите флажок Включить запись макросов. По умолчанию эта функция отключена, когда AlterOffice впервые установлен на ваш компьютер.
- Выберите Сервис ‣Записать макрос , чтобы запустить запись макроса. Появится маленький диалог, подтверждающий, что AlterOffice записывает ваши действия.
3.Наберите желаемую информацию или выполните необходимые действия. Например, напечатайте ваше имя.
4.Нажмите Завершить запись в маленьком диалоге, чтобы остановить запись, и появится диалог работы с макросами AlterOffice.
5.Откройте библиотечный контейнер Мои макросы.
6.Найдите библиотеку с именем Standard в Моих макросах. Обратите внимание, что каждый библиотечный контейнер содержит библиотеку Standard.
7.Выберите библиотеку Standard и нажмите Создать модуль, чтобы создать новый модуль, содержащий макросы. Откроется диалог создания модуля.
8.Задайте название для нового модуля, например, Recorded и нажмите OK, чтобы создать модуль. В диалоге работы с макросами теперь виден этот новый модуль в составе библиотеки Standard.
9.В поле Имя макроса напечатайте имя для макроса, который вы только что записали, например, EnterMyName.
10.Нажмите Записать, чтобы сохранить макрос и закрыть диалог работы с макросами.
11.Если вы верно выполнили все шаги, описанные выше, библиотека Standard теперь содержит модуль Recorded, и этот модуль содержит макрос EnterMyName.
Примечание
Когда AlterOffice создаёт новый модуль, в этот модуль автоматически добавляется процедура с именем Main.
Запуск макроса
-
Выберите Сервис ‣ Выполнить макрос, чтобы открыть диалог выбора макроса.
- Например, выберите ваш только что созданный макрос EnterMyName и нажмите Выполнить.
- Можно также вызвать из главного меню Сервис ‣ Управление макросами ‣ Basic, чтобы открыть диалог работы с макросами, выбрать ваш макрос и нажать Выполнить.
Просмотр и редактирование макросов
Чтобы просмотреть или отредактировать созданные вами макросы выполните:
- Сервис‣ Управление макросами ‣ Basic, чтобы открыть диалог работы с макросами.
- Выберите ваш новый макрос 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 игнорируется компьютером при выполнении макроса. Можно также использовать символ одинарной кавычки ('), чтобы начать комментарий.
Ключевые слова в AlterOffice Basic могут быть записаны в любом регистре, таким образом REM, Rem, и rem могут начинать комментарий. Если вы используете символические константы, определяемые в программном интерфейсе приложения (Application Programming Interface, API), безопаснее считать, что имена чувствительны к регистру. Символические константы не описаны в данном руководстве, они не нужны, когда вы используете функцию записи макросов в AlterOffice.
Определение процедур
Отдельные макросы сохраняются в процедурах, которые
начинаются с ключевого слова SUB. Окончание процедуры обозначается END
SUB. Код модуля в примере 3 начинается с
определения процедуры, названной Main, в которой нет ничего, и она ничего не
делает. Следующая процедура, EnterMyName, содержит сгенерированный код вашего
макроса.
Примечание
Когда AlterOffice создаёт новый модуль, в этот модуль всегда автоматически добавляется процедура с именем Main.
Существует много полезной информации, не вошедшей в данное руководство, однако знание о ней весьма интересно:
- Вы можете написать процедуры, которые используют некоторые “входные” величины, называемые аргументами. Однако, функция записи макросов не предоставляет возможности использовать аргументы в процедурах.
- Помимо процедур существуют также функции, которые могут “возвращать” значение. Функции определяются ключевым словом FUNCTION в начале. Однако, записанные макросы, – это всегда процедуры, а не функции.
Определение переменных
Вы можете записать информацию на листе бумаги и позднее воспользоваться этой информацией. Переменные, подобно листу бумаги, содержат информацию, которую можно изменять или читать. Ключевое слово Dim используется для описания типа переменной и для задания размерности массивов. Оператор dim в макросе EnterMyName используется подобно подготовке листа бумаги для записи информации.
В макросе EnterMyName переменные document и dispatcher определены с типом object (объект). Другие часто используемые типы переменных включают string (строка), integer (целое) и date (дата). Третья переменная с именем args1 – это массив значений свойств. Массивы это переменные, содержащие несколько величин, подобно тому, как в одной книге содержится несколько страниц. Величины в массивах обычно нумеруются начиная с нуля. Число в скобках задаёт максимальный номер, используемый для доступа к элементу массива. В данном примере в массиве содержится только одна величина, и она имеет номер ноль.Как это работает
Разберёмся более подробно с кодом макроса EnterMyName. Может быть вы и не поймёте всех тонкостей, но разбор каждой строки в коде позволит вам осознать то, как работают макросы.
Определение начала макроса:
sub EnterMyName
Определение переменной:
dim document as object
Определение переменной:
dim dispatcher as object
Объект ThisComponent ссылается на текущий документ.
document = ThisComponent.CurrentController.Frame
CurrentController – свойство, ссылающиеся на службу, которая управляет документом. Например, когда вы печатаете на клавиатуре, – это текущий процесс, который управляет вводом в документ того, что вы напечатали. CurrentController затем отправляет изменения в блок данных документа.
Frame – свойство службы, которое возвращает основной блок данных документа. Таким образом, переменная с именем document ссылается на блок данных документа, который получает команды диспетчера.
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
Большинство задач в AlterOffice выполняется посредством диспетчеризации (отправки) команды (dispatching a command). AlterOffice включает службу DispatchHelper, которая чаще всего применяется при использовании диспетчера в макросах. Метод CreateUnoService получает имя службы и пытается создать экземпляр этой службы. По завершении метода, переменная dispatcher содержит ссылку на службу DispatchHelper.
dim args1(0) as new com.sun.star.beans.PropertyValue
Определяет массив свойств. Каждое свойство имеет имя и значение. Другими словами, это пара имя/значение. Созданный массив содержит одно свойства, доступное по номеру ноль.
args1(0).Name = "Text"
args1(0).Value = "Иван Сидорович Петров"
Задаём для свойства имя “Text” и значение “Иван Сидорович Петров”, это значение и есть тот самый текст, который будет вставлен, когда макрос сработает.
dispatcher.executeDispatch(document, ".uno:InsertText", "", 0, args1())
Вот тут и случается чудо. Служба DispatchHelper посылает блоку данных документа (ссылка на который сохранена в переменной document) команду .uno:InsertText. Описание следующих двух аргументов выходят за рамки данного руководства. Последний аргумент – это массив свойств, используемый для выполнения команды InsertText.
end sub