Začínáme s LibreOffice 7.3
Kapitola 13,
Začínáme s makry
Používání záznamu maker … a další
Copyright © 2022 Držitelem autorských práv k tomuto dokumentu je dokumentační tým 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.
Jean Hollis Weber |
|
|
Jean Hollis Weber |
Felipe Viggiano |
Kees Kriek |
Rafael Lima |
Peter Schofield |
Andrew Pitonyak |
Steve Fanning |
Martin Fox |
Andrew Jensen |
Valerii Goncharuk |
Hazel Russman |
Olivier Hallot |
Ron Faile Jr. |
|
|
Připomínky a náměty k tomuto dokumentu posílejte v angličtině dokumentačnímu týmu na adresu: documentation@global.libreoffice.org.
Poznámka
Vše, co do e-mailové konference pošlete, včetně e-mailové adresy a dalších osobních informací uvedených ve zprávě, bude veřejně viditelné bez možnosti smazání.
Vydáno v únoru 2023. Založeno na LibreOffice 7.3 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í. Příkladem jednoduchého makra může být makro, které zadá naši adresu do otevřeného dokumentu. Makra umožňují automatizaci jednoduchých, ale i složitých úloh. 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 řadu akcí pomocí uživatelského rozhraní LibreOffice. LibreOffice ukládá zaznamenaná makra pomocí open source skriptovacího jazyka LibreOffice Basic, který je implementací známého programovacího jazyka BASIC. Tato makra mohou být editována a vylepšena pomocí integrovaného vývojového prostředí (IDE) LibreOffice Basic.
Nejvýkonnější makra v LibreOffice se vytvářejí psaním kódu pomocí jednoho ze čtyř podporovaných skriptovacích jazyků (LibreOffice Basic, Python, JavaScript a BeanShell). Tato kapitola poskytuje přehled o možnostech maker v LibreOffice, většinou se zaměřuje na výchozí jazyk pro skriptování maker, LibreOffice Basic. Některé úvodní příklady zahrnují skriptovací jazyky BeanShell, JavaScript a Python. Hlubší diskuse o tom, jak používat tyto jazyky pro skriptování, je však nad rámec této kapitoly.
Při učení programování v makrojazyku může na začátku pomoci, pokud si najdeme a použijeme vhodné existující makro. V této části předpokládáme, že chceme použít makro, které jsme našli v knize nebo na internetu. V tomto příkladu použijeme makro, které je uvedeno ve výpisu 1. Měli bychom vytvořit knihovnu a modul, které budou obsahovat naše makro; další informace nalezneme v části „Správa maker“ na straně 1.
Výpis 1: Jednoduché makro, které nás pozdraví
Sub MakroAhoj
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
Obrázek 3: Dialogové okno Organizátor maker Basicu, karta Moduly
Obrázek 4: Okno LibreOffice Basic IDE (integrované vývojové prostředí)
Když je vytvořen nový modul, obsahuje komentář a prázdné makro Main, které v současné době nic nedělá.
Nové makro přidáme buď před Sub Main nebo za End Sub. Výpis 2 zobrazuje nové makro, které bylo přidáno před Sub Main.
Výpis 2: Module1 po přidání nového makra
REM ***** BASIC *****
Sub MakroAhoj
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, klepneme na ikonu Zkompilovat na nástrojové liště Makro.
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).
Klepnutím na tlačítko OK okno zavřeme.
Pokud není vybráno žádné makro nebo funkce, otevře se dialogové okno podobné tomu na obrázku 5. 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 5: Dialogové okno pro výběr a spuštění makra
Když nahráváme makro v LibreOffice, ve skutečnosti nahráváme kroky k provedení určité úlohy pomocí programovacího jazyka. Zvažme například, že musíme do dokumentu opakovaně zadávat stejné informace. Pokud máme opakovaně do dokumentu vkládat tutéž informaci, můžeme ji po prvním vložení zkopírovat do schránky, odkud ji v případě potřeby opakovaně vložíme na požadované místo. Pokud však do schránky uložíme něco jiného, její obsah se změní. To znamená, že musíme tuto informaci znovu zkopírovat, abychom ji mohli později vložit do dokumentu. Tento problém můžeme vyřešit tak, že vytvoříme makro, které požadovanou informaci vloží, aniž bychom ji museli zkopírovat pokaždé, když ji potřebujeme.
Poznámka
V některých případech, kdy chceme opakovaně vložit informace do dokumentu může být vhodnější vytvořit automatický text. Více informací se nachází v kapitole 2 – Základy práce s textem v příručce Writer Guide.
Ujistíme se, že záznam maker je povolen tím, že přejdeme v nabídce na Nástroje > Možnosti > LibreOffice > Pokročilé a vybereme možnost Povolit záznam maker v sekci 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ě. Tím se otevře dialogové okno Makra v Basicu (podobně jako na obrázku 1 na stránce 1, ale s jiný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.
Volbou Nástroje > Makra > Spustit makro otevřeme dialogového okno Výběr makra (obrázek 6).
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 6: Použití dialogového okna Výběr makra pro výběr a spuštění existujícího makra
Makra zobrazíme nebo i upravíme následujícím způsobem:
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é. Malé vysvětlení nám pomůže pochopit makra. Popisky začínají prvním řádkem makra a popisují funkce v celém výpisu.
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 = "Your name"
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 za REM na stejném řádku je při spuštění makra interpretrem Basicu 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í. Symbolické konstanty jsou pokročilejší téma a v tomto návodu se jim nevěnujeme, protože při záznamu maker v LibreOffice se s nimi nesetkáme.
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.
Pokud to potřebujeme, můžeme si informaci zapsat na kus papíru, abychom se na něj mohli později podívat. Proměnná, podobně jako tento kus papíru, obsahuje informaci, kterou můžeme později změnit nebo si ji přečíst. Klíčové slovo DIM původně označovalo Dimension (Rozměr) a používalo se pro 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 array (pole) může uchovávat více hodnot, které bychom mohli přirovnat více stranám v jedné knize. Prvky pole jsou obvykle číslovány od nuly. Čí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. Možná, že vysvětlení nebude dostatečně podrobné k plnému pochopení detailů, věříme však, že poskytne představu o tom, jak makra pracují.
sub VlozitMojeJmeno
dim document as object
Poznámka
Někdy se používá slovo služba. Služba je poskytována typem objektu, které jsou odlišné, aby bylo možné poukázat na to, jak jsou používány.
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "Text"
args1(0).Value = "Zadané jméno autora"
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ů?
Můžeme jednotlivé kroky uspořádat tak, aby poslední příkaz ponechal kurzor připraven pro další příkazy nebo pro zadávání textu?
Běžnou úlohou je kopírování oblasti s více řádky a sloupci z webové stránky a jejich vložení do textového dokumentu ve formě tabulky:
Ú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.
Mějme na paměti dvě výše uvedené otázky a podívejme se nyní na text. Posuďme, zda makro na jeho formátování dokážeme zaznamenat. Jako příklad zkopírovaných dat zvažme text zkopírovaný z webu API popisující konstanty FontWeight (obrázek 7). 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 7: Příklad kopírovaných dat
Předpokládejme, že chceme, aby první sloupec v tabulce obsahoval číselnou hodnotu tučnosti písma, druhý sloupec název konstanty a třetí sloupec 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.
Zastavíme nahrávání makra a makro uložíme, viz „Záznam makra“ na straně 1.
Přečtení těchto instrukcí, a zejména jejich psaní, trvalo určitě mnohem déle, než jeho zaznamenávání. Pracujte pomalu a při provádění přemýšlejte nad jednotlivými kroky. V praxi se naučíme, jak uspořádat kroky k vytvoření maker, která lze použít k automatizaci opakujících se úkolů.
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 Ctrl + šipka vpravo, čímž se kurzor přesune na začátek slova „udává“.
dispatcher.executeDispatch(document, ".uno:GoToNextWord", "", 0, Array())
rem (4) Dvakrát stiskneme Backspace, čímž odstraníme tabulátor a mezeru.
dispatcher.executeDispatch(document, ".uno:SwBackspace", "", 0, Array())
rem -------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:SwBackspace", "", 0, Array())
rem (5) Stiskneme Tab, čímž za názvem konstanty přidáme tabulátor.
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) StisknemeDelete, čímž smažeme malé písmeno u…
dispatcher.executeDispatch(document, ".uno:Delete", "", 0, Array())
rem (6) … a pak stiskneme Shift + U, čímž přidáme velké U.
dim args6(0) as new com.sun.star.beans.PropertyValue
args6(0).Name = "Text"
args6(0).Value = "U"
dispatcher.executeDispatch(document, ".uno:InsertText", "", 0, args6())
rem (7) Dvakrát stiskneme klávesu Ctrl + šipka vpravo, čímž kurzor přesuneme na začátek čísla.
dispatcher.executeDispatch(document, ".uno:GoToNextWord", "", 0, Array())
rem -------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:GoToNextWord", "", 0, Array())
rem (8) Stiskneme Ctrl + Shift + šipka vpravo, čímž vybereme číslo.
dispatcher.executeDispatch(document, ".uno:WordRightSel", "", 0, Array())
rem (9) Stiskneme Ctrl + C, čímž vybraný text zkopírujeme do schránky.
dispatcher.executeDispatch(document, ".uno:Copy", "", 0, Array())
rem (10) Stisknutím End kurzor přesuneme na konec řádku.
dispatcher.executeDispatch(document, ".uno:GoToEndOfLine", "", 0, Array())
rem (11) Dvakrát stiskneme Backspace, čímž smažeme dvě mezery na konci.
dispatcher.executeDispatch(document, ".uno:SwBackspace", "", 0, Array())
rem -------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:SwBackspace", "", 0, Array())
rem (12) Stiskem Home kurzor přesuneme na začátek řádku.
dispatcher.executeDispatch(document, ".uno:GoToStartOfLine", "", 0, Array())
rem (13) Stiskem Ctrl + V vložíme vybrané číslo na začátek řádku.
dispatcher.executeDispatch(document, ".uno:Paste", "", 0, Array())
rem (14) Stiskem Backspace smažeme zbytečnou mezeru.
dispatcher.executeDispatch(document, ".uno:SwBackspace", "", 0, Array())
rem (15) Stisknutím klávesy Tab vložíme tabulátor mezi číslo a název.
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) Stiskem Home přejdeme na začátek řádku.
dispatcher.executeDispatch(document, ".uno:GoToStartOfLine", "", 0, Array())
rem (17) Stisknutím klávesy Šipka dolů přejdeme na následující řá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, nejprve umístíme kurzor na začátek řádku, na který chceme použít zaznamenané kroky. Potom přejdeme do Nástroje > Makra > Spustit makro, vybereme makro CopyNumToCol1 a klepneme na Spustit. Obrázek 8 zobrazuje původní řádek a výsledný řádek po použití makra.
Obrázek 8: Výsledek po použití nahraného makra
Mějme na paměti, že kroky popsané výše budou správně fungovat, pouze pokud bude řádek odpovídat formátu, 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 9 ukazuje původní řádek začínající “NEZNÁMÝ”.
Obrázek 9: Výsledek použití makra na řádku s odlišnou strukturou
Není pohodlné opakované spouštění maker pomocí volby Nástroje > Makra > Spustit makro. Pokud potřebujeme použít určité makro opakovaně, můžeme pro jeho rychlé spuštění nastavit klávesovou zkratku. Dále jsou uvedeny kroky pro přiřazení klávesové zkratky Ctrl + K pro spouštění makra KopirujCisloDoSloupce1.
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 Změnit a tím přiřadíme klávesovou 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 10 znázorňuje příslušné kroky.
Obrázek 10: Přiřazení klávesové zkratky makru
Záznamník maker má některá omezení, díky kterým není možné některé činnosti zaznamenat. Hlubší znalost interního fungování LibreOffice pomáhá pochopit, jak a proč bude záznam makra fungovat. Hlavní příčina těchto omezení je spojena s příkazovou infrastrukturou (angl. dispatch framework) a jejím vztahem k záznamu maker.
První úloha příkazové infrastruktury je zajištění rovného přístupu příkazů ke komponentám (dokumentům). Tyto příkazy obvykle odpovídají položkám v nabídkách. Použití Soubor > Uložit, klávesová zkratka Ctrl + S nebo klepnutí na ikonu Uložit na standardní nástrojové liště jsou příkazy, které se transformují na tentýž příkaz příkazové infrastruktury.
Příkazová infrastruktura se však může použít i na odeslání „příkazu“ zpět uživatelskému rozhraní (angl. User interface, UI). Například po uložení nového dokumentu se aktualizuje seznam posledních souborů.
Příkazová infrastruktura odesílá příkazy ve formě textu, například .uno:InsertObject nebo .uno:GoToStartOfLine. Tento příkaz je odeslán rámci dokumentu, který ho posílá dál, dokud se nenajde objekt, který ho dokáže zpracovat.
Záznamník maker zaznamenává odeslané textové příkazy. Záznamník je ve své podstatě jednoduchý nástroj, který vydané příkazy pouze ukládá na pozdější použití. Problém spočívá v tom, že 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())
Pokud se otevře dialogové okno, obvykle se zaznamená pouze příkaz k jeho otevření. Činnost vykonaná v okně, se obvykle nezaznamená. Příkladem jsou okna, ve kterých se upravují makra, okno pro vkládání speciálních znaků a podobné typy oken. Další problémy při záznamu maker mohou souviset s vkládáním vzorců a dat, nastavováním filtrů v programu Calc, s činností ve formulářích databáze a exportem dokumentů do šifrovaného souboru ve formátu PDF. V podstatě nelze předem přesně vědět, co fungovat bude a co ne, pokud to nevyzkoušíme. Například akce související s vyhledáváním se zaznamenávají správně.
Pokud danou úlohu nelze vyřešit prostřednictvím záznamu maker, obvyklým řešením je přímé napsání programu s použitím 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 11 ukazuje příklad hierarchické struktury knihoven maker v LibreOffice.
Obrázek 11: Hierarchie knihoven maker
Pomocí volby Nástroje > Makra > Správce maker > Basic otevřeme dialogové okno Makra v Basicu (obrázek 1 na straně 1). V seznamu Makro z jsou uvedeny všechny dostupné kontejnery knihoven. Každý dokument je současně i kontejner knihoven, ve kterém mohou být různé knihovny. 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.
Kontejner Makra LibreOffice je uložen spolu s ostatními částmi LibreOffice, a tak je může opravovat pouze uživatel s administrátorskými právy. 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.
V kontejneru Moje makra jsou uložena makra, které jsou obvykle určeny pro jeden dokument. 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. Je však vhodnější vytvořit a používat vlastní knihovny se smysluplným názvem namísto knihovny Standard. Nejde přitom jen o to, že knihovny se smysluplným názvem se lépe spravují. Takto vytvořené knihovny můžeme totiž i importovat do jiných kontejnerů, ale knihovnu Standard ne.
Upozornění
LibreOffice umožňuje importování knihoven do stávajících kontejnerů, neumožňuje však přepsat knihovnu Standard. Pokud své makra uložíme do knihovny Standard, nemůžeme je importovat do jiného kontejneru.
Stejně jako je vhodné používání smysluplných názvů pro knihovny, je i vhodné používat smysluplné názvy pro moduly. LibreOffice standardně používá názvy Module1, Module2 atd.
Při vytváření maker se musíme rozhodnout, kam je uložíme. Uložení do dokumentu je vhodné tehdy, pokud plánujeme jeho odeslání jiným uživatelům, nebo jestliže jeho uložení v dokumentu má význam. Makra uložené v kontejneru Moje makra jsou dostupné pro všechny dokumenty.
Makra nejsou dostupná, pokud knihovna není načtena. Na rozdíl od jiných knihoven se však knihovny Standard a Template automaticky načtou. Načtená knihovna se zobrazuje jinak než nenačtená. 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. Místo uložení konfiguračních dat najdeme zvolením Nástroje > Možnosti > LibreOffice > Cesty v hlavní nabídce. 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ě.
Dialogové okno Organizátor maker Basicu v LibreOffice umožňuje exportovat knihovny makra, aby mohly být znovu použity a sdíleny s dalšími lidmi. 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 12 ukazuje příklad exportování knihovny TestovaciKnihovna s jediným modulem nazvaným Modul1.
Obrázek 12: 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 složky obsahující knihovnu pro import (obrázek 13). V něm jsou obvykle dva soubory, dialog.xlb a script.xlb, z nichž jeden vybereme. Nezáleží na tom který, protože vždy se importují oba. Makra lze uložit i do knihovny, která se nachází v dokumentu LibreOffice. V tom případě místo složky pro importování vybereme dokument, v němž se knihovny nacházejí.
Obrázek 13: Přístup ke knihovně maker
Vybereme soubor a klepnutím na Otevřít otevřeme dialogové okno Importovat knihovny (obrázek 14).
Obrázek 14: Možnosti při importu knihoven
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.
Atribut Vložit jako odkaz označíme, pokud chceme použít pouze odkaz na knihovnu bez toho, abychom ji importovali do dokumentu. 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.
Můžeme najít makra vytvořená komunitou ke stažení z internetu. Některá makra jsou součástí dokumentů, některá jsou dostupná jako samostatné soubory, které je třeba importovat a některá jsou publikovaná jen ve formě zdrojového textu, který je třeba zkopírovat a do LibreOffice vložit pomocí vývojového prostředí Basic. 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í. |
Jakékoliv makro můžeme spustit zvolením Nástroje > Makra > Spustit makro v hlavní nabídce. Tento postup však není na opakované spouštění moc praktický. LibreOffice nabízí mnoho způsobů, jak rychle spouštět makra.
Kromě přiřazení klávesové zkratky makru, jak je uvedeno v části „Spuštění makra“ na straně 1, můžeme makra také propojit s ikonou nástrojové lišty, položkou nabídky, událostí nebo tlačítkem vloženým do 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ávesové zkratky nebo ikonu nástrojové lišty můžeme přidat dialogovém okně Přizpůsobit, které obsahuje stránky pro 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 14 – Přizpůsobení LibreOffice.
Cokoliv se v LibreOffice stane, je nazýváno 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. Například předpokládejme, že jsme vytvořili obslužné makro, které se spustí pokaždé, když se stiskne klávesa. Udělali jsme v něm však chybu a událost se neobsluhuje správně. 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 15). 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 6 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 15: Karta Události v dialogovém okně Přizpůsobit
Rozšíření je balík, který můžeme doinstalovat do LibreOffice, čímž přidáme novou funkcionalitu. 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.
Více informací o získávání a instalaci rozšíření najdeme v kapitole 14, Přizpůsobení LibreOffice.
Příklady vytváření maker, uvedené v této kapitole, využívají záznam maker a příkazovou infrastrukturu LibreOffice. Zkušenější programátoři si však mohou vytvářet makra, které přímo využívají různé objekty, které poskytuje 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 "This macro only works with a text document"
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.
Jako jednoduchý příklad uveďme, že chceme analyzovat oblast buněk a zjistit, zda jsou všechny hodnoty mezi 0 a 100. Kromě toho by měly být hodnoty od 50 do 100 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 ukazuje kód Basicu pro takové makro.
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 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 16 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 17.
Obrázek 16: Hodnoty buněk po zformátování makrem
Obrázek 17: Okno se zprávou, pokud některé hodnoty nejsou mezi 0 a 100
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. Cílem knihovny ScriptForge je usnadnit provádění takových příkazů bez nutnosti učit se potřebná rozhraní API (Application Programming Interfaces) a příkazy LibreOffice, což může být pro příležitostné programátory obtížné.
Knihovna ScriptForge je uspořádána 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 CreateSheetExample
' 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/myfile.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", "Hello")
' 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ů, čímž se snaží zjednodušit tvorbu maker.
Tip
Další informace o knihovně ScriptForge najdeme v online nápovědě LibreOffice na adrese help.libreoffice.org. Každá z 21 podporovaných služeb je podrobně zdokumentována a příklady jsou uvedeny pro programovací jazyky Basic a Python.
Upozornění
Knihovna ScriptForge je k dispozici od verze LibreOffice 7.1 s podporou jazyka Basic. V LibreOffice 7.2 byla do knihovny přidána podpora jazyka Python. V současné době je většina služeb, metod a vlastností podporována stejně v jazyce Basic i 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í. Jednou z hlavních výzev pro programátory je však zjištění typů objektů a jejich podporovaných služeb, metod a vlastností.
Inspector objektů UNO pomůže vývojářům maker zkontrolovat objekty a zjistit, jak k nim lze přistupovat a používat je 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 18.
Obrázek 18: Inspektor objektů UNO otevřený v dokumentu aplikace 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ů a přepnout tlačítko Aktuální výběr. Nyní zkontrolujeme vlastnosti objektu a vyhledáme vlastnost, která odpovídá požadovanému efektu. Na obrázku 19 je zobrazena vybraná vlastnost CharBackColor, která slouží k nastavení barvy pozadí textu.
Obrázek 19: 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 ChangeTextBGColor
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 jazycích, které mohou být známější: 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. Kontejner Moje makra obsahuje makra, která jsou k dispozici pro jakýkoliv 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 20).
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 20: Dialogové okno Výběr makra
Model komponent použitý v LibreOffice je znám jako Universal Network Objects nebo UNO. Makra LibreOffice v libovolném skriptovacím jazyce používají rozhraní pro programování aplikací (API) UNO runtime. Rozhraní XSCRIPTCONTEXT je poskytováno skriptům maker ve všech čtyřech jazycích, které poskytují prostředky pro přístup k různým rozhraním, která mohou potřebovat k provedení nějaké akce v dokumentu.
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.
Vybereme-li Nástroje > Makra > Správce maker > Python, LibreOffice zobrazí dialogové Makra Python (obrázek 21).
Obrázek 21: Dialogové okno Makra Python
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.
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 HelloWorld():
doc = XSCRIPTCONTEXT.getDocument()
cell = doc.Sheets[0]['A1']
cell.setString('Hello World from Python')
return
Tip
Rozšíření Alternative Python Script Organizer (APSO) usnadňuje editaci a správu skriptů v Pythonu, zejména pokud jsou vloženy do dokumentu. Pomocí APSO můžeme nastavit preferovaný editor zdrojového kódu, spuštění integrovaného Python shellu a ladění Python skriptů. Pro stažení APSO a více informací o jeho použití můžeme navštívit stránku https://gitlab.com/jmzambon/apso.
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 v jazyce BeanShell (obrázek 22).
Obrázek 22: Dialogové okno Makra BeanShell
Klepnutím na tlačítko Upravit v dialogovém okně Makra BeanShell otevřeme BeanShell Debug Window (obrázek 23).
Obrázek 23: BeanShell Debug Window
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, "Hello World from 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 JavaScript Makra (obrázek 24).
Obrázek 24: Dialogové okno Makra JavaScript
Klepnutím na tlačítko Upravit v dialogovém okně Makra JavaScript otevřeme Rhino JavaScript Debugger (obrázek 25). Podrobný návod k použití tohoto nástroje lze nalézt na internetových stránkách Mozilly na https://developer.mozilla.org/en-US/docs/Mozilla/Projects/Rhino/Debugger.
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("Hello World from JavaScript");
Obrázek 25: Rhino JavaScript Debugger
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.