Первые шаги разработки
Макросы в Calc
О проекте
Контакты
Полезные ссылки
Карта сайта
Вход для участников

Макросы, диалоги и библиотеки (Basic)

Введение в OpenOffice.org Basic Печать
Автор Mark Alexander Bain   
08.03.2008 г.

Перевод: BigAndy

Одним из свойств Open Office.org, которое некоторые пользователи упускают из вида, является встроенный язык программирования OpenOffice.org Basic. Для чего нужно встраивать язык программирования в ваш текcтовый процессор? Именно для того, чтобы автоматизировать часто выполняемые задачи. Чай за тебя не приготовит, но позволит автоматизировать часто выполняемую работу с минимумом усилий. 

Вы можете, например, захотеть сгенерировать данные из командной строки и представить их как таблицу в документе Writer или вы можете получить данные из других источников и сформатировать их для еженедельного отчета или письма клиенту. Каждая из этих задач требует значительных затрат времени, если их выполнять вручную, но OpenOffice.org Basic сможет помочь минимизировать время, которое вы проведете, выполняя рутинные вещи, и позволяет высвободить больше времени для более интересных занятий.

Создание макроса OpenOffice.org

Итак, как начать модификацию OpenOffice.org Writer с целью сделать его немножечко лучше? Для начала вы должны создать подпрограмму Basic или функцию, которые обычно именуются макросами.

Перейдите в меню Writer и кликните на пункте Сервис. Вы увидете подменю, называемое Макросы. Если вы поместите указатель мыши на него, увидете опции макросов, доступные для вас. Нас в данный момент интересует пункт Управление макросами. Из следующего подменю выберите OpenOffice.org Basic....

Image

Вам представится окно диалога, которое позволит выбрать новый макрос или выбрать уже существующий для редактирования. По умолчанию приложение создаст макрос с именем Main. Вы обнаружите, что находитесь в окне редактирования макроса и вы увидите нечто похожее на следующее:

Image

Теперь вы сможете создать свой первый макрос. По традиции начнем с «Hello, world»

Image

Выполнение макроса

Естественно, вы захотите увидеть результат вашей тяжкой работы. Вернитесь в окно OpenOffice.org Writer. Перейдите в меню и опять выберите меню Сервис -> Макросы. Теперь вы можете использовать либо пункт Управление макросами, либо просто использовать кнопочку Выполнить макрос на панели инструментов.

Существует второй, более простой и полезный способ выполнения макроса после того, как вы его отладили. Вы можете назначить макрос пунктам меню, клавиатурным сокращениям и событиям.
Для того, чтобы назначить макрос и просмотреть полный список возможных действий, вернитесь обратно в окно Управление макросами. Когда вы нажмете кнопку Назначить, увидите все возможные опции.

Image

Более сложный макрос

Теперь посмотрим на макрос OpenOffice.org Basic, который имеет практическое применение. Следующий пример макроса преобразует документ, который использует Английский язык Великобритании в Американский Английский диалект.

Image

Если вы прежде использовали Visual Basic или VBScript в Windows, вы должны узнать основной формат и функциональность. Если нет, возможно, понадобится небольшое объяснение.

Записаны две подпрограммы: toUsaSpelling и doReplace. Подпрограмма toUsaSpelling создает два массива searchArray и replaceArray, содержащие английские слова и их американские эквиваленты. Она (подпрограмма) далее пошагово перебирает вышеупомянутый массив и вызывает подпрограмму doReplace, которая через две входные переменные и заменяет одно слово другим во всем документе OpenOffice.org.

OpenOffice.org Basic использует все типы привычных циклов и управляющих структур, которые вы найдете в любом языке программирования, наравне с некоторыми, пришедшими непосредственно из Visual Basic. Например, doReplace использует функцию ubound,котроая возвращает наибольший номер индекса массива. Эта функция полезна в циклах, так как в этом случае вам не надо отслеживать текущий размер массива.

Заметьте, что doReplace ссылается на ThisComponent. ThisComponent представляет текущий документ OpenOffice.org.

Следующее: Вставка информации из внешнего файла.

Заполнение данных в таблицы может стать самой затратной по времени частью при создании отчета, но таблицы делают документ более читабельным, так что стоит побеспокоиться об автоматизации процесса. Следующий макрос открывает файл и загружает данные из него в таблицу. Таким образом, таблица заполняется значениями полей имени пользователя и домашней директории из файла /etc/passwd:

Sub doPasswdTable
Dim filenumber As Integer
Dim lineNumber As Integer
Dim lineCount As Integer
Dim iLine As String
Dim file as String
Dim doc as object
Dim table as object
Dim cursor as object
Dim cellname as object
Dim cell as object
file = "/etc/passwd"
    'Get line count
    lineCount = 0
    filenumber = Freefile
    Open file For Input As filenumber

While not EOF(filenumber)
    Line Input #filenumber, iLine
        If iLine <> "" then
        lineCount = lineCount + 1
        end if
    wend
Close #filenumber

doc = thisComponent
cursor=doc.text.createTextCursor()
table=doc.createInstance("com.sun.star.text.TextTable")
table.initialize(lineCount+1,2)
doc.Text.insertTextContent(cursor,table,False)

cell = table.getCellByName("A1")
cell.string="Username"
cell = table.getCellByName("B1")
cell.string="Home Directory"

filenumber = Freefile
lineNumber = 2
Open file For Input As filenumber
While not EOF(filenumber)
    Line Input #filenumber, iLine
        If iLine <> "" then
        Dim iArray
        iArray = split(iLine,":")
        cell = table.getCellByName("A" & lineNumber)
        cell.string=iArray(0)
        cell = table.getCellByName("B" & lineNumber)
        cell.string=iArray(5)
        lineNumber = lineNumber + 1
        end if
    wend
Close #filenumber
End Sub

 

Большая часть кода достаточно стандартна - вы можете видеть пример операторов циклов while..wend и if..end if. Вы также можете обратить внимание на оператор doc=thisComponent; который позволяет нам ссылаться на doc вместо более длинного обозначения thisComponent.

Неочевидная деталь: синтаксис Basic не регистрозависимый. Поэтому оператор cell = table.getCellByName("A" & lineNumber) будет выполняться так же, как CELL = table.getcellbyname("A" & LINENUMBER). Мы применяем верхние и нижние регистры только для того, чтобы было легче читать.

Строка filenumber = Freefile присваивает значение уникального идентификатора ID переменной номера файла для того, чтобы вам не было необходимым запоминать любые другие уже назначенные ID.

Команда split особенно полезна. Она получает в качестве входных данных строку и возвращает массив подстрок данной строки, разбитой по разделителю, который вы указали. В вышеприведенном примере мы использовали двоеточие (:) для определения разделителя в файле паролей.

И последнее: одна строка может показаться странной на первый взгляд: Open file For Input As filenumber.
Она указывает на тот факт, что мы используем это как вход для подпрограммы, а не то, что мы собираемся в неё что-то передавать

В заключение:

Мы привели кратчайшее из возможных введений в использование Basic в OpenOffice.org Writer. Мы не рассматривали использование форм, вызовы из других документов, или то, как получать данные из баз данных.

Если вы хотите узнать больше о программировании в OpenOffice.org Basic, то OpenOffice.org поставляется со справкой, в которой есть список всех функций и процедур, которые возможны[1].

OpenOffice.org Basic - полезный инструмент для автоматизации каждодневных задач - ещё один путь для более разумного подхода к работе.

Обсудить на форуме...

  • [1] правильнее - «определены» прим.пер.
Последнее обновление ( 25.08.2012 г. )
 
След. »

Главная arrow Макросы, диалоги и библиотеки (Basic) arrow Введение в OpenOffice.org Basic

MyOOo.ru, 2008 — 2017. Хостинг предоставлен компанией Netangels