- Подписка на печатную версию:
- Подписка на электронную версию:
- Подшивки старых номеров журнала (печатные версии)
LXF142:First step
Материал из Linuxformat.
- Первые шаги Серия «Linux для новичков»
Содержание |
OOo Basic: Есть автоматизация
- Многократно повторять одну и ту же операцию – скучища. Сэкономьте свое время и усилия, следуя инструкциям Боба Мосса по макросам.
Хотя при одной мысли о необходимости написания кода для автоматизации типовых задач вы можете чувствовать, будто ваше сердце пронзило ледяное лезвие страха, такой код может похвастаться целым рядом преимуществ.
Упрощение и автоматизация задач упрощает жизнь, а в придачу повышает вашу продуктивность. Прежде чем вырубаться в тяжкий сон перед компьютером или давиться руководством по программированию, вы будете рады узнать, что горю легко помочь, загрузив шаблон, применив модуль расширения или записав набор действий парой нажатий кнопки, даже не задумываясь об изучении разницы между подпрограммами и функциями.
В ходе этого урока вы сможете заметить, что это отличный способ расширить существующий набор навыков, и узнаете все популярные компоненты OpenOffice.Org офисного пакета немного лучше. Начнем…
Запись действий
Начнем с записи простого макроса для повторяющихся задач. Например, нужно создать 10 новых писем, и для каждого из них перейти в меню Файл > Создать, сделать выравнивание по правому краю, ввести адрес, сделать выравнивание по левому краю, а затем снова продолжить. Однако вы могли бы перейти в Сервис > Макрос > Запись макроса, все это проделать, нажать кнопку Остановить запись и сохранить это как LetterStart. Теперь при каждом составлении писем вы можете просто перейти в Инструменты > Макрос > Выполнить макрос… и выбрать LetterStart, чтобы начать новое. Через какие-то секунды вы приступите к написанию основного текста, вместо того, чтобы проделывать все операции заново.
Однако, запустив LetterStart несколько раз, вы обнаружите, что каждый раз скакать по пунктам меню тоже довольно нудно. К счастью, мы можем привязать макросы к меню, панели инструментов или сочетанию клавиш, чтобы упростить процесс до одного нажатия кнопки или комбинации клавиш.
Для выполнения последнего, перейдите в Сервис > Настройка…, а затем на вкладку Клавиатура. Здесь вы можете выбрать любую комбинацию клавиш в соответствующем окне, а внизу связать сочетание клавиш с макросом посредством Макросы > Пользователь > Стандартные > LetterStart. Щелкните левой кнопкой мыши на соответствующем макросе, а затем Изменить или Загрузить для загрузки скрипта, который будет привязан к комбинации клавиш по выбору. По понятным причинам при этом рекомендуется избегать часто используемых сочетаний клавиш, таких как Ctrl+C, Ctrl+V и Ctrl+P.
Привязка к меню
Нажатие на клавишу Esc закроет все созданные вами диалоговые окна.
Чтобы привязать макрос к меню, перейдите в Тools > Настройка… > Меню. Выберите Инструменты в соответствующем выпадающем списке, затем выберите, где в этом меню вы хотите создать специальное подменю для ваших личных макросов. Нажмите кнопку Изменить > Добавить подменю… и дайте какое-нибудь запоминающееся название, типа Личные Макросы.
Теперь вернитесь в выпадающее меню, которое вы использовали до этого, выберите Инструменты > Личные макросы и нажмите кнопку Добавить… Найдите свой макрос через OpenOffice.org > Мои Макросы > Стандартные, а затем нажмите LetterStart, как раньше. Нажмите кнопку ОК, чтобы применить изменения, и теперь ваш макрос будет доступен в Инструменты > Личные Макросы. Создание привязки к панели управления осуществляется таким же образом, и это можно сделать через Инструменты > Настройка… > Панели задач.
Другой пример – создание специальной формы для заполнения, чтобы респондент, нажав специальную кнопку в низу этой формы, возвращал информацию по электронной почте через локальный почтовый клиент. Как и прежде, вам потребуется создать кнопку и ввести код для присоединения сохраненного документа к соответствующему электронному письму и его отправки. Это можно сделать через слияние почты (как мы описывали в LXF138) или с помощью макроса.
Поддержка Microsoft
Если вы часто гоняете документы между электронными таблицами OpenOffice.org и Microsoft Office, вас порадует, что OpenOffice.org поддерживает макросы VBA от Microsoft (Visual Basic для приложений) – по крайней мере, частично. Менее приятно будет услышать, что не каждый дистрибутив или сборка этого офисного пакета обеспечивает тот же (или вообще какой-либо) уровень поддержки. Например, последние версии Ubuntu работают с Go-OO билдом OpenOffice.org и, следовательно, обеспечивают поддержку макросов Microsoft Office, а OpenOffice.org PPA – нет.
Единственный способ обеспечить поддержку макросов VBA, не создавая свой бинарник – это установить Go-oo/Oxygen Office производные OpenOffice.org либо OpenSUSE. Да, вы все прочли верно. Novell и бывший Sun работали совместно по поддержке макросов, и пользователи OpenSUSE наслаждаются частичной поддержкой макросов VBA, начиная с версии 7.
Однако, используя версию OOo с поддержкой макросов, вы заметите, что при открытии документа с макросами из Microsoft Office ваши макросы молчат и OpenOffice.org, кажется, не замечает даже их существования. Это потому, что по умолчанию в OpenOffice.org макросы Microsoft Office из соображений безопасности отключены. Чтобы включить их, откройте ваш Органайзер макросов и добавьте следующую строку в начало каждого модуля кода:
Option VBASupport 1
Не робейте, если вы пока не знаете, что такое модули – мы сейчас их рассмотрим. В некоторых версиях OpenOffice.org надо также раскомментировать все строки кода. Добавленная строка должна (в большинстве версий) пресечь устрашающего вида сообщение об ошибке в OOo, и вы можете также настроить настройки VBA макроса с помощью Инструменты > Параметры… > Загрузка/Сохранение > Свойства VBA.
И, наконец, стоит отметить, что, хотя поддержка макросов продолжает улучшаться, она по-прежнему несовершенна. Большинство общих объектов и методов будут работать, но если разработчик макросов был особо эксцентричным в выборе методов кодирования, использовал супер-новые функции или специальные объекты Windows, ждите проблем.
В реальности, в продуктиве, где у вас должна быть родная поддержка макросов VBA, нужно либо запустить Microsoft Office на виртуальной машине, либо запустить указанный офисный пакет в последней версии среды Wine, в которой имеются Windows Script Host и уже установленный VB6. Для получения подробной информации по ним, см. http://appdb.winehq.org – поищите там свою версию Microsoft Office.
Креативная вставка
Зайдите на http://extensions.services.openoffice.org/de/project/DataForm и отыщите модуль расширения под названием Форма для данных. И хотя вы могли бы просто написать что-то похожее сами (или использовать OOo Base), можно скачать OXT-файл, открыть его в OOo Calc, а затем насладиться вводом данных гораздо быстрее, чем было бы без него (пример показан справа).
После установки можно сразу использовать форму, просто набрав необходимое количество заголовков, выделив их и перейдя к Данные > Форма данных… Заполните строки, выберите Новый, и вы увидите данные, примененные к ряду. Можно использовать Следующая запись и Последняя запись для переключения между строками информации, удаления и восстановления записей.
В ногу со временем
Если ни макросы, ни модули расширения вас не интересуют, вы будете рады узнать, что можно создать довольно сложную функциональность, пользуясь готовыми средствами OpenOffice.org Calc. Скажем, скачайте шаблон с http://extensions.services.openoffice.org/en/project/Calendartemplate, автоматически генерирующий календарь месяца в таблице, готовой к печати. Тонкая настройка желтой области будет показывать личные события в этом календаре, а перемещение по месяцу позволяет также печатать будущие или предыдущие месяцы. Вот отличный пример того, что можно сделать при минимуме знаний о функциях OOo Calc и некоторой изобретательности, и этому действительно стоит уделить время.
OOo Basic: Свой личный макрос
- Увеличьте продуктивность вашего программного кода с помощью макросов в программах Openoffice.org – например, Calc.
Рассмотрев, как записать макрос и облегчить его запуск, и убедившись, что OpenOffice.org совместим с макросами, полученными от ваших друзей в файлах Microsoft Office, создадим-ка собственный макрос. К сожалению, у нас здесь нет места на объяснения, как программировать, и если вы совсем не знакомы с OpenOffice.org Basic, рекомендуем руководство по языку: http://wiki.services.openoffice.org/wiki/Documentation/BASIC_Guide.
Мы начнем с загрузки другой таблицы в OOo Calc. Следуйте пошаговому руководству на следующей странице для запуска Visual Code Editor, затем введите следующий код:
sub main loadNewFile(“scalc”) end sub sub loadNewFile(fileType as string) dim doc as object, desk as object, fileLaunch as string, Dummy() fileLaunch=“private:factory/” & filetype desk = CreateUnoService(“com.sun.star.frame.Desktop”) doc = desk.loadComponentFromUrl(fileLaunch,”_blank”,0,Dummy()) end sub
Разберемся в этом коде. Первая подпрограмма называется main; она запускает другую подпрограмму, под названием loadNewFile. Так полагается делать, поскольку при этом легко расширить функциональность макроса, добавив в main новую подпрограмму. Однако заметьте, что мы вписали термин scalc в кавычках – вдруг мы захотим применять loadNewFile также и для запуска Writer? Тогда мы вставим туда swriter.
В программе load вряд ли найдется что-то сложное даже для новичка. Мы определяем переменные и сохраняем их значения, чтобы определить, как мы будем ссылаться на новый документ. Мы также присоединяем fileType к переменной fileLaunch, поскольку это переменная, содержащая кусок OpenOffice.org для запуска. Строка перед end sub отвечает за объединение всех введенных данных и запуск OOo Calc.
Расчет значений
Интересно, конечно, доставать своих друзей макросом, отсылающим им электронные письма с пустым вложением, но вы наверняка уже задумались, когда же мы приступим к созданию какого-нибудь полезного кода. Так вот, вы дождались своего: сейчас мы выполним всякие арифметические операции со значениями, помещенными в вашей таблице. Пусть мы хотим прибавить A1 к B5, а сумму записать в C8. Мы можем сделать это с помощью такого куска кода:
sub doMaths dim sheet as object, cell as object sheet=thisComponent.sheets.getByName(“Sheet1”) cell=sheet.getCellByPosition(2,7) cell.formula=”=B5+A1” end sub
Этот скрипт захватывает данные из листа (Sheet1, в нашем случае), перемещает курсор в ячейку C8 и изменяет формулу в ячейке для подсчета нужного значения. Откуда мы знаем, что C8 находится в (2,7)? Потому что A1 – это (0,0). Пользователи Microsoft Office сочтут такой метод обращения к ячейкам странным, но вы к нему быстро привыкнете.
А если мы хотим выделить ошибки с помощью диалогового окна? Это особенно полезно, если вы хотите выделить в своей таблице нечто важное – или возможную ошибку. Можно также добавить sub do Maths:
on error goto myLabel
Прямо перед end sub добавьте:
myLabel: msgbox(“An error has occurred”)
Теперь вы видите, что в случае ошибки мы пропустим все строки перед myLabel и выведем для пользователя сообщение об ошибке.
Все, что было продемонстрировано на нашем уроке – лишь вершина айсберга. Продуктивность, которой вы можете добиться, научившись писать макросы, невероятна, особенно учитывая, что OpenOffice.org поддерживает несколько языков, включая JavaScript, Python и другие. Вы найдете больше информации и полезные ресурсы на сайте http://www.ooomacros.org.
Шаг за шагом: Создаем макрос в ООо Basic
- 1 Найдите органайзер
- Перейдите к Инструменты > Макросы > Организовать Макросы > OOo Basic… хотя вы также заметите, что OOo поддерживает макросы на множестве других языков.
- 2 Откройте модуль
- По умолчанию в каждом документе создается Модуль 1; нажмите правую клавишу мыши для редактирования.
- 3 Запустите редактор
- Теперь, когда окно редактора макросов открыто, вы практически готовы приступить к созданию макроса.
- 4 Наберите код
- По мере написания, код будет подцвечиваться – чтобы лучше визуализировать синтаксис и выделить ошибки.
- 5 Отладка макроса
- Используйте опцию Compile для краткого обзора или используйте контрольные точки [Breakpoints] для разрешения менее очевидных проблем.
- 6 Запуск
- Теперь нажмите Запуск Макроса и любуйтесь процессом. Вы также можете привязать макрос к клавишам и событиям.
Ge-OOo в городе
Перейдите по ссылке http://extensions.services.openoffice.org/en/project/GeOOo – и вы получите руководство по созданию тематических карт. На случай, если вы пока с ними не сталкивались – это карты с графическими данными, и они могут иметь подцветку кода или содержать круговые или столбчатые диаграммы для каждого местоположения. Вы наверняка можете даже создать код лучше, а горы документации помогут вам стартовать: в них вы найдете ответы на большинство вопросов.
Здесь грамотно используются различные части офисного пакета, функции и макросы, чтобы создать нечто выдающееся; прекрасный пример, как можно выйти за пределы данного урока.
Функция или подпрограмма?
Программисты-новички часто по ошибке забывают о разнице между функциями и подпрограммами. Поясним: обе имеют аргументы, выполняют свой кусок кода и могут быть вызваны другими функциями и подпрограммами. Однако функция возвращает значение, а подпрограмма – нет; это означает, что для хранения результата функции вам придется определять переменную (см. Строка 1), а для подпрограммы этого не требуется (Строка 2).
1: result=function() 2: runSubroutine()