Začínáme s LibreOffice 24.8
Kapitola 11,
Začínáme s makry
Používání záznamu maker … a další
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.
Rafael Lima, B. Antonio Fernandez, Olivier Hallot,
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.
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.
Poznámka
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.
Vydáno Srpen 2024. Založeno na LibreOffice 24.8 Community.
Jiné verze LibreOffice se mohou lišit vzhledem a funkčností.
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 |
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ě |
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.
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ů:
Spustíme kteroukoliv aplikaci z balíku LibreOffice.
Zvolením Nástroje > Makra > Správce maker > Basic otevřeme dialogové okno Makra v Basicu (obrázek 1).
Klepneme na Organizátor, čímž otevřeme okno Organizátor maker LibreOffice Basic (obrázek 2). V něm zvolíme kartu Knihovny.
V seznamu Umístění zvolíme položku Moje makra a dialogová okna, což je standardní místo pro ukládání maker.
Klepnutím na Nový otevřeme okno Nová knihovna (zde není zobrazena).
Zadáme název knihovny, například TestLibrary a klepneme na OK.
V dialogovém okně Organizátor maker Basicu zvolíme kartu Moduly (obrázek 3).
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.
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.
Obrázek 1: Dialogové okno Makra v Basicu
Obrázek 2: Dialogové okno Organizátor maker LibreOffice Basic, karta Knihovny
Nový modul po vytvoření obsahuje pouze poznámku a jedno prázdné makro s názvem Main, které nic nedělá.
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.
Obrázek 3: Dialogové okno Organizátor maker Basicu, karta Moduly
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
Tip
Pokud chceme, můžeme odstranit kód Sub Main … End Sub z Modulu a ponecháme pouze podprogram HelloMacro.
(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.
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).
Obrázek 5: Dialogové okno s výsledky příkazu Tisk.
Klepnutím na tlačítko OK okno zavřeme.
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.
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.
Poté vybereme požadované makro a klepneme na Spustit.
Obrázek 6: Dialogové okno pro výběr a spuštění 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.
Poznámka
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.
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.
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.
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.
V kontejneru Moje makra najdeme knihovnu Standard. Upozorňujeme, že každý kontejner obsahuje knihovnu Standard.
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.
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.
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.
Poznámka
Kdykoliv vytvoříme v LibreOffice nový modul, automaticky se do něj přidá makro Main.
Přejdeme na Nástroje > Makra > Spustit makro a otevřeme dialogové okno Výběr makra (obrázek 7).
Například vybereme nově vytvořené makro VlozitMojeJmeno a klepneme na tlačítko Spustit.
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.
Obrázek 7: Dialogové okno Výběr makra slouží k výběru a spuštění existujícího makra
Chceme-li zobrazit a upravit vytvořené makro:
Volbou Nástroj > Makra > Správce maker > Basic otevřeme dialogové okno Makra v Basicu.
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
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.
Tip
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.
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:
Podprogram můžeme napsat tak, že při použití uvnitř makra přijme vstupní parametry. Tyto parametry se nazývají argumenty. To lze provést pouze tehdy, když vytváříme podprogramy úplně od začátku. Zaznamenaná makra žádné argumenty nepřijímají.
Jiným typem podprogramů jsou funkce. Funkce je takový podprogram, který může vracet hodnotu jako výsledek. Funkce definujeme pomocí klíčového slova FUNCTION na jejím začátku. Zaznamenaná makra vytvářejí pouze podprogramy.
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.
V této části si vysvětlíme význam jednotlivých příkazů ve zdrojovém kódu makra VlozitMojeJmeno.
sub VlozitMojeJmeno
dim document as object
Poznámka
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.
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
dim args1(0) as new com.sun.star.beans.PropertyValue
Poznámka
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"
dispatcher.executeDispatch(document, ".uno:InsertText", "", 0, args1())
end sub
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:
Může být úkol zapsáno jako jednoduchá posloupnost příkazů?
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?
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ě:
Údaje z webové stránky zkopírujeme do schránky.
Abychom se vyhnuli neočekávanému formátování a nevhodnému písmu, vložíme údaje jako neformátovaný text.
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“.
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á.
Záznam makra spustíme zvolením Nástroje > Makra > Zaznamenat makro.
Stiskneme Ctrl + šipka doprava a přesuneme kurzor na začátek slova "udává".
Dvakrát stiskneme Backspace a tím se odstraní tabulátor a mezera.
Stiskneme Tab a za názvem konstanty se přidá tabulátor.
Stiskneme Delete a tím smažeme malé písmeno „u“, a pak stiskneme Shift + U, čímž přidáme velké „U“
Dvakrát stiskneme Ctrl + šipka vpravo a kurzor se přesune na začátek čísla.
Stiskneme Ctrl + Shift + šipka vpravo, číslo se vyjme a kurzor přesuneme před znak %.
Stiskneme Ctrl + C, čímž zkopírujeme text do schránky.
Stiskneme End, abychom kurzor přesunuli na konec řádku.
Dvakrát stiskneme Backspace, čímž smažeme dvě mezery na konci řádku.
Stiskneme Home, aby se kurzor přesunul na začátek řádku.
Stiskneme Ctrl + V, čímž se obsah schránky vloží na začátek řádku.
Vkládání hodnoty vloží i jednu nadbytečnou mezeru, proto stiskneme Backspace, abychom ji vymazali.
Stiskneme Tab, čímž vložíme znak tabulátoru mezi číslo a název.
Stiskneme Home, čímž kurzor přesuneme na začátek řádku.
Stiskneme šipku dolů, abychom se přesunuli na další řádek.
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.
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Ý“.
Obrázek 10: Výsledek použití makra v řádku s jinou strukturou
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:
Přejdeme do Nástroje > Přizpůsobit. Tím otevřeme dialogové okno Přizpůsobit.
Zvolíme kartu Klávesnice. V části Klávesové zkratky vybereme klávesovou zkratku Ctrl + K.
V části Kategorie vybereme Makra LibreOffice. V této části najdeme a vybereme makro KopirujCisloDoSloupce1.
Nyní klepneme na tlačítko Přiřadit a přiřadíme zkratku Ctrl+K makru KopirujCisloDoSloupce1.
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.
Obrázek 11: Přiřazení zkratky makru
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.
Úč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.
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ě.
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.
V LibreOffice jsou makra sdružená v modulech, moduly v knihovnách a knihovny v 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.
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.
Upozornění
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 a Š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.
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ě.
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ě:
Přejdeme do Nástroje > Makra > Správce maker > Basic a klepneme na tlačítko Organizátor.
Klepneme na kartu Knihovny a vybereme knihovnu, kterou chceme exportovat.
Klepneme na Export a následně klepneme na Exportovat jako knihovnu BASIC (všimněme si, že nemůžeme exportovat knihovnu Standard).
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.
Obrázek 13: Složka obsahující exportovanou knihovnu
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.
Chceme-li importovat knihovny maker, na kartě Knihovny vybereme kontejner maker, který chceme použít a klepneme na tlačítko Importovat.
Přejdeme do adresáře obsahujícího knihovnu, kterou chceme importovat (obrázek 14). Obvykle si můžeme vybrat mezi dialog.xlb a script.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.
Obrázek 14: Navigace do knihovny maker
Vybereme soubor a klepnutím na Otevřít pokračujeme a otevřeme dialogové okno Import knihoven (obrázek 15).
Obrázek 15: Výběr možností importu knihovny
Při importu knihoven můžeme vybrat následující možnosti:
Pokud neoznačíme žádnou z možností, knihovna se zkopíruje do uživatelovy složky s makry. Pokud však má importovaná knihovna stejný název a umístění jako již existující knihovna, ta se nepřepíše.
Pokud chceme knihovnu použít jako odkaz, ale nechceme ji importovat do dokumentu, vybereme možnost Vložit jako odkaz (jen pro čtení). Pokud je knihovna použita jako odkaz, zůstává na původním místě a je plně funkční, ale nelze ji změnit v Basic IDE.
Atribut Nahradit stávající knihovny označíme, pokud chceme importovat knihovnu se stejným názvem, jaký má již existující knihovna.
Nakonec klepneme na tlačítko OK, čímž vybrané makro importujeme.
Poznámka
Knihovnu s názvem Standard není možné importovat, ani exportovat.
Tip
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.
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 |
Příručky a další materiály související s makry. |
|
Příručky a další materiály související s databází. |
|
Mnoho odkazů na makra. |
|
Fórum s mnoha příklady a pomocí. |
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:
Má být makro dostupné pouze pro jeden dokument nebo má být dostupné globálně pro všechny dokumenty?
Je makro určené pouze pro jeden typ dokumentů, jako například tabulkový sešit aplikace Calc?
Jak často budeme makro používat?
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 |
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ídky a Klávesnice je popsáno v kapitole 13, Přizpůsobení LibreOffice.
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.
Upozornění
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ě.
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.
V rozevíracím seznamu Uložit do vybereme LibreOffice nebo konkrétní dokument. Tím se událost uloží.
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).
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.
Obrázek 16: Karta Události v dialogovém okně Přizpůsobení
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:
Doplňky programu Calc s novými vlastnostmi včetně funkcí, které lze použít stejně jako zabudované funkce.
Nové funkce, jejichž součástí běžně bývají i nové prvky uživatelského rozhraní, jako například nabídky a nástrojové lišty.
Doplňky s novými typy grafů.
Jazykové doplňky, jako například nástroje pro kontrolu pravopisu a gramatiky.
Šablony dokumentů a obrázky.
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.
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á.
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ů:
Přejdeme na Nástroje > Makra > Správce maker > Basic.
V okně Moje makra přejdeme do knihovny, ve které chceme makro vytvořit. V tomto příkladu uvažujme knihovnu TestLibrary.
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.
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.
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
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 .
Obrázek 17: Hodnoty buněk po naformátování makrem
Obrázek 18: Okno se zprávou, pokud některé hodnoty nejsou mezi 0 a 100
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.
Tip
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.
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.
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:
Názvy všech implementovaných rozhraní.
Názvy všech služeb podporovaných objektem.
Názvy a typy všech vlastností dostupných v objektu.
Názvy, argumenty a návratové typy všech metod, které lze objektem volat.
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.
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.
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.
Obrázek 21: Dialogové okno Výběr makra
Tip
Další informace o LibreOffice API stejně jako o UNO objektech nalezneme v oficiální dokumentaci API na adrese https://api.libreoffice.org/.
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.
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
Tip
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í.
Tip
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.
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).
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).
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;
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).
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");
Chceme-li změnit barevné schéma používané editorem kódu Basic IDE, provedeme následující kroky:
V Basic IDE přejdeme do Zobrazit > Barevné schéma a otevřeme dialogové okno Barevné schéma dialog
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í)
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.
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.
Tip
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.
Obrázek 26: Základní IDE po použití barevného schématu Solarizované světlé
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.
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).
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)
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.