Создание макроса в LibreOffice

УТВЕРЖДАЮ

Ректор университета

__________О.Н. Федонин

«____»___________ 2017г.

 

 

ИНСТРУМЕНТАЛЬНЫЕ СРЕДСТВА ИНФОРМАЦИОННЫХ СИСТЕМ

 

 

 

Методические указания

К выполнению курсовой работы для студентов очной формы обучения по направлению подготовки 09.03.02 –Информационные системы и технологии

 

Брянск 2017

 

УДК 004.94

 

Инструментальные средства информационных систем [Текст] + [Информационный ресурс]: методические указания к выполнению курсовой работы для студентов очной формы обучения по направлению подготовки 09.03.02 – Информационные системы и технологии. Брянск: БГТУ, 2017.– 28 с.

 

Разработал:

Ю.М. Казаков,

канд. техн. наук, доц.

 

Рекомендовано кафедрой «Компьютерные технологии и системы» БГТУ(протокол № 5 от 25.10.17)

 

Методические указания публикуются в авторской редакции

 

Научный редактор Р.А. Филиппов

Компьютерный набор Ю.М.Казаков

 

 

Подписано в печать   . Формат 60х84 1/16. Бумага офсетная. Офсетная печать. Усл. печ.л. 1,74. Уч.-изд.л. 1,74. Тираж 1 экз.

Брянский государственный технический университет

Кафедра «Компьютерные технологии и системы», тел. 56-49-90

241035, Брянск, бульвар 50лет Октября, 7, БГТУ

 


 


Цель работы

 

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

Макросы в LibreOffice

Для того чтобы провести работу с текстом или обработать текст каким-либо сложным образом и обычных средств, предоставляемых интерфейсом для этого не хватает. LibreOffice позволяет создавать специальные макросы, являющиеся по сути процедурами обработки текста и данных в Writer и Calc, написанные на языке программирования, в нашем случае в качестве языка программирования выступает язык Бэйсик. При этом, обладая множеством всех стандартных операторов присущих языкам программирования высокого уровня, возможно получить доступ к объектам Writer и Calc, открытым документам, функциям открытия документов, всем объектам данного документа включая рисунки, параграфы, колонтитулы, выделенный текст, списки, слова, буквы, шрифты и т.д.

Объекты и классы

Объекты имеют какие-то общие свойства, благодаря которым мы относим каждый объект к какому-то классу объектов. То же самое можно сказать и о тексте или документе, документ, это объект, который содержит объект текст, а объект текст содержит объекты слова, абзацы, буквы, текст редактируется, меняется, отображается, документ создается и сохраняется. Все эти действия мы выполняем с данными объектами, используя функции редактора, но можем эти функции вызвать с помощью алгоритмического языка.

Существует набор стандартных операторов, с помощью которых можно написать практически любой алгоритм, любой сложности – это ветвление, цикл, линейная последовательность выполнения операторов, арифметические действия и возможность обращения к переменным и записи в них каких-то значений или результатов логических или арифметических выражений. Обычно в языках высокого уровня стараются избежать сложной работы с памятью присущей машинным языкам, вводится стандартная операция присвоения, которая позволяет некоторой – переменной – символьной последовательности присвоить какое-то значение. Поэтому каждой переменной ставится в соответствие какой-то тип данных, или домен или область определения тех значений, которые она может принимать. Обычно в языках программирования – это целочисленные типы, вещественные, строковые, символьные, логические, перечислимые, множества, комплексные числа, тип запись или структуры. Так что же такое переменная объект, это некая ссылка на объект, являющийся сложной структурой данных, которая ко всему прочему может содержать методы работы с этими данными и объектом, а также защищать данные и ограничивать или разрешать к ним доступ.

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

Переменные и объекты в Basic

Для объявления переменной указывается ключевое слово dim и затем список переменных через запятую, слово as и тип переменной.

Примеры:

Dim a,b as integer – объявление переменной целого типа. Dim s as string – объявление переменной строкового типа.

Dim mass() as integer – объявление динамического одномерного массива целого типа. Redim mass(100) – изменение длины массива и установка ее равной 100.

Dim desk as com.sun.star.frame.Desktop — переменная типа desktop унифицированной сетевой модели UNO, данная переменная может ссылаться на объекты типа Desktop.

В языке Basic можно обращаться к переменным представляющим собой ссылки на объекты, это могут быть объекты текст, параграфы, таблицы, отображаемые на экране окна, они обладают набором свойств и методов работы с данными объектами. Объектная модель может быть любой, как и ее реализация, например в пакете Microsoft Office реализована своя объектная модель, в пакете LibreOffice или OpenOffice своя, потому объекты и способ взаимодействия с этим объектами в этих различных пакетах отличаются.

Операторы Basic

Оператор цикла For.

For index=n1 to n2 [step s] Rem тело цикла

Next index

Переменная Index пробегает значения от n1 до n2 c инкрементацией s (увеличение на s), в данном случае s может быть переменной или константой целого типа, квадратные скобочки указывают на то, что конструкция является не обязательной, в случае если она не указывается то шаг равен 1.

Например, val =0

For xyz = 4 to 50 step 4 val=val+xyz

next xyz

Алгоритм вычисляет сумму значений от 4 до 50 с шагом 4, то есть сумму 4, 8, 12, 16...

до 48 в переменную val. val1 =0

For aval = 1 to 50 val1=val1+aval next aval

В данном случае рассчитывается сумма целых чисел от 1 до 50.

