Журнал LinuxFormat - перейти на главную

LXF142:First step

Материал из Linuxformat
Перейти к: навигация, поиск
Первые шаги Серия «Linux для новичков»

Содержание

OOo Basic: Есть автоматизация

Многократно по­вто­рять од­ну и ту же опе­ра­цию – скучища. Сэ­ко­номь­те свое вре­мя и уси­лия, сле­дуя ин­ст­рук­ци­ям Бо­ба Мос­са по мак­ро­сам.


Хо­тя при од­ной мыс­ли о необ­хо­ди­мо­сти на­пи­сания ко­да для ав­то­ма­ти­за­ции ти­по­вых за­дач вы мо­же­те чув­ст­во­вать, буд­то ва­ше серд­це прон­зи­ло ле­дя­ное лез­вие стра­ха, та­кой код мо­жет по­хва­стать­ся це­лым ря­дом пре­иму­ществ.

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

В хо­де это­го уро­ка вы смо­же­те за­ме­тить, что это от­лич­ный спо­соб рас­ши­рить су­ще­ст­вую­щий на­бор на­вы­ков, и уз­нае­те все по­пу­ляр­ные ком­понен­ты OpenOffice.Org офис­но­го па­ке­та немно­го луч­ше. Начнем…

Запись дей­ст­вий

Начнем с за­пи­си про­сто­го мак­ро­са для по­вто­ряю­щих­ся за­дач. На­при­мер, нуж­но соз­дать 10 но­вых пи­сем, и для ка­ж­до­го из них пе­рей­ти в ме­ню Файл > Соз­дать, сде­лать вы­равнивание по пра­во­му краю, вве­сти ад­рес, сде­лать вы­равнивание по ле­во­му краю, а за­тем сно­ва про­дол­жить. Од­на­ко вы мог­ли бы пе­рей­ти в Сер­вис > Мак­рос > Запись мак­ро­са, все это про­де­лать, на­жать кноп­ку Ос­та­но­вить запись и со­хранить это как LetterStart. Те­перь при ка­ж­дом со­став­лении пи­сем вы мо­же­те про­сто пе­рей­ти в Ин­ст­румен­ты > Мак­рос > Вы­полнить мак­рос… и вы­брать LetterStart, что­бы на­чать но­вое. Че­рез ка­кие-то се­кун­ды вы при­сту­пи­те к на­пи­санию основ­но­го тек­ста, вме­сто то­го, что­бы про­де­лы­вать все опе­ра­ции за­но­во.

Од­на­ко, за­пустив LetterStart несколь­ко раз, вы об­на­ру­жи­те, что ка­ж­дый раз ска­кать по пунк­там ме­ню то­же до­воль­но нуд­но. К сча­стью, мы мо­жем при­вя­зать мак­ро­сы к ме­ню, панели ин­ст­ру­мен­тов или со­че­танию кла­виш, что­бы уп­ро­стить про­цесс до од­но­го на­жа­тия кноп­ки или ком­би­на­ции кла­виш.

Для вы­полнения по­следнего, пе­рей­ди­те в Сер­вис > На­строй­ка…, а за­тем на вклад­ку Кла­виа­ту­ра. Здесь вы мо­же­те вы­брать лю­бую ком­би­на­цию кла­виш в со­от­вет­ст­вую­щем окне, а внизу свя­зать со­че­тание кла­виш с мак­ро­сом по­сред­ст­вом Мак­ро­сы > Поль­зо­ва­тель > Стан­дарт­ные > LetterStart. Щелкните ле­вой кноп­кой мы­ши на со­от­вет­ст­вую­щем мак­ро­се, а за­тем Из­менить или За­гру­зить для за­груз­ки скрип­та, ко­то­рый бу­дет при­вя­зан к ком­би­на­ции кла­виш по вы­бо­ру. По по­нят­ным при­чи­нам при этом ре­ко­мен­ду­ет­ся из­бе­гать час­то ис­поль­зуе­мых со­че­таний кла­виш, та­ких как Ctrl+C, Ctrl+V и Ctrl+P.

При­вяз­ка к ме­ню

Что­бы при­вя­зать мак­рос к ме­ню, пе­рей­ди­те в Т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

  • 1 Най­ди­те ор­га­най­зер
Пе­рей­ди­те к Ин­ст­ру­мен­ты > Мак­ро­сы > Ор­ганизо­вать Мак­ро­сы > OOo Basic… хо­тя вы так­же за­ме­ти­те, что OOo под­дер­жи­ва­ет мак­ро­сы на мно­же­ст­ве дру­гих язы­ков.

Шаг 2

  • 2 От­крой­те мо­дуль
По умол­чанию в ка­ж­дом до­ку­мен­те соз­да­ет­ся Мо­дуль 1; на­жми­те пра­вую кла­ви­шу мы­ши для ре­дак­ти­рования.

Шаг 3

  • 3 За­пусти­те ре­дак­тор
Те­перь, когда ок­но ре­дак­то­ра мак­ро­сов от­кры­то, вы прак­ти­че­­ски го­то­вы при­сту­пить к соз­данию мак­ро­са.

Шаг 4

  • 4 На­бе­ри­те код
По ме­ре на­пи­сания, код бу­дет под­цве­чи­вать­ся – что­бы луч­ше ви­зуа­ли­зи­ро­вать син­так­сис и вы­де­лить ошиб­ки.

Шаг 5

  • 5 От­лад­ка мак­ро­са
Ис­поль­зуй­те оп­цию Compile для крат­ко­го об­зо­ра или ис­поль­зуй­те кон­троль­ные точ­ки [Breakpoints] для раз­ре­шения менее оче­вид­ных про­блем.

Шаг 6

  • 6 За­пуск
Те­перь на­жми­те За­пуск Мак­ро­са и лю­буй­тесь про­цес­сом. Вы так­же мо­же­те при­вя­зать мак­рос к кла­ви­шам и со­бы­ти­ям.


Ge-OOo в го­ро­де

Пе­рей­ди­те по ссыл­ке http://extensions.services.openoffice.org/en/project/GeOOo – и вы по­лу­чи­те ру­ко­во­дство по соз­данию те­ма­ти­че­­ских карт. На слу­чай, ес­ли вы по­ка с ними не стал­ки­ва­лись – это кар­ты с гра­фи­че­­ски­­ми дан­ны­ми, и они мо­гут иметь под­цвет­ку ко­да или со­дер­жать кру­го­вые или столб­ча­тые диа­грам­мы для ка­ж­до­го ме­сто­по­ло­жения. Вы на­вер­ня­ка мо­же­те да­же соз­дать код луч­ше, а го­ры до­ку­мен­та­ции по­мо­гут вам стар­то­вать: в них вы най­де­те от­ве­ты на боль­шин­ст­во во­про­сов.

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

Функ­ция или под­про­грам­ма?

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

1: result=function()
2: runSubroutine()
Персональные инструменты
купить
подписаться
Яндекс.Метрика