Практическое занятие № 16
Макросы
Количество часов на выполнение: 2часа
Цель работы: закрепление теоретических навыков
Задание: выполнить все шаги
Методика выполнения задания: прочитать теоретический материал, и выполнить все шаги
Теоретический материал
Чаще всего, макрос это сохранённая последовательность команд или нажатий клавиш, предназначенная для последующего использования. Например, можно сохранить и «впечатывать» свой адрес. Язык программирования 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
Интегрированная среда разработки макросов
Пример 2: Module1 после добавления нового макроса:
REM ***** BASIC *****
Sub HelloMacro
Print "Привет"
End Sub
Sub Main
End Sub
Запись макросов
Если вы хотите многократно ввести одинаковую информацию, вы можете скопировать эту информацию после того, как она введена в первый раз, затем вставлять эту информацию в ваш документ каждый раз по мере необходимости. Однако, если вы скопировали в буфер обмена что-то ещё, содержимое буфера меняется. Это означает, что вы должны заново скопировать вашу повторяющуюся информацию. Чтобы обойти эту проблему, вы можете создать макрос, который в процессе выполнения вводит нужную вам информацию.
Примечание
Для некоторых типов многократно вводимой в документах информации более удобно создать файл автотекста. Описание работы с автотекстом смотрите в справочной системе и в главе Глава 3 – Использование Стилей и Шаблонов данного руководства.
Диалог записи макроса
Диалог создания модуля
Примечание
Когда LibreOffice создаёт новый модуль, в этот модуль автоматически добавляется процедура с именем Main.
Запуск макроса
Диалог выбора макроса
Просмотр и редактирование макросов
Чтобы просмотреть или отредактировать созданные вами макросы выполните:
Макрос 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.
Существует много полезной информации, не вошедшей в данное руководство, однако знание о ней весьма интересно:
Определение переменных
Вы можете записать информацию на листе бумаги и позднее воспользоваться этой информацией. Переменные, подобно листу бумаги, содержат информацию, которую можно изменять или читать. Ключевое слово 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")
Большинство задач в LibreOffice выполняется посредством диспетчеризации (отправки) команды (dispatching a command). LibreOffice включает службу 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
Последняя строка кода, конец процедуры.
Скачано с www.znanio.ru
Материалы на данной страницы взяты из открытых источников либо размещены пользователем в соответствии с договором-офертой сайта. Вы можете сообщить о нарушении.