Оператор цикла While, делай пока выполняется условие. Операторы внутри цикла повторяются до тех пор пока выполняется условие.

While <условие> операторы Wend

Пример: While i<N I=i+1 wend

Цикл выполняется пока переменная i меньше N. Условный оператор If,

if <условие> then

<последовательность операторов если условие выполняется> [else

<последовательность операторов в случае невыполнения условия>] end if

Пример: если I меньше 100 (если условие выполнено) то увеличить I на 1, иначе уменьшить на 1.

If i<100 then i=i+1

else i=i-1end if

Процедуры и функции

Функции и процедуры представляют собой отдельные блоки операторов, которые могут быть вызваны в основной программе или подпрограмме, обычно вызов функции или процедуры осуществляется в программе с помощью указания ее имени и передаваемых в нее параметров, после выполнения операторов функции управление возвращается программе или подпрограмме вызвавшей ее и начинается выполнение операторов следующих за функцией или процедурой. Очевидно, что назначение процедур и функций в том, чтобы не писать каждый раз один и тот же код для часто повторяющихся операций выполняющих определенное логически завершенное действие. При этом внутри функций и процедур возможно использовать свои локальные переменные, которые могут иметь те же названия, что и переменные в других процедурах и функциях и в основной программе. При этом извне процедуры мы не можем менять локальные переменные функции. Типичное использование процедур и функций заключается в том что мы передаем в функцию какие то значения, на основе которых эта функция производить ряд действий и вычисление какого-то результата. Основное отличие процедур от функций в том, что имени функции ассоциирован какой-то тип возвращаемых данных, грубо говоря, функцию можно использовать в выражениях, например, арифметических или в логических, в условных операторах и циклах. Процедура вызывается вне какого-либо выражения.

Примеры.

Функция возвращает сумму двух чисел, передаваемых как фактические параметры в функция из внешней программы

Function sum(a,b as integer) as integer Sum=a+b

End function

Использование функции sum в программе. Dim x as integer

x = 2 x=x+sum(x,4)*2

Пример процедуры позволяющей сложить два числа, значение возвращается в формальном параметре с, при вызове процедуры не должно быть константой, а должно быть переменной типа integer

Sub sum(a,b,c as integer)

c = a+b End sub

Dim c as integer Call sum(2,2,c)

Создание макроса в LibreOffice

Для создания макроса в LibreOffice выбираем сервис+макросы+управление макросами+LibreOffice Basic (Tools+Macros+Organize Macros). При этом отобразится окно представленное на рисунке ниже (рисунок 1). Для того, чтобы макрос был сохранен в самом документе, необходимо выбрать ваш документ, выбрать набор стандартных модулей «standard» и затем нажать «создать», затем необходимо ввести имя модуля. После создания модуля можно его выбрать, в окошке справа выбрать макрос Main и нажать редактировать (Edit). Либо необходимо после создания модуля (Module1), написать в поле Macro Name (Имя макроса) новое имя макроса и нажать создать (рисунок 2).

 Рисунок 1 - Окно создания и редактирования макросов

 

 

Рисунок 2 - Пример создания нового макроса MyMainMacros

Рисунок 3 - Редактор Basic и два макроса

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

В LibreOffice, как уже отмечалось, объектная модель несколько другая нежели в Microsoft Office, в LibreOffice Basic используется так называемся унифицированная сетевая объектная модель UNO. Ниже приведен пример макроса openoffice увеличивающий размер шрифта каждого параграфа.

Sub Main

Dim Doc As Object

Dim Enum As Object

Dim TextElement As Object

'StarDesktop — главный объект доступный из макроса

'создание ссылки на объект document, текущий документ Doc = StarDesktop.CurrentComponent

'создание объекта enumeration

Enum = Doc.Text.createEnumeration

'цикл по всем текстовым элементам

While Enum.hasMoreElements TextElement = Enum.nextElement

'проверка является ли текущий блок таблицей

If TextElement.supportsService("com.sun.star.text.TextTable") Then

MsgBox "Текущий блок содержит таблицу"

End If

' проверка является ли текущий блок текста параграфом

If TextElement.supportsService("com.sun.star.text.Paragraph") Then

TextElement.CharHeight = 20

End If

Wend

' окошко с сообщением msgbox "Конец макроса" End Sub

Объект enumeration позволяет перебрать все элементы текста в цикле пока эти элементы не закончатся. Операция Enum.nextElement возвращает текущий элемент и переходит к следующему, где переменная Enum есть ссылка на объект созданный вызовом функции Doc.Text.createEnumeration. Очевидна иерархия объектов, в документе Doc есть свойство Text ссылающееся на текстовый объект документа, далее вызывается метод этого объекта createEnumeration, данный метод представляет собой функцию создающую объект Enumeration, при этом сам объект Doc является ссылкой на объект CurrentComponent объекта StarDesktop. В объекте на который ссылается Doc может быть не только свойство Text, но и другие, например, имя файла документа, активность данного документа и т. д., кроме, того в объекте могут быть и методы, например, закрыть документ, открыть, сделать активным, сохранить. StarDesktop представляет собой объект управления всеми текущими открытыми приложениями LibreOffice, CurrentComponent — является текущим активным документов LibreOffice, в общем случае это может быть ссылка и на документ Writer и на документ Calc (электронная таблица) и на документ Base (база данных). Далее для каждого параграфа, предварительно проверив, а действительно ли объект TextElement — параграф, устанавливаются свойства текста: TextElement.CharHeight = 20, что задает размера шрифта абзаца = 20.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: