Logo LibreOffice

Začínáme s LibreOffice 24.8

Kapitola 11,
Začínáme s makry

Používání záznamu maker … a další

Autorská práva

Tento dokument je chráněn autorskými právy © 2024 týmem pro dokumentaci LibreOffice. Přispěvatelé jsou uvedeni níže. Dokument lze šířit nebo upravovat za podmínek licence GNU General Public License (https://www.gnu.org/licenses/gpl.html), verze 3 nebo novější, nebo the Creative Commons Attribution License (https://creativecommons.org/licenses/by/4.0/), verze 4.0 nebo novější.

Všechny ochranné známky uvedené v této příručce patří jejich vlastníkům.

Přispěvatelé

Pro toto vydání

Rafael Lima, B. Antonio Fernandez, Olivier Hallot,

Pro předchozí vydání

Jean Hollis Weber, Felipe Viggiano,Kees Kriek, Olivier Hallot, Rafael Lima, Peter Schofield, Andrew Pitonyak, Hazel Russman, Steve Fanning, Martin Fox, Andrew Jensen, Ron Faile Jr., Valerii Goncharuk, Skip Masonsmith, Flywire.

Zpětná vazba

Jakékoli připomínky nebo návrhy k tomuto dokumentu prosím směřujte do fóra dokumentačního týmu na adresu https://community.documentfoundation.org/c/documentation/loguides/ (registrace je nutná) nebo pošlete e-mail na adresu: loguides@community.documentfoundation.org.

Všechno, co zašleme do konference, včetně e-mailové adresy a dalších osobních údajů, je umístěno ve veřejném archivu a obsah nelze smazat. E-maily zaslané do fóra jsou moderovány.

Datum vydání a verze programu

Vydáno Srpen 2024. Založeno na LibreOffice 24.8 Community.
Jiné verze LibreOffice se mohou lišit vzhledem a funkčností.

Používání LibreOffice na systému macOS

Některé klávesové zkratky a položky nabídek jsou v systému macOS jiné než v systémech Windows a Linux. V následující tabulce jsou uvedeny nejdůležitější rozdíly, které se týkají informací uvedených v tomto dokumentu. Podrobný seznam nalezneme v nápovědě aplikace.

Windows nebo Linux

Ekvivalent pro macOS

Akce

Nástroje > Možnosti
výběr nabídky

LibreOffice > Předvolby

Otevřou se možnosti nastavení.

Klepnutí pravým tlačítkem

Control + klepnutí, nebo klepnutí pravým tlačítkem v závislosti na nastavení počítače

Otevře se místní nabídka.

Ctrl (Control)

(Command)

Používá se také s dalšími klávesami.

Alt

⌥ (Option) nebo Alt, v závislosti na klávesnici.

Používá se také s dalšími klávesami.

F11

⌘ + T

Otevře kartu Styly v Postranní liště

 

Úvod

Makro je posloupnost příkazů nebo stisků kláves uložených za účelem pozdějšího použití. Jednoduché makro například umožňuje zadat adresu do otevřeného dokumentu a makro může automatizovat jednoduché i složité úlohy. Makra jsou velmi užitečné tehdy, když potřebujeme stejnou úlohu stejným způsobem mnohokrát zopakovat.

Nejjednodušší způsob, jak vytvořit makro, je zaznamenat sérii akcí pomocí uživatelského rozhraní LibreOffice prostřednictvím skriptovacího jazyka LibreOffice Basic (implementace známého programovacího jazyka BASIC). Tato makra lze po nahrání upravovat a vylepšovat pomocí integrovaného vývojového prostředí (IDE) LibreOffice Basic.

Nejvýkonnější makra v LibreOffice lze vytvořit pomocí jednoho ze čtyř podporovaných skriptovacích jazyků (LibreOffice Basic, Python, JavaScript a BeanShell). Tato kapitola obsahuje přehled maker v kancelářském balíku LibreOffice s důrazem na výchozí skriptovací jazyk maker, LibreOffice Basic. Přestože jsou zahrnuty některé úvodní příklady skriptovacích jazyků BeanShell, JavaScript a Python, podrobná diskuse o použití těchto jazyků pro skriptování přesahuje rámec této kapitoly.

Moje první makro

Přidání makra

Pro začátek práce s makry LibreOffice doporučujeme najít a použít existující makra. Předpokládáme, že máme existující makro, které chceme použít a které jsme původně našli v nějaké knize nebo na internetu. V tomto příkladu je použito makro z výpisu 1 . Jakmile máme makro, vytvoříme knihovnu a modul, který bude makro obsahovat; vytvoření knihovny maker je popsáno níže, ale další informace najdeme v části „Správa maker“ na straně 1 .

Výpis 1: Jednoduché makro, které nás pozdraví

Sub MacroAhoj

  Print "Ahoj“

End Sub

Pro vytvoření knihovny obsahující naše makro postupujeme podle těchto kroků:

  1. Spustíme kteroukoliv aplikaci z balíku LibreOffice.

  2. Zvolením Nástroje > Makra > Správce maker > Basic otevřeme dialogové okno Makra v Basicu (obrázek 1).

  3. Klepneme na Organizátor, čímž otevřeme okno Organizátor maker LibreOffice Basic (obrázek 2). V něm zvolíme kartu Knihovny.

  4. V seznamu Umístění zvolíme položku Moje makra a dialogová okna, což je standardní místo pro ukládání maker.

  5. Klepnutím na Nový otevřeme okno Nová knihovna (zde není zobrazena).

  6. Zadáme název knihovny, například TestLibrary a klepneme na OK.

  7. V dialogovém okně Organizátor maker Basicu zvolíme kartu Moduly (obrázek 3).

  8. V seznamu Moduly rozbalíme položku Moje makra a vybereme knihovnu (v příkladu TestLibrary). V ní již existuje položka Module1, kam můžeme makro uložit. Případně můžeme stiskem Nový vytvořit v knihovně jiný modul.

  9. Zvolíme Module1 nebo nově vytvořený modul a klepneme na Upravit, čímž se otevře okno integrovaného vývojového prostředí (angl. Integrated Development Environment, IDE) (obrázek 4). IDE je textový editor, začleněný do LibreOffice, který umožňuje vytváření, úpravu, spouštění a debugování maker.

Dialogové okno Makra v Basicu

Obrázek 1: Dialogové okno Makra v Basicu

Dialogové okno Organizátor maker LibreOffice Basic, karta Knihovny

Obrázek 2: Dialogové okno Organizátor maker LibreOffice Basic, karta Knihovny

  1. Nový modul po vytvoření obsahuje pouze poznámku a jedno prázdné makro s názvem Main, které nic nedělá.

  2. Pokud jsme připraveni, přidáme nové makro buď před Sub Main, nebo za End Sub. Výpis 2 zobrazuje nové makro, které bylo přidáno před Sub Main.

Dialogové okno Organizátor maker Basicu, karta Moduly

Obrázek 3: Dialogové okno Organizátor maker Basicu, karta Moduly

Okno IDE (integrované vývojové prostředí) aplikace LibreOffice Basic

Obrázek 4: Okno LibreOffice Basic IDE (integrované vývojové prostředí)

Výpis 2: Module1 po přidání nového makra

REM  *****  BASIC  *****

 

Sub MacroAhoj

  Print "Ahoj“

End Sub

 

Sub Main

 

End Sub

Pokud chceme, můžeme odstranit kód Sub MainEnd Sub z Modulu a ponecháme pouze podprogram HelloMacro.

  1. (Nepovinné) Chceme-li zkontrolovat, zda je makro zapsáno podle očekávání programovacího jazyka LibreOffice Basic, klepneme na ikonu Zkompilovat na nástrojové liště Makra.

  2. Dvojitým klepnutím na podprogram HelloMacro v okně Katalog objektů pod TestLibrary > Module 1 a klepnutím na ikonu Spustit na nástrojové liště Makro nebo stisknutím klávesy F5 spustíme podprogram HelloMacro v modulu. Objeví se malé dialogové okno s textem "Ahoj" (viz dále).

Dialogové okno s výsledky příkazu Tisk.

Obrázek 5: Dialogové okno s výsledky příkazu Tisk.

  1. Klepnutím na tlačítko OK okno zavřeme.

  2. Pokud není vybrán žádný podprogram nebo funkce, otevře se dialogové okno jako na obrázku 6 . Poté vybereme požadované makro a klepnutím na Spustit jej spustíme.

  3. Pokud se v modulu nachází více maker a chceme spustit jedno z nich, můžeme také klepnout na ikonu Vybrat makro na Standardní nástrojové lišty nebo přejdeme do nabídky Nástroje > Makra > Správce maker > Basic.

  4. Poté vybereme požadované makro a klepneme na Spustit.

img_GS24811_006

Obrázek 6: Dialogové okno pro výběr a spuštění makra

Záznam makra

Při záznamu makra v LibreOffice vlastně  používáme programovací jazyk k záznamu kroků potřebných k provedení určitého úkolu. Pokud například musíme do dokumentu opakovaně zadávat stejné informace, můžeme vytvořit makro, které tyto informace automaticky zadá, aniž bychom je museli pokaždé kopírovat.

Někdy může být lepší vytvořit automatický text, který může opakovaně zadávat informace do dokumentu. Více informací se nachází v kapitole 2 – Základy práce s textem v příručce Writer Guide.

Nejprve povolte nahrávání maker v LibreOffice na stránce Nástroje > Možnosti > LibreOffice > Pokročilé a vybereme možnost Povolit záznam maker v části Volitelné funkce. Ve výchozím nastavení je tato funkce v LibreOffice vypnuta.

  1. Záznam makra spustíme zvolením Nástroje > Makra > Zaznamenat makro. Otevře se malé okénko s tlačítkem Zastavit nahrávání, které indikuje, že probíhá záznam makra.

  2. Při spuštění tohoto makra zadáme požadovaný text, který chceme vložit. Jako příklad můžeme napsat své jméno.

  3. Klepneme na tlačítko Zastavit nahrávání zobrazené v malém dialogovém okně. To způsobí otevření dialogového okna Makra v jazyku Basic (podobně jako na obrázku 1  na stránce 1, ale s různými akčními tlačítky.

  4. V něm otevřeme kontejner s knihovnami Moje makra.

  5. V kontejneru Moje makra najdeme knihovnu Standard. Upozorňujeme, že každý kontejner obsahuje knihovnu Standard.

  6. Vybereme knihovnu Standard a následně vybereme existující modul, do kterého makro uložíme. Další možností je klepnout na Nový modul a vytvořit nový modul obsahující nově zaznamenané makro.

  7. Do textového pole Název makra v levé horní části dialogového okna zadáme název makra, které jsme právě nahráli, například VlozitMojeJmeno.

  8. Klepnutím na Uložit makro uložíme a zavřeme dialogové okno Makra v jazyku Basic.

Pokud jsme postupovali podle výše uvedeného postupu, máme nyní ve zvoleném modulu vytvořeno makro s názvem VlozitMojeJmeno.

Kdykoliv vytvoříme v LibreOffice nový modul, automaticky se do něj přidá makro Main.

Spuštění makra

  1. Přejdeme na Nástroje > Makra > Spustit makro a otevřeme dialogové okno Výběr makra (obrázek 7).

  2. Například vybereme nově vytvořené makro VlozitMojeJmeno a klepneme na tlačítko Spustit.

  3. Případně přejdeme do Nástroje > Makra > Správce maker > Basic a otevřeme dialogové okno Makra v Basicu (obrázek 1), vybereme naše makro a klepneme na Spustit.

img_GS24811_007

Obrázek 7: Dialogové okno Výběr makra slouží k výběru a spuštění existujícího makra

Zobrazení a úprava maker

Chceme-li zobrazit a upravit vytvořené makro:

  1. Volbou Nástroj > Makra > Správce maker > Basic otevřeme dialogové okno Makra v Basicu.

  2. Vybereme naše nové makro VlozitMojeJmeno a klepneme na Edit. Otevře se Basic IDE a makro VloziMojeJmeno se zobrazí tak, jak je znázorněno ve výpisu 3.

Toto první makro není složité (viz výpis 3):

Výpis 3: Kód zaznamenaný pro makro VlozitMojeJmeno

sub VlozitMojeJmeno

rem -------------------------------------------------------------

rem Definice proměnných

dim document   as object

dim dispatcher as object

rem -------------------------------------------------------------

rem Získání přístupu k dokumentu

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 = "Vaše jméno"

dispatcher.executeDispatch(document, ".uno:InsertText", "", 0, args1())

end sub

Zakomentování pomocí REM

Poznámky v jazyce Basic začínají klíčovým slovem REM, což je zkratka slova remark (poznámka). Veškerý text na řádku, který začíná písmenem REM, je při spuštění makra interpretem jazyka Basic ignorován.

Pro začátek komentáře můžeme použít zkratku v podobě jednoduché uvozovky (').

LibreOffice Basic nerozlišuje malá a velká písmena, a tak poznámku můžeme začít stejně pomocí REM, Rem, nebo rem. Pokud však využíváme symbolické konstanty definované aplikačním rozhraním (angl. Application Programming Interface, API), je lepší předpokládat, že se v jejich názvech malá a velká písmena rozlišují. Stojí za zmínku, že symbolické konstanty jsou pokročilým tématem, kterému se tato uživatelská příručka nevěnuje, a při používání záznamníku maker v LibreOffice nejsou vyžadovány.

Definování podprogramů pomocí SUB

Jednotlivá makra jsou uloženy jako podprogramy jazyka Basic, které začínají klíčovým slovem SUB Konec podprogramu je označen slovy END SUB. Kód začíná definicí podprogramu (makra) s názvem Main (překl. Hlavní), který je prázdný a nedělá nic. Všimněme si, že kód ve výpisu 3  pro makro VlozitMojeJmeno začíná slovek SUB a končí sEND SUB.

Některá pokročilá témata o programování v jazyce Basic jsou sice mimo rozsah tohoto manuálu, nemusí však být na závadu, pokud o nich budeme vědět:

Definování proměnných pomocí DIM

Při definování proměnné (která obsahuje data) bychom měli použít klíčové slovo DIM, které původně znamenalo Dimension a používalo se k definování rozměrů pole. Příkaz DIM použitý v makru VlozitMojeJmeno je podobný jako bychom si odložili stranou papír, který se použije k zapsání zprávy nebo poznámky.

V makru VlozitMojeJmeno jsou proměnné document (dokument) a dispatcher (dispečer) definovány jako proměnné typu object (objekt). Jiné obvyklé typy proměnných jsou string (textový řetězec), integer (celé číslo) a date (datum). Třetí proměnná s názvem args1 je pole prvků, které představují hodnoty vlastností. Proměnná typu pole umožňuje, aby jedna proměnná obsahovala více hodnot, podobně jako když se do jedné knihy uloží více stránek. Hodnoty v poli obvykle začínají nulou. Číslo v závorce určuje nejvyšší číslo, které můžeme použít při přistupování k prvkům pole. V našem případě to je jeden prvek s číslem 0.

Vysvětlení kódu makra

V této části si vysvětlíme význam jednotlivých příkazů ve zdrojovém kódu makra VlozitMojeJmeno.

sub VlozitMojeJmeno

Definuje začátek makra VlozitMojeJmeno.

dim document as object

Definuje document jako objektovou proměnnou. Objekty jsou specifickým typem proměnné s více poli (někdy se nazývají vlastnosti) a akce (také se nazývají metody). Pole lze vnímat jako proměnné (včetně objektu) a akce jako podprogramy, které nám umožňují pracovat s objektem.

Někdy se používá slovo služba. Služba je objektem poskytována, když ji makro přikáže prostřednictvím metody objektu.

dim dispatcher as object

Definuje dispatcher jako objektovou proměnnou.

document = ThisComponent.CurrentController.Frame

ThisComponent je objekt vytvářený LibreOffice při běhu makra, který reprezentuje aktuální dokument.

CurrentController je vlastnost, která zpřístupňuje službu, která řídí práci s dokumentem. Například, pokud píšeme, ovladač CurrentController zaznamenává znaky, které zadáváme. CurrentController pak změny odesílá do rámce (angl. Frame) dokumentu.

Frame je vlastnost ovladače, která zpřístupňuje hlavní rámec (zobrazenou část) dokumentu. Proto proměnná se jménem document odkazuje na rámec dokumentu, který přijímá odeslané příkazy.

dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

Většina úloh se v LibreOffice provádí prostřednictvím odesílání (angl. Dispatching) příkazů. LibreOffice zahrnuje službu DispatchHelper service, která poskytuje snadný způsob odeslání adresy URL pomocí jednoho volání namísto více volání a většinu práce dělá při použití odesílání v makrech. Metoda CreateUnoService přijímá název této služby a snaží se vytvořit její instanci. Po provedení proměnná dispatcher obsahuje referenci na DispatchHelper.

dim args1(0) as new com.sun.star.beans.PropertyValue

Deklaruje pole vlastností args1. Každá vlastnost má název a hodnotu. Jinými slovy, je to pár název/hodnota. Toto vytvořené pole má jen jednu vlastnost s indexem 0.

Výraz com.sun.star.beans.PropertyValue je struktura Universal Network Objects (UNO). Struktury jsou speciální typy proměnných, které obsahují další logicky spojené proměnné. Může být výhodné pracovat se sadami různorodých informací, které by měly být považovány za jeden celek.

Vysvětlení struktur UNO a uživatelských struktur přesahuje rámec této knihy. Další informace o vytváření a používání struktur najdeme v nápovědě LibreOffice a dalších příručkách Basic.

args1(0).Name = "Text"

args1(0).Value = "Vaše jméno"

Vlastnosti přiřazuje název „Text“ a hodnotu „Zadané jméno autora“, což je text, který byl zadán během záznamu makra.

dispatcher.executeDispatch(document, ".uno:InsertText", "", 0, args1())

Odesílací služba (dispatch helper) pošle odesílané údaje rámci dokumentu (uloženém v proměnné se jménem document) pomocí příkazu .uno:InsertText. Popis následujících dvou argumentů, názvu rámce a atributů vyhledávání je nad rámec této knihy. Poslední argument je pole hodnot vlastností, které mají být použity při vykonání příkazu InsertText.

Jinak řečeno tento řádek kódu provede UNO příkaz .uno:VlozitTest pro předání hodnoty “Vaše jméno” jako parametr typu “Text”.

end sub

Poslední řádek kódu podprogram ukončuje.

Vytvoření makra

Když chceme zaznamenáváním vytvořit makro, je třeba si ještě předtím než začneme, položit dvě otázky:

  1. Může být úkol zapsáno jako jednoduchá posloupnost příkazů?

  2. Lze kroky uspořádat tak, aby závěrečný příkaz makra zanechal kurzor připravený pro další příkaz? Nebo umožní uživateli vrátit se k zadávání textu nebo dat do cílového dokumentu?

Komplexní příklad makra

Jednou z běžných úloh maker je kopírování řádků a sloupců dat z webové stránky a jejich formátování jako tabulky v textovém dokumentu. Toto makro obvykle funguje následovně:

  1. Údaje z webové stránky zkopírujeme do schránky.

  2. Abychom se vyhnuli neočekávanému formátování a nevhodnému písmu, vložíme údaje jako neformátovaný text.

  3. Vložený text upravíme tak, aby sloupce byly odděleny tabulátory, což nám umožní, abychom na konverzi dat do tabulky použili nástroj Tabulka > Převést > Text na tabulku v hlavní nabídce.

S ohledem na dvě výše uvedené otázky zkontrolujeme text a zjistíme, zda můžeme zaznamenat makro, které text zformátuje. Jako příklad zkopírovaných dat uveďme text zkopírovaný z webové stránky API popisující konstanty FontWeight (obrázek 8). V prvním sloupci je uveden název konstanty, přičemž za ním následují znaky mezera a tabulátor. Na konci každého řádku jsou dvě mezery.

DONTKNOW

Tloušťka písma není uvedena/známa.

THIN

udává 50 % tloušťku písma.

ULTRALIGHT

udává 60 % tloušťku písma.

LIGHT

udává 75 % tloušťku písma.

SEMILIGHT

udává 90 % tloušťku písma.

NORMAL

specifikuje normální tloušťku písma.

SEMIBOLD

určuje 110 % tloušťku písma.

BOLD

určuje 150 % tloušťku písma.

ULTRABOLD

určuje 175 % tloušťku písma.

BLACK

určuje 200 % tloušťku písma.

Obrázek 8: Příklad kopírovaných dat

V tomto příkladu budeme chtít, aby první sloupec tabulky obsahoval číselnou hodnotu váhy písma, druhý sloupec bude obsahovat název konstanty a třetí sloupec bude obsahovat textový popis. Tuto úlohu lze snadno provést pro každý řádek kromě DONTKNOW a NORMAL, které neobsahují číselnou hodnotu.

Níže jsou uvedeny kroky pro zaznamenání tohoto makra pomocí klávesových zkratek a za předpokladu, že kurzor je na začátku řádku s textem „THIN“.

  1. Ujistíme se, že záznam maker je povolen tím, že půjdeme na Nástroje > Možnosti > LibreOffice > Pokročilé a vybereme možnost Povolit záznam maker. Standardně je tato funkcionalita po instalaci LibreOffice vypnutá.

  2. Záznam makra spustíme zvolením Nástroje > Makra > Zaznamenat makro.

  3. Stiskneme Ctrl + šipka doprava a přesuneme kurzor na začátek slova "udává".

  4. Dvakrát stiskneme Backspace a tím se odstraní tabulátor a mezera.

  5. Stiskneme Tab a za názvem konstanty se přidá tabulátor.

  6. Stiskneme Delete a tím smažeme malé písmeno „u“, a pak stiskneme Shift + U, čímž přidáme velké „U“

  7. Dvakrát stiskneme Ctrl + šipka vpravo a kurzor se přesune na začátek čísla.

  8. Stiskneme Ctrl + Shift + šipka vpravo, číslo se vyjme a kurzor přesuneme před znak %.

  9. Stiskneme Ctrl + C, čímž zkopírujeme text do schránky.

  10. Stiskneme End, abychom kurzor přesunuli na konec řádku.

  11. Dvakrát stiskneme Backspace, čímž smažeme dvě mezery na konci řádku.

  12. Stiskneme Home, aby se kurzor přesunul na začátek řádku.

  13. Stiskneme Ctrl + V, čímž se obsah schránky vloží na začátek řádku.

  14. Vkládání hodnoty vloží i jednu nadbytečnou mezeru, proto stiskneme Backspace, abychom ji vymazali.

  15. Stiskneme Tab, čímž vložíme znak tabulátoru mezi číslo a název.

  16. Stiskneme Home, čímž kurzor přesuneme na začátek řádku.

  17. Stiskneme šipku dolů, abychom se přesunuli na další řádek.

  18. Záznam makra ukončíme a makro uložíme dle popisu v části “Záznam makra” na straně 1.

Čtení a zápis těchto kroků trvá mnohem déle než samotný záznam makra. Pracujte pomalu a při provádění přemýšlejte nad jednotlivými kroky. S praxí se naučíme, jak uspořádat jednotlivé kroky do maker, která lze použít k automatizaci opakujících se úloh.

Vygenerovaný kód makra ve výpisu 4  byl změněn tak, aby obsahoval čísla kroků v komentářích, která odpovídají výše uvedeným krokům.

Výpis 4: Kopírování číselné hodnoty na začátek řádku

sub KopirujCisloDoSloupce1

rem -------------------------------------------------------------

rem Definice proměnných

dim document   as object

dim dispatcher as object

rem -------------------------------------------------------------

rem Získání přístupu k dokumentu

document   = ThisComponent.CurrentController.Frame

dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

 

rem (3) Stiskneme klávesy Ctrl+šipka doprava a přesuneme kurzor na začátek položky „specifikuje“.

dispatcher.executeDispatch(document, ".uno:GoToNextWord", "", 0, Array())

 

rem (4) Dvakrát stiskneme klávesu Backspace, abychom odstranili tabulátor a mezeru.

dispatcher.executeDispatch(document, ".uno:SwBackspace", "", 0, Array())

 

rem -------------------------------------------------------------

dispatcher.executeDispatch(document, ".uno:SwBackspace", "", 0, Array())

 

rem (5) Stisknutím klávesy Tab přidáme za název konstanty tabulátor bez mezery.

dim args4(0) as new com.sun.star.beans.PropertyValue

args4(0).Name = "Text"

args4(0).Value = CHR$(9)

 

dispatcher.executeDispatch(document, ".uno:InsertText", "", 0, args4())

 

rem (6) Stisknutím tlačítka Delete smažeme malá písmena s .....

dispatcher.executeDispatch(document, ".uno:Delete", "", 0, Array())

 

rem (6) ... a pak stiskneme klávesy Shift+S, abychom přidali velké písmeno S.

dim args6(0) as new com.sun.star.beans.PropertyValue

args6(0).Name = "Text"

args6(0).Value = "S"

 

dispatcher.executeDispatch(document, ".uno:InsertText", "", 0, args6())

 

rem (7) Dvakrát stiskneme klávesy Ctrl+šipka doprava a přesuneme kurzor na číslo.

dispatcher.executeDispatch(document, ".uno:GoToNextWord", "", 0, Array())

 

rem -------------------------------------------------------------

dispatcher.executeDispatch(document, ".uno:GoToNextWord", "", 0, Array())

 

rem (8) Stiskneme klávesy Ctrl+Shift+šipka doprava a vybereme číslo.

dispatcher.executeDispatch(document, ".uno:WordRightSel", "", 0, Array())

 

rem (9) Stisknutím kláves Ctrl+C zkopírujeme vybraný text do schránky.

dispatcher.executeDispatch(document, ".uno:Copy", "", 0, Array())

 

rem (10) Stisknutím tlačítka Konec přesuneme kurzor na konec řádku.

dispatcher.executeDispatch(document, ".uno:GoToEndOfLine", "", 0, Array())

 

rem (11) Dvakrát stiskneme Backspace, abychom odstranili dvě koncové mezery.

dispatcher.executeDispatch(document, ".uno:SwBackspace", "", 0, Array())

 

rem -------------------------------------------------------------

dispatcher.executeDispatch(document, ".uno:SwBackspace", "", 0, Array())

 

rem (12) Stisknutím tlačítka Home přesuneme kurzor na začátek řádku.

dispatcher.executeDispatch(document, ".uno:GoToStartOfLine", "", 0, Array())

 

rem (13) Stisknutím kláves Ctrl+V vložíme vybrané číslo na začátek řádku.

dispatcher.executeDispatch(document, ".uno:Paste", "", 0, Array())

 

rem (14) Stisknutím klávesy Zpět odstraníme mezeru navíc.

dispatcher.executeDispatch(document, ".uno:SwBackspace", "", 0, Array())

 

rem (15) Stisknutím tabulátoru vložíme mezi číslo a název tabulátor.

dim args17(0) as new com.sun.star.beans.PropertyValue

args17(0).Name = "Text"

args17(0).Value = CHR$(9)

 

dispatcher.executeDispatch(document, ".uno:InsertText", "", 0, args17())

rem (16) Stisknutím tlačítka Home se přesuneme na začátek řádku.

dispatcher.executeDispatch(document, ".uno:GoToStartOfLine", "", 0, Array())

 

rem (17) Stisknutím šipky dolů přejdeme na další řádek.

dim args19(1) as new com.sun.star.beans.PropertyValue

args19(0).Name = "Count"

args19(0).Value = 1

args19(1).Name = "Select"

args19(1).Value = false

 

dispatcher.executeDispatch(document, ".uno:GoDown", "", 0, args19())

end sub

Chceme-li spustit toto makro, umístíme kurzor na začátek řádku, na který chceme zaznamenané kroky použít. Potom přejdeme do Nástroje > Makra > Spustit makro, vybereme makro KopirujCisloDoSloupce1 a klepneme na Spustit. Obrázek 9  zobrazuje původní řádek a výsledný řádek po použití makra.

Výsledek použití zaznamenaného makra

Obrázek 9: Výsledek použití zaznamenaného makra

Mějme na paměti, že výše popsané kroky budou správně fungovat pouze v případě, že první řádek bude mít formát, který jsme předpokládali při vytváření makra. Pokud spustíme toto makro na řádků "NEZNÁMÝ" nebo "NORMÁLNÍ", nebude výsledek takový, jaký očekáváme, protože tyto dva řádky mají odlišné formáty. Obrázek 10  zobrazuje původní řádek začínající slovem „NEZNÁMÝ“.

Výsledek použití makra v řádku s jinou strukturou

Obrázek 10: Výsledek použití makra v řádku s jinou strukturou

Rychlé spuštění makra

Protože není vhodné opakovaně spouštět makra pomocí Nástroje > Makra > Spustit makro, můžeme k rychlému spuštění přiřadit klávesovou zkratku. Chceme-li přiřadit klávesovou zkratku Ctrl+K makru KopirujCisloDoSloupce1, postupujeme takto:

  1. Přejdeme do Nástroje > Přizpůsobit. Tím otevřeme dialogové okno Přizpůsobit.

  2. Zvolíme kartu Klávesnice. V části Klávesové zkratky vybereme klávesovou zkratku Ctrl + K.

  3. V části Kategorie vybereme Makra LibreOffice. V této části najdeme a vybereme makro KopirujCisloDoSloupce1.

  4. Nyní klepneme na tlačítko Přiřadit a přiřadíme zkratku Ctrl+K makru KopirujCisloDoSloupce1.

  5. Klepnutím na OK zavřeme dialogové okno Přizpůsobit.

Teď můžeme makro KopirujCisloDoSloupce1 spustit pomocí klávesové zkratky Ctrl + K. Toto je velmi rychlé a snadno konfigurovatelné poté, co si zvykneme na pracovní postup maker. Obrázek 11  znázorňuje příslušné kroky.

img_GS24811_010

Obrázek 11: Přiřazení zkratky makru

Omezení záznamu maker

Bohužel Záznamník maker neumí zaznamenávat některé akce a jeho omezení souvisí s příkazovou infrastrukturou LibreOffice a jeho vztahem k záznamníku maker.

Porozumění příkazové infrastruktuře

Účelem rámce pro odesílání je poskytnout jednotný přístup ke komponentám (dokumentům) pro příkazy, které obecně odpovídají položkám nabídky. Nabídka Soubor > Uložit, klávesová zkratka Ctrl+S nebo klepnutí na ikonu Uložit na nástrojové liště jsou příkazy, které se transformují na stejný “příkaz příkazové infrastruktury.”

Příkazová infrastruktura může také odesílat „příkazy“ zpět do uživatelského rozhraní (UI). Například po uložení nového dokumentu zajistí příkazová infrastruktura aktualizaci seznamu posledních souborů.

Příkazová infrastruktura odesílá příkazy ve formě textu, například .uno:InsertObject nebo .uno:GoToStartOfLine. Příkaz je odeslán do rámce dokumentu a rámec příkaz obíhá kolem rozhraní API, dokud není nalezen objekt, který může příkaz zpracovat.

Jak záznamník maker využívá příkazovou infrastrukturu

Záznamník maker může registrovat pouze příkazy vygenerované příkazovou infrastrukturou, ale ne všechny odeslané příkazy jsou kompletní. Například vkládání objektu vygeneruje následující kód:

dispatcher.executeDispatch(document, ".uno:InsertObject", "", 0, Array())

V něm není možné určit, který typ objektu je třeba vytvořit nebo vložit. Pokud je objekt vkládán ze souboru, nelze určit, který soubor je třeba vložit.

Pokud při záznamu makra zvolíme Nástroje > Možnosti v hlavní nabídce na otevření a konfiguraci různých položek a nastavení, zaznamenané makro je nezaznamená. Ve skutečnosti je vygenerovaný kód v záznamu zapoznámkovaný, a tak ho vůbec nelze spustit.

rem dispatcher.executeDispatch(document, ".uno:OptionsTreeDialog", "", 0, Array())

Přestože se při otevření dialogového okna vygeneruje příkaz, práce provedená uvnitř dialogového okna se obvykle nezaznamenává. K tomu dochází například v dialogových oknech organizace maker, při vkládání speciálních znaků a podobných typech dialogových oken. Další možné problémy při použití záznamníku maker mohou nastat při vkládání vzorce, nastavování uživatelských dat, vytváření filtrů v aplikaci Calc, provádění akcí v databázových formulářích a exportu dokumentu do šifrovaného souboru PDF. Nikdy nemáme jistotu, co záznamník maker dokáže zachytit, dokud to nevyzkoušíme. Například akce související s vyhledáváním se zaznamenávají správně.

Ostatní možnosti

Pokud záznamník maker není schopen vyřešit konkrétní problém, je obvykle dalším krokem napsání skutečného kódu pomocí objektů LibreOffice. Bohužel, použití objektů LibreOffice není triviální. Tak jak je tomu při programování vždy, nejvhodnější je začít s jednoduchými příklady, které postupně rozšiřujeme na základě získaných zkušeností. Na začátku pomůže, pokud se naučíme číst makra vygenerované při záznamu.

Správa maker

V LibreOffice jsou makra sdružená v modulech, moduly v knihovnách a knihovny kontejnerech knihoven. Knihovna se obvykle používá jako hlavní uskupení, a to buď pro celou kategorii maker nebo pro celou aplikaci. Moduly obvykle obsahují makra s podobnou funkcionalitou, jako například makra pro uživatelskou interakci nebo na výpočty. Jednotlivá makra jsou buď podprogramy nebo funkce. Obrázek 12 ukazuje příklad hierarchické struktury knihoven maker v LibreOffice.

Hierarchie knihovny maker

Obrázek 12: Hierarchie knihovny maker

Pomocí volby Nástroje > Makra > Správce maker > Basic otevřeme dialogové okno Makra v Basicu (obrázek 1  na straně 1). Všechny dostupné kontejnery knihoven jsou zobrazeny v seznamu Makro z a každý dokument je kontejnerem knihovny, který může obsahovat více knihoven. Součástí aplikace jsou dva kontejnery knihoven. Jeden je distribuován s LibreOffice a nazývá se Makra LibreOffice a v druhém, s názvem Moje makra, se nacházejí osobní makra uživatele.

Makra LibreOffice jsou uložena spolu s kódem běhu aplikace, který nemusíme mít možnost upravovat, pokud nemáme v LO práva správce. Toto uspořádání chrání makra v kontejneru Makra LibreOffice, protože uživatel by je neměl měnit a v kontejneru Makra LibreOffice nemá ukládat své makra.

Pokud se vaše makra nevztahují pouze na jeden dokument, budou pravděpodobně uložena v kontejneru Moje makra. Tento kontejner Moje makra je umístěn v uživatelově diskovém prostoru nebo v jeho domovském adresáři.

Pokud je makro součástí dokumentu, pracuje pouze s tímto dokumentem, neboť objekt jeho činnosti je specifikován v ThisComponent.

Každý kontejner knihoven obsahuje knihovnu s názvem Standard. Důrazně doporučujeme, abychom si  vytvořili vlastní knihovny se smysluplnými názvy namísto používání knihovny Standard. Knihovny se smysluplnými názvy se lépe spravují a na rozdíl od knihovny Standard lze vlastní knihovny importovat do jiných kontejnerů knihoven.

LibreOffice sice umožňuje importovat knihovny do kontejneru knihovny, ale nedovolí přepsat knihovnu s názvem Standard. Pokud své makra uložíme do knihovny Standard, nemůžeme je importovat do jiného kontejneru.

Stejně jako má smysl dávat knihovnám smysluplné názvy, měli bychom používat smysluplné názvy pro své moduly. LibreOffice standardně používá názvy Module1, Module2 atd.

Při vytváření maker se musíme rozhodnout, kam je uložíme. Makra uložená v kontejneru knihovny aplikací s názvem Moje makra jsou globálně dostupná pro všechny dokumenty a uložení makra v dokumentu je užitečné, pokud bude dokument sdílený a chceme, aby makro bylo součástí dokumentu.

Zatímco knihovny StandardŠablona jsou načteny automaticky, ostatní knihovní makra jsou k dispozici až po načtení knihovny, která je obsahuje.  Nahraná knihovna se zobrazuje jinak než nenahraná. Knihovnu a její moduly načteme tak, že na její název poklepáme.

Kde jsou makra uložená?

LibreOffice ukládá údaje o uživateli ve složce, která se nachází v jeho domovském adresáři. Její umístění je různé v různých operačních systémech. Chceme-li zjistit, kde jsou uložena konfigurační data, přejdeme na Nástroje > Možnosti > LibreOffice > Cesty. Makra uživatele jsou uloženy ve složce LibreOffice\4\user\basic. Každá knihovna je uložena ve vlastní složce uvnitř složky basic.

Pro běžné použití není nutné vědět, kde jsou makra uložena. Nicméně pokud víme, kde se nacházejí, můžeme udělat jejich zálohu, můžeme je zkopírovat pro jiného uživatele nebo do nich můžeme nahlédnout, pokud došlo k chybě.

Exportování maker

Pokud chceme exportovat knihovny maker, abychom je mohli opakovaně používat a sdílet s dalšími uživateli, použijeme  Organizátor maker LibreOffice Basic. Při exportu knihovny maker postupujeme následovně:

  1. Přejdeme do Nástroje > Makra > Správce maker > Basic a klepneme na tlačítko Organizátor.

  2. Klepneme na kartu Knihovny a vybereme knihovnu, kterou chceme exportovat.

  3. Klepneme na Export a následně klepneme na Exportovat jako knihovnu BASIC (všimněme si, že nemůžeme exportovat knihovnu Standard).

  4. Vybereme místo, kam chceme knihovnu uložit a klepneme na Uložit.

Když je knihovna exportovaná, LibreOffice vytvoří složku obsahující všechny soubory související s knihovnou. Obrázek 13  ukazuje příklad exportování knihovny TestovaciKnihovna s jediným modulem nazvaným Modul1.

Složka obsahující exportovanou knihovnu

Obrázek 13: Složka obsahující exportovanou knihovnu

Importování maker

Okno Organizátor maker LibreOffice Basic umožňuje importovat makra do dokumentu, jakož i vytvářet, odstraňovat a přejmenovávat knihovny, makra a dialogová okna.

  1. Chceme-li importovat knihovny maker, na kartě Knihovny vybereme kontejner maker, který chceme použít a klepneme na tlačítko Importovat.

  2. Přejdeme do adresáře obsahujícího knihovnu, kterou chceme importovat (obrázek 14). Obvykle si můžeme vybrat mezi dialog.xlbscript.xlb. Nezáleží na tom, který z těchto dvou souborů vybereme; oba umožní import makra. Makra lze uložit i do knihovny, která se nachází v dokumentu LibreOffice. Chceme-li importovat knihovny obsažené v dokumentu, vybereme dokument, nikoli adresář na disku.

img_GS24811_013

Obrázek 14: Navigace do knihovny maker

  1. Vybereme soubor a klepnutím na Otevřít pokračujeme a otevřeme dialogové okno Import knihoven (obrázek 15).

img_GS24811_014

Obrázek 15: Výběr možností importu knihovny

  1. Při importu knihoven můžeme vybrat následující možnosti:

  1. Nakonec klepneme na tlačítko OK, čímž vybrané makro importujeme.

Knihovnu s názvem Standard není možné importovat, ani exportovat.

Na operačním systému Linux jsou soubory programu LibreOffice uloženy v domovské složce uživatele ve složce .config. Složky a soubory se jménem začínajícím tečkou mohou být skryty a tak se běžně v dialogovém okně pro otevírání souborů nezobrazují. Pokud používáme dialogová okna LibreOffice, a ne konkrétní dialogová okna operačního systému, zadáme název požadovaného adresáře v poli Název.

Stažení maker za účelem importu

Makra vytvořená komunitou LibreOffice najdeme na internetu. Některá makra jsou obsažena v dokumentech, jiná v běžných souborech, které je třeba importovat, a další jsou publikována jako text a je třeba je zkopírovat a vložit do prostředí Basic IDE. Více informací o přidávání maker do knihovny maker najdeme v část „Přidání makra” na straně 1  a více informací o úpravě maker pomocí IDE najdeme v části „Zobrazení a úprava maker” na straně 1 .

Některá makra jsou volně stažitelná z internetu (více informací je dostupných v tabulce 1).

Tabulka 1. Místa, kde můžeme nalézt příklady maker

Umístění

Popis

https://www.pitonyak.org/oo.php

Příručky a další materiály související s makry.

https://www.pitonyak.org/database/

Příručky a další materiály související s databází.

https://wiki.documentfoundation.org/Macros

Mnoho odkazů na makra.

https://forum.openoffice.org/en/forum/

Fórum s mnoha příklady a pomocí.

Jak makro spustit

Makro můžeme spustit pomocí Nástroje > Makra > Spustit, ale při častém používání maker to nebude efektivní. LibreOffice naštěstí nabízí mnoho dalších způsobů, jak makra spouštět.

Zatímco makrům můžeme přiřadit klávesovou zkratku, jak je uvedeno v části „Spuštění makra“ na straně 1, makra můžeme také propojit s ikonou na nástrojové liště, položkou nabídky, událostí nebo tlačítkem vloženým v dokumentu. Při výběru jedné z těchto metod je vhodné si nejprve položit několik otázek:

Na základě odpovědí pak můžeme rozhodnout, kde makro uložit a jak ho zpřístupnit. Například makro, které se bude používat jen zřídka, nebudeme přidávat do nástrojové lišty. Podporu pro rozhodování najdeme v tabulce 2.

Tabulka 2. Kde ukládat makro

Kam umístit makro

Pro všechny aplikace LibreOffice

Pro konkrétní aplikaci LibreOffice

Pro jeden dokument

Nástrojová lišta

Ne

Ano

Ano

Nabídka

Ne

Ano

Ano

Zkratka

Ano

Ano

Ne

Událost

Ano

Ne

Ano

Nástrojové lišty, položky nabídky a klávesové zkratky

Položku nabídky, klávesovou zkratku nebo ikonu nástrojové lišty můžeme přidat v dialogovém okně Přizpůsobit, které nám umožňuje konfiguraci nabídek, klávesových zkratek, nástrojových lišt a událostí. Pro otevření tohoto dialogového okna zvolíme Nástroje > Přizpůsobit. Použití karet Nabídky, Nástrojové lišty, Místní nabídkyKlávesnice je popsáno v kapitole 13, Přizpůsobení LibreOffice.

Události

Kdykoli LibreOffice zjistí akci uživatele, nazýváme ji událost. Je jí například otevření dokumentu, stisk klávesy nebo pohyb kurzoru myši. LibreOffice umožňuje, aby události způsobily spuštění makra; makro v tom případě nazýváme obslužné makro (program) události. Detaily obsluhy událostí přesahují rámec této příručky, jisté informace však mohou mít značný význam.

Při konfigurování obsluhy událostí je nutná opatrnost. Pokud například napíšeme obsluhu události, která se volá při každé změně dokumentu, ale uděláme chybu, takže událost nebude správně zpracována, může dojít k problémům. Jeden z možných důsledků je, že makro zachytí všechny stisky kláves, nic nemůžeme psát, a tak LibreOffice musíme ukončit násilně.

  1. V hlavní nabídce zvolíme Nástroje > Přizpůsobit a otevřeme dialogové okno Přizpůsobit a vybereme kartu Události (obrázek 16). Události, které zde lze modifikovat, souvisejí buď s celou aplikací nebo s vybraným dokumentem.

  2. V rozevíracím seznamu Uložit do vybereme LibreOffice nebo konkrétní dokument. Tím se událost uloží.

  3. Běžnou praxí je přiřazení spouštění makra k události Otevřít dokument. Takové makro pak po otevření provede pro dokument požadovaná nastavení. Zvolíme událost a klepnutím na Makro otevřeme dialogové okno Výběr makra (podobný jako na obrázku 7  na straně 1 , ale s odlišnými akčními tlačítky).

  4. Vybereme požadované makro a klepnutím na OK ho přiřadíme k události. Následně se v seznamu na kartě Události toto přiřazení zobrazí.

Spuštění makra můžeme spojit s událostmi generovanými různými objekty v dokumentu. Do dokumentu kvůli tomu častokrát přidáváme ovládací prvky, jako například tlačítka. Makro můžeme dokonce přiřadit k události pro každý grafický objekt, a to tak, že na objekt dvakrát klepneme a v okně, které se tím otevře, ho přiřadíme na kartě Makra.

img_GS24811_015

Obrázek 16: Karta Události v dialogovém okně Přizpůsobení

Používání rozšíření

Rozšíření je kód, který lze nainstalovat do LibreOffice a přidat tak novou funkci. Rozšíření lze vytvářet v téměř libovolném programovacím jazyce, přičemž mohou být jednoduché, ale i složité. Rozšíření můžeme rozdělit do skupin, například:

Jednotlivá rozšíření můžeme najít na více místech na internetu. Specializované úložiště se nachází na adrese https://extensions.libreoffice.org/ a dokumentace na https://libreplanet.org/wiki/Group:OpenOfficeExtensions/List.

Další informace o získávání a instalaci rozšíření nalezneme v kapitole 13, Přizpůsobení LibreOffice.

Vytváření maker bez použití záznamu

Příklady uvedené v této kapitole byly vytvořeny s použitím zapisovače maker a dispečinku, ale makra můžeme psát i v kódu, který přímo přistupuje k objektům tvořícím LibreOffice. Jinými slovy, můžeme vytvořit makra, která modifikují dokument přímo pomocí pokročilejší programovací logiky.

Přímá úprava dokumentů je téma, které je mimo rámec této příručky. Následující makro proto slouží pouze k ilustraci postupu, který se při přímé úpravě dokumentu používá.

Příklad makra v kódu pro Writer

Ukázka kódu ve Výpisu 5 je jednoduchým příkladem makra vytvořeného bez záznamníku makra, které na konec dokumentu Writer přidá řetězec „Hello“.

Chceme-li toto makro přidat do knihovny, postupujeme podle následujících kroků:

  1. Přejdeme na Nástroje > Makra > Správce maker > Basic.

  2. V okně Moje makra přejdeme do knihovny, ve které chceme makro vytvořit. V tomto příkladu uvažujme knihovnu TestLibrary.

  3. Vybereme jeden z modulů, které jsou již v knihovně k dispozici, například Module1. Pokud chceme vytvořit nový modul, klepneme na Organizátor a poté přidáme nový modul.

  4. Když je modul vybrán, klepneme na tlačítko Upravit. Tím se otevře okno Basic IDE a zobrazí se kód maker implementovaných ve vybraném modulu.

  5. Do modulu vložíme kód uvedený ve výpisu 5 .

Výpis 5: Připojení textu „Hello“ na konec aktuálního dokumentu

Sub PridejAhoj

  Dim oDoc

  Dim sTextService$

  Dim oCurs

 

  REM ThisComponent reprezentuje aktuální otevřený dokument.

  oDoc = ThisComponent

 

  REM Ověření, zda jde o textový dokument.

  sTextService = "com.sun.star.text.TextDocument"

  If NOT oDoc.supportsService(sTextService) Then

    MsgBox "Toto makro funguje pouze s textovým dokumentem"

    Exit Sub

  End If

  REM Získání informací o kurzoru v dokumentu.

  oCurs = oDoc.currentController.getViewCursor()

 

  REM Přesunutí kurzoru na konec dokumentu.

  oCurs.gotoEnd(False)

 

  REM Vložení textu „Ahoj“ na konec dokumentu.

  oCurs.Text.insertString(oCurs, "Ahoj", False)  

End Sub

Příklad makra v kódu pro Calc

Jedním z účinných způsobů, jak rozšířit funkce LibreOffice Calc, je psaní maker, která automatizují opakující se úlohy. Pomocí jazyka Basic můžeme psát makra, která mohou provádět různé úlohy od jednoduché manipulace s buňkami a formátování až po pokročilou manipulaci s daty.

Například níže uvedený výpis 6 ukazuje kód Basicu pro makro, které analyzuje rozsah buněk a určuje, zda jsou všechny hodnoty mezi 0 a 100. Hodnoty od 50 do 100 by měly být označeny světle zelenou barvou, zatímco buňky s hodnotami většími nebo rovnými 0 a menšími než 50 by měly být označeny světle červenou barvou. Pokud jsou nalezeny hodnoty mimo povolený rozsah 0 až 100, měla by se zobrazit varovná zpráva a buňky by měly být označeny světle šedou barvou.

Výpis 6: Makro Calc pro formátování oblastí na základě hodnot

Sub FormatRangeBasedOnValue

  'Získá aktuální výběr

  Dim oRange as Object, oCell as Object

  Set oRange = Thiscomponent.getCurrentSelection()

  'Zkontroluje, zda je vybraná oblast jedním rozsahem

  If Not oRange.supportsService("com.sun.star.sheet.SheetCellRange") Then

    MsgBox "This macro applies only to single ranges."

    Exit Sub

  End If

  ' Počet sloupců a řádků ve výběru

  Dim nCols as Long : nCols = oRange.Columns.getCount()

  Dim nRows as Long : nRows = oRange.Rows.getCount()

  Dim col as Long, row as Long

  Dim cellValue as Long

  Dim isError as Boolean : isError = False

  ' Iteruje přes všechny buňky v oblasti

  For col = 0 To nCols - 1

    For row = 0 to nRows - 1

      Set oCell = oRange.getCellByPosition(col, row)

      cellValue = oCell.getValue()

      If cellValue >= 50 and cellValue <= 100 Then

        ' Nastaví pozadí na světle zelené

        oCell.CellBackcolor = RGB(144, 238, 144)

      ElseIf cellValue >= 0 and cellValue < 50 Then

        ' Nastaví pozadí na světle červenou barvu

        oCell.CellBackcolor = RGB(255, 127, 127)

      Else

        ' Nastaví pozadí na světle šedou barvu

        oCell.CellBackcolor = RGB(220, 220, 220)

        isError = True

      End If

    Next row

  Next col

  ' Zobrazí zprávu, že došlo k chybám.

  If isError Then

    MsgBox "Some cells outside the range 0 to 100 were marked in light grey"

  End If

End Sub

Chceme-li přidat toto makro do knihovny, postupujeme podle pokynů popsaných v části „Příklad makra v kódu pro Writer“ na straně 1. Chceme-li spustit toto makro, vytvoříme nejprve nový list aplikace Calc a přidáme několik číselných hodnot do oblasti buněk. Poté vybereme buňky a použijeme jednu z metod popsaných v části „Jak makro spustit“ na straně 1 pro jeho spuštění.

Obrázek 17 ukazuje příklad makra spuštěného na sadě buněk. Protože některé buňky mají hodnoty, které nejsou v rozmezí 0 až 100, zobrazí se také okno se zprávou na obrázku 18 .

Hodnoty buněk po naformátování makrem

Obrázek 17: Hodnoty buněk po naformátování makrem

Zobrazí se okno se zprávou, pokud některé hodnoty nejsou mezi 0 a 100

Obrázek 18: Okno se zprávou, pokud některé hodnoty nejsou mezi 0 a 100

Knihovna ScriptForge

Protože programátoři maker často potřebují provádět úlohy, jako je vytváření a otevírání souborů, přístup k ovládacím prvkům formulářů, čtení dat z databází vložených do dokumentů Base atd., poskytl jim LibreOffice knihovnu ScriptForge. Tato knihovna usnadňuje provádění takových příkazů, aniž by se museli učit potřebná rozhraní API (Application Programming Interfaces) a příkazy LibreOffice, což může být pro příležitostné programátory obtížné.

ScriptForge je uspořádán do sady služeb, z nichž každá poskytuje metody a vlastnosti související s určitým tématem. Například služba Dialog umožňuje přístup k dialogovým oknům dostupným ve skriptovacích modulech a služba Database umožňuje provádět příkazy SQL v dokumentech Base. Příklad ve výpisu 7  ukazuje makro napsané v jazyce Basic pomocí knihovny ScriptForge, které otevře dokument Calc, vytvoří nový list s názvem NewSheet a do buňky A1 vloží řetězec "Hello". Makro také uloží a zavře dokument.

Výpis 7: Makro využívající knihovnu ScriptForge

Sub PrikladVytvoreniListu

  ' Načte knihovnu ScriptForge

  GlobalScope.BasicLibraries.LoadLibrary("ScriptForge")

  ' Vytvoří instanci služby uživatelského rozhraní

  Dim ui as Object, myDoc as Object

  ui = CreateScriptService("UI")

  ' Otevře soubor "myfile.ods"

  Set myDoc = ui.OpenDocument("/home/user/Documents/mujsoubor.ods")

  ' Vloží nový list s názvem "NewSheet"

  myDoc.InsertSheet("NewSheet")

  ' Vloží řetězec "Hello" do buňky "A1" nového listu

  myDoc.SetValue("NewSheet.A1", "Ahoj")

  ' Zobrazí list "NewSheet"

  myDoc.Activate("NewSheet")

  ' Uloží dokument

  myDoc.Save()

  ' Zavře dokument

  myDoc.CloseDocument()

End Sub

Jak je vidět v příkladu, knihovna ScriptForge poskytuje jednoduché příkazy pro spouštění příkazů a zjednodušuje vytváření maker.

Další informace o knihovně ScriptForge najdeme v online nápovědě LibreOffice na adrese https://help.libreoffice.org/7.4/en-US/text/sbasic/shared/03/lib_ScriptForge.html?DbPAR=BASIC. Každá z 26 podporovaných služeb je podrobně zdokumentována a příklady jsou uvedeny pro programovací jazyky Basic a Python.

Inspektor objektů UNO

LibreOffice má rozsáhlé rozhraní API, které mohou programátoři maker využít k automatizaci téměř všech aspektů svých aplikací. Programátoři však mají často problémy s nalezením typů objektů a jejich podporovaných služeb, metod a vlastností.

Model komponent použitý v LibreOffice je znám jako Universal Network Objects nebo UNO. LibreOffice makra ve všech skriptovacích jazycích používají UNO runtime application programming interface (API). Rozhraní XSCRIPTCONTEXT je určeno pro skripty maker ve všech čtyřech dostupných jazycích (LibreOffice Basic, Python, JavaScript a BeanShell), které jim poskytuje přístup k různým rozhraním, jež mohou potřebovat k provedení akce s dokumentem.

Průzkumník objektů UNO může vývojářům maker pomoci při kontrole objektů, při učení přístupu k nim a při jejich používání v makrech. Tato funkce je k dispozici v aplikacích Writer, Calc, Impress a Draw. Chceme-li ji povolit, přejdeme na Nástroje > Nástroje pro vývojáře. Ve spodní části uživatelského rozhraní se otevře okno Inspektor objektů, jak je znázorněno na obrázku 19.

img_GS24811_018

Obrázek 19: Inspektor objektů UNO otevřený v dokumentu Writer

Levou část okna Inspektor objektů tvoří navigátor Document Object Model (DOM), který umožňuje uživateli procházet všechny objekty v dokumentu. Po výběru objektu se v pravé části okna Inspektor objektů zobrazí informace o objektu:

Namísto kontroly objektů pomocí Navigátoru DOM je možné kontrolovat přímo aktuálně vybraný objekt v dokumentu přepnutím tlačítka Aktuální výběr.

Předpokládejme například, že chceme změnit barvu pozadí textu vybraného v dokumentu Writeru. Můžeme vybrat část textu, otevřít Inspektor objektů, přepnout tlačítko Aktuální výběr a poté zkontrolovat vlastnosti objektu a vyhledat vlastnost, která odpovídá požadovanému efektu. Na obrázku 20 je zobrazena vybraná vlastnost CharBackColor, která slouží k nastavení barvy pozadí textu.

img_GS24811_019

Obrázek 20: Použití Inspektora objektů k nalezení vlastnosti

Nyní je možné pomocí této vlastnosti napsat makro, které změní barvu pozadí vybraného textu. Výpis 8  zobrazuje kód tohoto makra.

Výpis 8: Makro, které mění barvu pozadí oblasti textu

Sub ZmenaBarvyPozadiTextu

  Dim oSel as Object

  Set oSel = ThisComponent.getCurrentSelection()

  oSel(0).CharBackColor = RGB(255, 127, 127)

End Sub

Všimneme si, že ve Writeru je možné mít vybráno více oblastí najednou, proto oSel(0) zpřístupní první oblast textu.

Přehled maker Python, BeanShell a JavaScript

Mnoho programátorů nemusí znát jazyk LibreOffice Basic, proto LibreOffice podporuje makra napsaná ve třech dalších známých jazycích: Python, BeanShell a JavaScript.

Makra jsou organizována stejným způsobem pro všechny čtyři skriptovací jazyky. Kontejner Makra LibreOffice obsahuje všechna makra, která jsou dodávána v instalaci LibreOffice. V kontejneru knihovny Moje makra jsou uložena makra, která jsme zpřístupnili některému z dokumentů LibreOffice. Každý dokument může také obsahovat makra, které nejsou dostupná v jiném dokumentu.

Při použití funkce záznamu makra jsou makra vytvořena v LibreOffice Basic. Chceme-li použít jiné dostupné skriptovacích jazyky, musíme napsat kód sami.

Vybereme-li spuštění makra pomocí Nástroje > Marka > Spustit makro, zobrazí LibreOffice dialogové okno Výběr makra. Toto dialogové okno umožňuje výběr a spuštění libovolného dostupného makra, kódovaného v některém z dostupných jazyků (obrázek 21).

Vybereme-li úpravu makra pomocí Nástroje > Makra > Upravit makro, zobrazí LibreOffice dialogové okno LibreOffice Basic IDE. Toto dialogové okno umožňuje výběr a úpravu jakéhokoliv dostupného makra LibreOffice Basic, ale ne makra v jiných jazycích.

Dialogové okno Výběr makra

Obrázek 21: Dialogové okno Výběr makra

Další informace o LibreOffice API stejně jako o UNO objektech nalezneme v oficiální dokumentaci API na adrese https://api.libreoffice.org/.

Makra Python

Python je univerzální skriptovací jazyk, který byl poprvé vydán v roce 1991.

Když vybereme Nástroje > Makra > Správce maker > Python, LibreOffice zobrazí dialogové okno Makra Python (obrázek 22). Prostředí pro úpravy a ladění skriptů Python není v současné době integrováno do standardního uživatelského rozhraní LibreOffice. Nicméně pro tvorbu skriptů můžeme používat jakýkoliv editor jazyka Python a tyto soubory zkopírovat do složky Scripts v naší domovské složce. Další informace nalezneme v části „Kde jsou makra uložená?“ na straně 1.

Dialogové okno Makra Python

Obrázek 22: Dialogové okno Makra Python

Výpis 9 představuje příklad makra Pythonu, které zapíše text „Hello World from Python“ do buňky A1 prvního listu tabulkového procesoru Calc.

Výpis 9: Ukázka Python makra

import uno

 

def AhojSvete():

    doc = XSCRIPTCONTEXT.getDocument()

    cell = doc.Sheets[0]['A1']

    cell.setString('Ahoj světe z Pythonu')

    return

Rozšíření Alternative Python Script Organizer (APSO) usnadňuje úpravu a organizaci skriptů Python, zejména pokud jsou vloženy do dokumentu. Pomocí APSO můžeme nakonfigurovat preferovaný editor zdrojového kódu, spustit integrovaný shell Python a ladit skripty Python. Navštívíme https://gitlab.com/jmzambon/apso a stáhneme si APSO a zjistíme více o jeho používání.

Chceme-li se dozvědět více o skriptování v Pythonu v LibreOffice, podívejme se na wiki „Základy maker / Pythonu“, kde najdeme podrobné vysvětlení a příklady, jak začít se skriptováním v Pythonu. Pro více informací se podívejme na https://wiki.documentfoundation.org/Macros/Python_Basics.

Makra BeanShell

BeanShell je skriptovací jazyk podobný Java, který byl poprvé vydán v roce 1999.

Když vybereme Nástroje > Makra > Správce maker > BeanShell, LibreOffice zobrazí dialogové okno Makra prostředí BeanShell (obrázek 23).

Dialogové okno Makra prostředí BeanShell

Obrázek 23: Dialogové okno Makra prostředí BeanShell

Klepnutím na tlačítko Upravit v dialogovém okně Makra prostředí BeanShell otevřeme okno Ladění prostředí BeanShell (obrázek 24).

Okno ladění prostředí BeanShell

Obrázek 24: Okno pro ladění prostředí BeanShell

Výpis 10  je příklad makra BeanShell, které vkládá text „Hello World from BeanShell“ do buňky A1 aktivního sešitu Calc.

Výpis 10: Ukázka makra BeanShell

import com.sun.star.uno.UnoRuntime;

import com.sun.star.sheet.XspreadsheetView;

import com.sun.star.text.XText;

model = XSCRIPTCONTEXT.getDocument();

 

controller = model.getCurrentController();

 

view = UnoRuntime.queryInterface(XSpreadsheetView.class, controller);

 

sheet = view.getActiveSheet();

 

cell = sheet.getCellByPosition(0, 0);

 

cellText = UnoRuntime.queryInterface(XText.class, cell);

 

textCursor = cellText.createTextCursor();

 

cellText.insertString(textCursor, "Ahoj světe z prostředí BeanShell", true);

 

return 0;

Makra JavaScript

JavaScript je skriptovací jazyk, který byl poprvé vydán v roce 1995.

Když vybereme Nástroje > Makra > Správce maker > JavaScript, LibreOffice zobrazí dialogové okno Makra JavaScript (obrázek 25).

img_GS24811_024

Obrázek 25: Dialogové okno Makra JavaScript

Výpis 11 je příkladem JavaScript makra, které vloží text „Hello World from JavaScript“ do buňky A1 do prvního listu sešitu Calc.

Výpis 11: Ukázka makra jazyka JavaScript

importClass(Packages.com.sun.star.uno.UnoRuntime);

importClass(Packages.com.sun.star.sheet.XspreadsheetDocument);

importClass(Packages.com.sun.star.container.XindexAccess);

importClass(Packages.com.sun.star.table.XcellRange);

importClass(Packages.com.sun.star.table.Xcell);

 

documentRef = XSCRIPTCONTEXT.getDocument();

spreadsheetInterface = UnoRuntime.queryInterface(XSpreadsheetDocument, documentRef);

allSheets = UnoRuntime.queryInterface(XIndexAccess, spreadsheetInterface.getSheets());

theSheet = allSheets.getByIndex(0);

 

Cells = UnoRuntime.queryInterface(XCellRange,theSheet);

cellA1 = Cells.getCellByPosition(0,0);

theCell = UnoRuntime.queryInterface(XCell,cellA1);

theCell.setFormula("Ahoj světe z JavaScriptu");

Změna barevného schématu prostředí Basic IDE

Chceme-li změnit barevné schéma používané editorem kódu Basic IDE, provedeme následující kroky:

  1. Basic IDE přejdeme do Zobrazit > Barevné schéma a otevřeme dialogové okno Barevné schéma dialog

  2. Jako výchozí je vybrána možnost Použití barev aplikace, díky které prostředí Basic IDE použije barvy definované v dialogovém okně Barvy aplikace (dostupné prostřednictvím Nástroje > Možnosti > Barvy aplikací)

  3. Chceme-li použít jiné barevné schéma, klepneme na tlačítko Vybrat barevné schéma a v seznamu vybereme jednu z dostupných položek.

  4. Klepnutím na OK použijeme vybrané barevné schéma.

Obrázek 26  zobrazuje editor kódu po výběru barevného schématu Solarized Light. Všimneme si, že barevné schéma mění pouze barvy používané editorem kódu.

Další barevná schémata lze přidat pomocí rozšíření. Navštívíme webovou stránku Rozšíření LibreOffice a vyhledáme další barevná schémata pro své prostředí Basic IDE.

img_GS24811_025

Obrázek 26: Základní IDE po použití barevného schématu Solarizované světlé

Kde najdeme více informací

Informace o vytváření maker najdeme v různých zdrojích. Použijeme Nápověda > Nápověda LibreOffice, nebo zmáčkneme klávesu F1 a otevřeme nápovědu LibreOffice. V levém horním rohu okna nápovědy najdeme rozbalovací seznam, který určuje, která část textu se zobrazuje. Pro nápovědu pro Basic vybereme ze seznamu Basic.

Přiložený materiál

Součástí LibreOffice je hodně užitečných maker. V hlavní nabídce zvolíme Nástroje > Makra > Správce maker > LibreOffice Basic, čímž otevřeme dialogové okno Makra LibreOffice Basic. Rozbalíme knihovnu Nástroje v kontejneru LibreOffice. V ní se nachází modul Debug (ladění), který obsahuje několik názorných příkladů. Zaujmout mohou například makra WritedbgInfo (dokument) a printdbgInfo (tabulka).

Online zdroje

Na následujících odkazech najdeme další informace o programování maker:

https://wiki.documentfoundation.org/Macros

https://ask.libreoffice.org/ (stránka s otázkami a odpověďmi, kde dobrovolníci odpovídají na otázky související s LibreOffice)

https://wiki.documentfoundation.org/Documentation/Other_Documentation_and_Resources (V části Programátoři je třeba vyhledat BASIC Programmers’ Guide a Developers’ Guide; druhý text obsahuje vysvětlení s podrobnostmi)

http://forum.openoffice.org/en/forum/ (fórum komunity Apache OpenOffice; dobrovolníci zde odpovídají i na otázky související s LibreOffice)

Tištěné a elektronické knihy

Andrew Pitonyak vydal zdarma online knihu OpenOffice.org Macros Explained, která je skvělou příručkou pro výuku jazyka Basic používaného v LibreOffice i OpenOffice. Verzi ve formátu PDF si můžeme stáhnout na adrese https://www.pitonyak.org/OOME_3_0.pdf.

Dr. Mark Alexander Bain vydal knihu Learn OpenOffice.org Spreadsheet Macro Programming. Viz https://www.packtpub.com/openoffice-ooobasic-calc-automation/book.

Skvělým zdrojem informací o programování maker je také kniha Roberta Beniteze Database Programming with OpenOffice.org Base & Basic.

Začínáme s makry