LibreOfficeLogo

Začínáme s LibreOffice 7.3

Kapitola 13,
Začínáme s makry

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

Autorská práva

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.

Přispěvatelé

Pro toto vydání

Jean Hollis Weber

 

 

Pro předchozí vydání

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.

 

 

Zpětná vazba

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í.

Datum vydání a verze programu

Vydáno v únoru 2023. Založeno na LibreOffice 7.3 Community.
Jiné verze LibreOffice se mohou lišit vzhledem a funkčností.

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

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

Windows nebo Linux

Ekvivalent pro macOS

Akce

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

LibreOffice > Předvolby

Otevřou se možnosti nastavení.

Klepnutí pravým tlačítkem

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

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

Ctrl (Control)

(Command)

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

Alt

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

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

F11

⌘ + T

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

Úvod

Makro je posloupnost příkazů nebo stisků kláves uložených za účelem pozdějšího použití. 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.

Moje první makro

Přidání makra

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ů:

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

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

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

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

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

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

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

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

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

Image1

Obrázek 1: Dialogové okno Makra v Basicu

Image12

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

Image11

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

Image16

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

  1. Když je vytvořen nový modul, obsahuje komentář a prázdné makro Main, které v současné době nic nedělá.

  2. 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.

  1. (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.

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

Image3

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

  2. 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.

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

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

Image13

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

Záznam 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.

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

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

  3. Klepneme na tlačítko Zastavit nahrávání zobrazené v malém dialogovém okně. 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).

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

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

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

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

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

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

Poznámka

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

Spuštění makra

  1. Volbou Nástroje > Makra > Spustit makro otevřeme dialogového okno Výběr makra (obrázek 6).

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

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

Image17

Obrázek 6: Použití dialogového okna Výběr makra pro výběr a spuštění existujícího makra

Zobrazení a úprava maker

Makra zobrazíme nebo i upravíme následujícím způsobem:

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

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

Toto první makro není složité. 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

Zakomentování pomocí REM

Poznámky v jazyce Basic začínají klíčovým slovem REM, což je zkratka slova remark (poznámka). Veškerý text 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.

Definování podprogramů pomocí SUB

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

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

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

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.

Vysvětlení kódu makra

V této části si vysvětlíme význam jednotlivých příkazů ve zdrojovém kódu makra VlozitMojeJmeno. 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

Definuje začátek makra VlozitMojeJmeno.

dim document as object

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

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.

dim dispatcher as object

Definuje dispatcher jako objektovou proměnnou.

document = ThisComponent.CurrentController.Frame

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

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

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

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

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

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

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

Výraz com.sun.star.beans.PropertyValue je struktura Universal Network Objects (UNO). Struktury jsou speciální typy proměnných, které obsahují další logicky spojené proměnné. Může být výhodné pracovat se sadami různorodých informací, které by měly být považovány za jeden celek. Vysvětlení UNO a uživatelských struktur jde nad rámec této knihy. Další informace o vytváření a používání struktur nalezneme v systému nápovědy LibreOffice a dalších příručkách jazyka Basic.

args1(0).Name = "Text"

args1(0).Value = "Zadané jméno autora"

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

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

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

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

end sub

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

Vytvoření makra

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

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

  2. 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?

Komplexní příklad makra

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:

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

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

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

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“.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  18. 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.

Image14

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Ý”.

Image18

Obrázek 9: Výsledek použití makra na řádku s odlišnou strukturou

Rychlé spuštění makra

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.

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

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

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

  4. Nyní klepneme na tlačítko Změnit a tím přiřadíme klávesovou zkratku Ctrl + K makru KopirujCisloDoSloupce1.

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

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

Image19

Obrázek 10: Přiřazení klávesové zkratky makru

Omezení záznamu maker

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.

Příkazová infrastruktura

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.

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

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ě.

Ostatní možnosti

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.

Správa maker

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

Image15

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 StandardTemplate 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.

Kde jsou makra uložená?

LibreOffice ukládá údaje o uživateli ve složce, která se nachází v jeho domovském adresáři. Její umístění je různé v různých operačních systémech. 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ě.

Exportování maker

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ě:

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

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

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

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

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

Image20

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

Importování maker

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

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

  2. Přejdeme do 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í.

graphics5

Obrázek 13: Přístup ke knihovně maker

  1. Vybereme soubor a klepnutím na Otevřít otevřeme dialogové okno Importovat knihovny (obrázek 14).

graphics6

Obrázek 14: Možnosti při importu knihoven

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

  1. 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.

Stažení maker za účelem importu

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

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

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

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

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

https://wiki.documentfoundation.org/Macros

Mnoho odkazů na makra.

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

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

Jak makro spustit

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:

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

Tabulka 2. Kde ukládat makro

Kam umístit makro

Pro všechny aplikace LibreOffice

Pro konkrétní aplikaci LibreOffice

Pro jeden dokument

Nástrojová lišta

Ne

Ano

Ano

Nabídka

Ne

Ano

Ano

Zkratka

Ano

Ano

Ne

Událost

Ano

Ne

Ano

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

Položku nabídky, klá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ídkyKlávesnice je popsáno v kapitole 14 – Přizpůsobení LibreOffice.

Události

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ě.

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

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

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

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

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

Image2

Obrázek 15: Karta Události v dialogovém okně Přizpůsobit

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

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:

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.

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

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á.

Příklad makra pro Writer

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

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

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

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

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

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

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

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

Sub PridejAhoj

 Dim oDoc

 Dim sTextService$

 Dim oCurs

 

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

 oDoc = ThisComponent

 

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

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

 If NOT oDoc.supportsService(sTextService) Then

 MsgBox "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

Příklad makra pro Calc

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

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.

Image21

Obrázek 16: Hodnoty buněk po zformátování makrem

Image22

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

Knihovna ScriptForge

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.

Inspektor objektů UNO

LibreOffice má rozsáhlé rozhraní API, které mohou programátoři maker využít k automatizaci téměř všech aspektů svých aplikací. 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.

Image23

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:

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.

Image24

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.

Přehled maker Python, BeanShell a JavaScript

Mnoho programátorů nemusí znát jazyk LibreOffice Basic, proto LibreOffice podporuje makra napsaná ve třech dalších 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.

Image4

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/.

Makra Python

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).

Image10

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.

Makra BeanShell

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

Když vybereme Nástroje > Makra > Správce maker > BeanShell, LibreOffice zobrazí dialogové okno Makra v jazyce BeanShell (obrázek 22).

Image5

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).

Image6

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;

Makra JavaScript

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

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

Image7

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");

Image8

Obrázek 25: Rhino JavaScript Debugger

Kde najdeme více informací

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

Přiložený materiál

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

Online zdroje

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

https://wiki.documentfoundation.org/Macros

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

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

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

Tištěné a elektronické knihy

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

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

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

Obsah