LibreOffice Logo

Příručka aplikace Calc 25.2

Kapitola 14
Makra

Automatizace opakujících se úkolů

Autorská práva

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

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

Přispěvatelé

Pro toto vydání

Olivier Hallot

B. Antonio Fernández

 

Pro předchozí vydání

Andrew Pitonyak

Barbara Duprey

Jean Hollis Weber

Simon Brydon

Steve Fanning

Leo Moons

Felipe Viggiano

Olivier Hallot

Kees Kriek

Vasudev Narayanan

Rafael Lima

‍Skip Masonsmith

B. Antonio Fernández

 

 

Zpětná vazba

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

Vše, co pošlete do fóra, včetně vaší e-mailové adresy a jakýchkoli dalších osobních údajů, které jsou ve zprávě napsány, je veřejně archivováno a nemůže být smazáno. E-maily zaslané do fóra jsou moderovány.

Datum vydání a verze programu

Vydáno v Květen 2025. Založeno na LibreOffice 25.2 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 a v příloze A (Klávesové zkratky) této příručky.

Windows nebo Linux

Ekvivalent pro macOS

Akce

Nástroje > Možnosti na hlavní nabídce

LibreOffice > Předvolby na hlavní nabídce

Přístup k možnostem nastavení

Klepnutí pravým tlačítkem

Ctrl+klepnutí a/nebo klepnutí pravým tlačítkem v závislosti na nastavení počítače

Otevře se místní nabídka

Ctrl nebo Control

a/nebo Cmd nebo Command, v závislosti na klávesnici.

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

Alt

a/nebo Alt nebo Option v závislosti na klávesnici.

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

Úvod

Kapitola Začínáme s makry příručky Začínáme s LibreOffice je úvodem do maker, která jsou v LibreOffice k dispozici. Tato kapitola obsahuje další úvodní informace o použití maker v sešitech programu Calc.

Makro je posloupnost příkazů nebo stisků kláves uložených za účelem pozdějšího použití. Příkladem jednoduchého makra je makro, které zadá vaši adresu do aktuální buňky otevřeného sešitu. Makra můžeme použít k automatizaci jednoduchých i složitých úkolů a umožňují nám připravit nové funkce, které nejsou zabudovány do programu Calc.

Nejjednodušší způsob, jak vytvořit makro, je zaznamenat řadu akcí prostřednictvím uživatelského rozhraní programu Calc. Calc ukládá zaznamenaná makra pomocí open-source skriptovacího jazyka LibreOffice Basic, který je dialektem 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 Calcu 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é příklady jsou zahrnuty pro skriptovací jazyky Python, JavaScript a BeanShell, ale úplnější popis možností těchto jazyků přesahuje rámec tohoto dokumentu.

Kompatibilita s jazykem Visual Basic for Applications (VBA)

Programovací jazyk LibreOffice Basic a programovací jazyk VBA – použitý v mnoha dokumentech Microsoft Office včetně tabulek Excel - jsou dialekty jazyka Basic. Pokud chceme v LibreOffice používat makra vytvořená v jazyce VBA v programu Microsoft Excel, musíme nejprve v editoru LibreOffice Basic IDE upravit jejich kód.

Některé tipy pro převod maker aplikace Excel napsaných v jazyce VBA jsou uvedeny na konci této kapitoly.

Používání záznamu maker

Kapitola Začínáme s makry, příručky Začínáme s LibreOffice obsahuje příklady, které ukazují, jak používat záznamník maker a porozumět generovaným skriptům LibreOffice Basic. Následující kroky uvádějí další příklad, specifický pro sešit Calc, bez podrobnějších vysvětlení z příručky Začínáme s LibreOffice. Je vytvořeno a uloženo makro, které provádí vložení jinak s operací násobení v celé řadě buněk tabulky.

Pro povolení záznamu makra použijeme Nástroje > Možnosti > LibreOffice > Pokročilé z hlavní nabídky a vybereme volbu Povolit záznam maker (omezená funkčnost).

  1. Nový sešit vytvoříme pomocí Soubor > Nový > Sešit v hlavní nabídce.

  2. V novém sešitě zadáme čísla uvedená na 1  do buněk A1:C3 na listu List1.

Obrázek 1: Zadáme čísla do buněk A1:C3

Zadáme čísla do buněk A1:C3

  1. Vybereme buňku A3, která obsahuje číslo 3 a použijeme Úpravy > Kopírovat z hlavní nabídky, čímž zkopírujeme hodnotu do schránky.

  2. Vybereme všechny buňky v oblasti A1:C3.

  3. V hlavní nabídce zvolíme Nástroje > Makra > Zaznamenat makro a spustíme záznam makra. Program Calc zobrazí dialogové okno Zaznamenat makro, které obsahuje tlačítko Zastavit nahrávání (2).

Obrázek 2: Dialogové okno Zaznamenat makro s tlačítkem Zastavit nahrávání

Dialogové okno Zaznamenat makro s tlačítkem Zastavit nahrávání

  1. V hlavní nabídce zvolíme Úpravy > Vložit jinak > Vložit jinak a tím otevřeme dialog Vložit jinak (3).

Obrázek 3: Dialogové okno Vložit jinak

Dialogové okno Vložit jinak

  1. Vybereme možnost Vše v části VložitNásobit v části Operace (obě možnosti jsou červeně orámovány na 3), a klikneme na OK. Hodnoty v buňkách A1:C3 se nyní vynásobí 3 (4).

Obrázek 4: Buňky A1:C3 vynásobené číslem 3

Buňky A1:C3 vynásobené číslem 3

  1. Klepneme na tlačítko Zastavit nahrávání a zastavíme nahrávání makra. Calc zobrazí variantu dialogového okna Makra v Basicu (5).

V oblasti Uložit makro do dialogového okna Základní makra jsou zobrazena existující makra LibreOffice Basic, hierarchicky uspořádaná do kontejnerů knihoven, knihoven, modulů a maker, jak je popsáno v příručce Začínáme s LibreOffice. 5 ukazuje kontejner pro knihovny nazvaný Moje makra, kontejner pro knihovny Makra LibreOffice, kontejner pro knihovny v otevřeném souboru Makra.ods a kontejner pro knihovny v nepojmenovaném souboru vytvořeném v kroku 1). Pomocí ikon rozbalení/sbalení vlevo od každého názvu kontejneru knihovny zobrazíme knihovny, moduly a makra v tomto kontejneru.

Obrázek 5: Části dialogového okna Makra v Basicu

Části dialogového okna Makra v Basicu

1

Moje makra

5

Aktuální dokument

2

Makra LibreOffice

6

Vytvoření nové knihovny

3

Ikona rozbalit/sbalit

7

Vytvoření nového modulu v knihovně

4

Otevřené dokumenty

8

Makra ve vybraném modulu

  1. Vybereme položku aktuálního dokumentu v oblasti Uložit makro do. Protože aktuální dokument v tomto příkladu nebyl uložen, označuje se jeho výchozí název Bez názvu 1.

  2. Uložené dokumenty zahrnují knihovnu maker pojmenovanou Standard. Tato knihovna se nevytvoří, dokud není dokument uložen nebo pokud není potřeba, takže v tomto bodě v příkladu postup náš nový dokument knihovnu neobsahuje. Můžeme vytvořit novou knihovnu s makrem, které jsme právě vytvořili, ale není to nutné.

  3. Klepneme na tlačítko Nový modul. Calc zobrazí dialogové okno Nový modul (6). Zadáme název nového modulu nebo ponecháme výchozí název Modul 1.

Obrázek 6: Dialogové okno Nový modul

Dialogové okno Nový modul

Názvy knihoven, modulů a maker se musí řídit přísnými pravidly. Podle pravidel musí jména:
Obsahovat malá písmena (a, …, z), velká písmena (A, …, Z), číslice (0, …, 9) a znaky podtržítka (_).
Začínat písmenem nebo podtržítkem.
Nesmí obsahovat žádné další mezery, interpunkční symboly ani speciální znaky (včetně znamének).

  1. Pro vytvoření nového modulu klepneme na tlačítko OK. Protože v našem aktuálním dokumentu neexistují žádné knihovny maker, program Calc automaticky vytvoří a použije knihovnu Standard.

  2. V dialogovém okně Makra v Basicu vybereme položku nově vytvořeného modulu v oblasti Uložit makro do, zadáme text PasteMultiply v poli Název makra a klepneme na tlačítko Uložit (7).

Obrázek 7: Vybereme modul a pojmenujeme makro

Vybereme modul a pojmenujeme makro

Makro je uloženo pod názvem PasteMultiply v nově vytvořeném modulu v knihovně Standard dokumentu Bez názvu 1. 1  ukazuje obsah makra.

Výpis 1: Speciální vložení pomocí makra s násobením

 1|Sub PasteMultiply
2| ' --------------------------------------------------------------
3| ' definice proměnných
4|  dim document   as object
5|  dim dispatcher as object
6|  ' --------------------------------------------------------------
7|  ' získání přístupu k dokumentu
8|  document   = ThisComponent.CurrentController.Frame
9|  dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
10|
11|  
' --------------------------------------------------------------
12|  dim args1(5) as new com.sun.star.beans.PropertyValue
13|  args1(0).Name = "Flags"
14|  args1(0).Value = "A"
15|  args1(1).Name = "FormulaCommand"
16|  args1(1).Value = 3
17|  args1(2).Name = "SkipEmptyCells"
18|  args1(2).Value = false
19|  args1(3).Name = "Transpose"
20|  args1(3).Value = false
21|  args1(4).Name = "AsLink"
22|  args1(4).Value = false
23|  args1(5).Name = "MoveMode"
24|  args1(5).Value = 4
25|
26|  
dispatcher.executeDispatch(document, ".uno:InsertContents", "", 0, args1())
27|
28|
End Sub

Model komponent použitý v LibreOffice je Universal Network Objects nebo (UNO) a záznamník maker používá pro většinu příkazů UNO dispečer. S tímto technickým přístupem však souvisejí dva problémy. Jedním z nich je, že výstupy dispečera nejsou plně zdokumentovány a mohou se změnit. Další je, že rekordér ignoruje některé hodnoty z dialogů, které se otevírají během záznamu makra – je proto možné, že zaznamenáme komplikované makro, které ve skutečnosti neprovede vše podle očekávání. Další informace najdeme v rejstříku nápovědy pod heslem „záznam makra – omezení“.

Psaní vlastních funkcí

Vytvoření makra funkce

Můžeme napsat makro a pak jej zavolat, jako bychom volali funkci programu Calc. K vytvoření jednoduchého makra funkce postupujeme dle následujících kroků:

  1. Nový sešit vytvoříme pomocí Soubor > Nový > Sešit v hlavní nabídce, uložíme jej pod názvem CalcTestMacros.ods a necháme jej otevřený v programu Calc.

  2. V hlavní nabídce zvolíme Nástroje > Makra > Správce maker > Základní a otevřeme dialogové okno Makra v Basicu (8). Uvědomme si, že rozvržení dialogového okna Makra v Basicu se za těchto okolností liší od verze, kterou program Calc zobrazí, když uživatel klepne na tlačítko Zastavit nahrávání v dialogu Zaznamenat makra (viz 5).

Obrázek 8: Dialogové okno Makra v Basicu

Dialogové okno Makra v Basicu

  1. Oblast Makro z obsahuje seznam dostupných kontejnerů knihoven maker, včetně kontejnerů vztahujících se k aktuálně otevřeným dokumentům LibreOffice. Moje makra obsahuje makra, která píšeme nebo přidáme do LibreOffice a jsou k dispozici pro více než jeden dokument. Makra LibreOffice obsahuje makra, která jsou součástí naší instalace LibreOffice a neměla by se měnit.

  2. Klepnutím na Organizátor otevřeme dialogové okno Organizátor maker Basicu (9).

Klepneme na kartu Knihovny a v sekci Umístění vybereme položku s názvem aktuálního dokumentu. Oblast Knihovna se aktualizuje a zobrazí název prázdné knihovny Standard.

Obrázek 9: Dialogové okno Organizátor maker Basicu

Dialogové okno Organizátor maker Basicu

  1. Klepnutím na Nový otevřeme dialogové okno Nová knihovna a vytvoříme novou knihovnu pro tento dokument (10).

Obrázek 10: Dialogové okno Nová knihovna

Dialogové okno Nová knihovna

  1. Zadáme popisný název knihovny (například AuthorsCalcMacros) a klepnutím na OK vytvoříme knihovnu. Oblast Knihovna v dialogovém okně Organizátor maker Basicu se aktualizuje a nyní obsahuje název nově vytvořené knihovny. Název knihovny může obsahovat až 30 znaků. V některých případech může dialog zobrazovat pouze část názvu.

Obrázek 11: Nová knihovna se zobrazí v oblasti Knihovna:

Nová knihovna se zobrazí v oblasti Knihovna:

  1. Vybereme položku AuthorsCalcMacros v oblasti Knihovna a pro úpravu knihovny klepneme na Upravit. Program Calc automaticky vytvoří modul s názvem Modul 1 a makro pojmenované Main. Program Calc zobrazí základní integrované vývojové prostředí LibreOffice (IDE), zobrazené na 12.

12  zobrazuje výchozí konfiguraci pro IDE LibreOffice Basic. To zahrnuje:

Obrázek 12: Integrované vývojové prostředí LibreOffice Basic

Integrované vývojové prostředí LibreOffice Basic

Okno zásobníku volání (umístěné vpravo pod oknem Katalog objektů a editor) poskytuje informace o zásobníku procedur a funkcí při běhu programu.

LibreOffice Basic IDE poskytuje výkonné prostředí pro vývoj a ladění maker LibreOffice Basic. Podrobnější popis prostředí je nad rámec tohoto dokumentu, ale další informace lze nalézt v nápovědě.

  1. V okně Editoru upravíme kód tak, aby odpovídal kódu uvedenému v 2. Důležitým doplňkem je vytvoření funkce Volume, která vrací součin 3 buněk.

Příkaz Option Explicit vynutí všechny proměnné, které mají být deklarovány před jejich použitím. Je-li Option Explicit vynechán, proměnné jsou automaticky definovány při prvním použití jako typ Variant.

  1. V hlavní nabídce LibreOffice Basic IDE zvolíme Soubor > Uložit nebo klepneme na ikonu Uložit na standardní nástrojové liště, zmáčkneme Ctrl+S, čímž uložíme upravený Module1.

Výpis 2: Funkce, která vrací objem krychle.

1|'  *****  BASIC  *****
2|Option Explicit
3|Sub Main
4|
5|
End Sub
6|
1| Function Volume (Height As Double, Width As Double, Depth As Double) As Double
2|    Volume = Height * Width * Depth
3| End Function

Použití makra jako funkce

V nově vytvořeném sešitu CalcTestMacros.ods vybereme buňku a zadáme vzorec =Volume(A1, B1, C1) (13). Calc najde makro, zavolá ho a zobrazí výsledek (15,625) v dané buňce.

Obrázek 13: Použití makra Volume jako funkce Calc

Použití makra Volume jako funkce Calc

V názvech funkcí se nerozlišují velká a malá písmena. Na 13 byl název funkce zadán jako Volume, ale Calc jej na panelu Vzorec zobrazí jako VOLUME.

Upozornění na zabezpečení maker

Nyní bychom měli dokument Calc uložit, zavřít a znovu otevřít. V závislosti na nastavení v dialogovém okně Zabezpečení maker, ke kterému se dostaneme pomocí Nástroje > Možnosti > LibreOffice > Zabezpečení > Zabezpečení maker v hlavní nabídce, může Calc zobrazit upozornění uvedené na 14.

Obrázek 14: Upozornění, že dokument obsahuje makra

Upozornění, že dokument obsahuje makra

V případě varování zobrazeného na 14 musíme nastavit úroveň zabezpečení makra v Nástroje > Možnosti > LibreOffice > Zabezpečení > Zabezpečení maker na úroveň, která vám umožní makro spustit.

Pokud se dokument načte s vypnutými makry, Calc nebude schopen najít žádné makrofunkce a v každé dotčené buňce zobrazí chybu v podobě textu #VALUE? v dané buňce.

Načtené/nenačtené knihovny

Když program Calc otevře sešit, neotevře všechny knihovny maker, které může najít v dostupných kontejnerech knihoven, protože by to bylo náročné na zdroje. Místo toho program Calc automaticky načte jen knihovnu Standard v rámci kontejneru Moje makra a vlastní knihovnu Standard z dokumentu.

Po opětovném otevření tabulky CalcTestMacros.ods neobsahuje Calc funkci s názvem Volume(), a proto kontroluje všechny viditelné načtené knihovny maker, zda neobsahují tuto funkci. Program zkontroluje, zda načtené knihovny v Makra LibreOffice, Moje makra a dokumenty neobsahují pojmenovanou funkci. V naší původní implementaci je funkce Volume() uložena v knihovně AuthorsCalcMacros, která není automaticky načtena při otevření dokumentu. Proto není funkce Volume() nalezena a v buňce, kde je volána, se objeví chybový stav (15).

Obrázek 15: Makro funkce není k dispozici.

Makro funkce není k dispozici.

Pomocí Nástroje > Makra > Správce maker > Základní v hlavní nabídce otevřeme dialogové okno Makra v Basicu (16). Ikona načtené knihovny (například Standard) má jiný vzhled než ikona knihovny, která není načtena (například AuthorsCalcMacros).

Pro načtení knihovny klepneme na ikonu rozbalení vedle AuthorsCalcMacros. Ikona změní vzhled, což znamená, že knihovna je nyní načtena. Klepneme na Zavřít a zavřeme dialog Makra v Basicu.

Obrázek 16: Rozdílné symboly pro načtené a nenačtené knihovny

Rozdílné symboly pro načtené a nenačtené knihovny

Bohužel buňka obsahující =Volume() v naší původní implementaci je stále chybná. Calc nepřepočítává buňky v chybě, pokud je neupravujeme nebo je nějak nezměníme. Obvyklým řešením je ukládat makra použitá jako funkce do knihovny Standard. Pokud je makro velké nebo existuje-li mnoho maker, je do knihovny Standard uložen odkaz s požadovaným názvem. Makro s odkazem načte knihovnu obsahující implementaci a poté zavolá implementaci. Tuto metodu ilustrují následující kroky.

  1. Pro otevření dialogového okna Makra v Basicu použijeme Nástroje > Makra > Uspořádat makra > Basic v hlavní nabídce. Vybereme marko Volume a klepnutím na Upravit otevřeme makro pro editaci (17).

Obrázek 17: Vyberte makro a klepneme na tlačítko Upravit.

Vyberte makro a klepneme na tlačítko Upravit.

  1. Calc zobrazí prostředí LibreOffice Basic IDE (12) se vstupním kurzorem v okně Editor na řádku Function Volume (). Změníme název Volume na Volume_Implementation, aby kód funkce odpovídal 3.

Výpis 3: Změna názvu Volume na Volume_Implementation

1| Function Volume_Implementation (Height As Double, Width As Double, Depth As Double) As Double
2|    Volume_Implementation = Height * Width * Depth
3| End Function

  1. Klepnutím na tlačítko Vybrat makro na Standardní nástrojové liště v prostředí LibreOffice Basic IDE otevřeme dialogové okno Makra v jazyku Basic (17).

  2. Vybereme knihovnu Standard v dokumentu CalcTestMacros.ods a klepneme na tlačítko Nový, čímž vytvoříme nový modul. Zadáme smysluplný název, například CalcFunctions a klepneme na OK. Program Calc automaticky vytvoří makro s názvem Main a otevře modul pro úpravy.

  3. Vytvoříme makro v modulu CalcFunctions v knihovně Standard, která načte knihovnu AuthorsCalcMacros pokud již není načtena a poté zavolá implementační funkci. Viz 4.

Výpis 4: Vytvořímee novou funkci Volume, která bude volat funkci Volume_Implementation.

1|Function Volume(Height As Double, Width As Double, Depth As Double) As Double
2|  If NOT BasicLibraries.isLibraryLoaded("AuthorsCalcMacros") Then
3|    BasicLibraries.LoadLibrary("AuthorsCalcMacros")
4|  End If
5|  Volume = Volume_Implementation(Height As Double, Width As Double, Depth As Double) As Double
6|End Function

  1. Uložíme, zavřeme a znovu otevřeme dokument v programu Calc. Pokud jsou makra povolena, funkce Volume() tentokrát funguje podle očekávání.

Argumenty jsou předávány jako hodnoty

Argumenty předávané makru z programu Calc jsou vždy hodnoty. Jinými slovy, hodnoty jsou do makra zkopírovány a není možné zjistit, které buňky jsou případně použity. Například =Volume(A1, B1, C1) předá hodnotu buněk A1, B1, C1, and Volume nemá možonst zjistit, že byla použita buňka A1 (nebo B1 nebo C1).

Pokud musíme vědět, na které buňky se odkazuje spíše než na hodnoty v buňkách, předáme rozsah jako řetězec, analyzujeme řetězec a získáme hodnoty v odkazovaných buňkách. Viz „Přímý přístup k buňkámbelow.

Psaní maker, která fungují jako vestavěné funkce

Přestože program Calc najde a volá makra jako normální funkce, ve skutečnosti se nechovají jako vestavěné funkce. Například makra se neobjeví v seznamech funkcí. Napsáním doplňku je možné psát funkce, které se chovají jako normální funkce. Jedná se však o pokročilé téma, které je určeno zkušeným programátorům a je nad rámec této příručky. Další informace,včetně podrobností, jsou dostupné v nápovědě aplikace.

Odstranění maker LibreOffice Basic

Chceme-li odstranit nežádoucí makro, použijeme následující kroky:

  1. V hlavní nabídce zvolíme Nástroje > Makra > Správce maker > Basic a otevřeme dialogové okno Makra v Basicu (17).

  2. Vybereme makro, které chceme odstranit, a klepneme na tlačítko Smazat.

  3. Program Calc zobrazí potvrzovací dialog. Pro pokračování klepneme na Ano.

  4. Pro odstranění dialogového okna Makra v Basicu z obrazovky klepneme na tlačítko Zavřít.

Nežádoucí modul odstraníme následujícím postupem:

  1. V hlavní nabídce zvolíme Nástroje > Makra > Správce maker > Basic a otevřeme dialogové okno Makra v Basicu (17).

  2. Klepnutím na tlačítko Organizátor otevřeme dialogové okno Organizátor maker Basic (18).

  3. Ujistíme se, že je vybrána karta Moduly.

  4. V oblasti Moduly vybereme modul, který chceme odstranit.

  5. Klepneme na tlačítko Smazat.

  6. Program Calc zobrazí potvrzovací dialog. Pro pokračování klepneme na Ano.

  7. Pro zavření dialogového okna Organizátor maker LibreOffice Basic klepneme na tlačítko Zavřít.

  8. Pro zavření dialogového okna Makra v LibreOffice Basic klepneme na tlačítko Zavřít.

Obrázek 18: Dialogové okno Organizátor maker Basic, karta Moduly

Dialogové okno Organizátor maker Basic, karta Moduly

Přímý přístup k buňkám

K interním objektům LibreOffice můžeme přistupovat přímo a manipulovat s dokumentem Calc. Například makro ve 5 přidá hodnoty do buňky A2 z každého listu aktuálního dokumentu. ThisComponent při spuštění makra automaticky nastaví odkaz na aktuální dokument. Dokument Calc obsahuje listy a makro k nim přistupuje prostřednictvím volání ThisComponent.getSheets(). Použití getCellByPosition(sloupec, řádek) vrátí buňku na konkrétním řádku a sloupci.

Výpis 5: SumCellsAllSheets sečte hodnoty v buňce A2 každého listu.

 1|Function SumCellsAllSheets()
2|  Dim TheSum As Double
3|  Dim i As integer
4|  Dim oSheets
5|  Dim oSheet
6|  Dim oCell
7|
8|  
TheSum = 0
9|  oSheets = ThisComponent.getSheets()
10|  For i = 0 To oSheets.getCount() - 1
11|    oSheet = oSheets.getByIndex(i)
12|    oCell = oSheet.getCellByPosition(0, 1) ' GetCell A2
13|    TheSum = TheSum + oCell.getValue()
14|  Next
15|  SumCellsAllSheets = TheSum
16|End Function

Objekt buňky podporuje metody getValue(), getString() a getFormula() pro získání numerické hodnoty, hodnoty řetězce nebo vzorce použitého v buňce. Použijeme odpovídající sady funkcí k nastavení příslušných hodnot.

Pomocí oSheet.getCellRangeByName("A2") vrátíme rozsah buněk podle názvu. Pokud je odkazováno na jednu buňku, je vrácen objekt buňky. Pokud je zadána oblast buněk, je vrácena celá oblast buněk (viz 6). Všimněme si, že rozsah buněk vrací data jako pole polí, což je těžkopádnější, než kdyby se s nimi zacházelo jako s polem o dvou rozměrech.

Výpis 6: SumCellsAllSheets sečte hodnoty v buňkách A2:C5 každého listu.

 1|Function SumCellsAllSheets()
2|  Dim TheSum As Double
3|  Dim iRow As Integer, iCol As Integer, i As Integer
4|  Dim oSheets, oSheet, oCells
5|  Dim oRow(), oRows()
6|
7|  
TheSum = 0
8|  oSheets = ThisComponent.getSheets()
9|  For i = 0 To oSheets.getCount() - 1
10|    oSheet = oSheets.getByIndex(i)
11|    oCells = oSheet.getCellRangeByName("A2:C5")
12|
13|    
' Metoda getDataArray() vrací řetězce a čísla
14|    ', ale v této funkci se nepoužívá.
15|
16|    
' Metoda getData() vrací pouze čísla je použitelná
17|    ' to this function.
18|
19|    
oRows() = oCells.getData()
20|    For iRow = LBound(oRows()) To UBound(oRows())
21|      oRow() = oRows(iRow)
22|      For iCol = LBound(oRow()) To UBound(oRow())
23|        TheSum = TheSum + oRow(iCol)
24|      Next
25|    Next
26|  Next
27|  SumCellsAllSheets = TheSum
28|End Function

Když je makro voláno jako funkce Calc, nemůže makro upravit žádnou hodnotu v listu, ze kterého bylo makro vyvoláno, s výjimkou hodnoty buňky, která obsahuje funkci.

Přehled maker BeanShell, JavaScript a Python

Úvod

Mnoho programátorů nemusí znát LibreOffice Basic, a proto program Calc podporuje makra napsaná ve třech dalších jazycích, které mohou být známější. Jedná se o BeanShell, JavaScript a Python.

Primárním skriptovacím jazykem pro program Calc je LibreOffice Basic a standardní instalace LibreOffice poskytuje výkonné integrované vývojové prostředí (IDE) spolu s dalšími možnostmi pro tento jazyk.

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 program Calc vytvoří makro v LibreOffice Basic. Chceme-li použít další dostupné skriptovací jazyky, musíme tento kód napsat sami.

Když vybereme spuštění makra pomocí Nástroje > Makra > Spustit makro v hlavní nabídce, program Calc zobrazí 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ů (19).

Když se rozhodneme upravit makro pomocí Nástroje > Makra > Upravit makra z hlavní nabídky, zobrazí program Calc IDE LibreOffice Basic. 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.

Model komponent použitý v LibreOffice je znám jako Universal Network Objects nebo UNO. LibreOffice makra ve všech skriptovacích jazycích používají UNO runtime application programming interface (API). Rozhraní XSCRIPTCONTEXT je poskytováno skriptům maker ve všech čtyřech jazycích a poskytuje prostředek pro přístup k různým rozhraním, která mohou potřebovat k provedení nějaké akce v dokumentu.

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

Dialogové okno Výběr makra

Makra BeanShell

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

Po výběru Nástroje > Makra > Správce maker > BeanShell v hlavní nabídce zobrazí Calc dialogové okno BeanShell Makra (20).

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

Dialogové okno Makra prostředí BeanShell

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

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

Okno pro ladění prostředí BeanShell

7 je příkladem BeanShell makra, které vloží text „Hello World from BeanShell“ do buňky A1 do aktivního sešitu Calc.

Výpis 7: Ukázka makra BeanShell.

 1| import com.sun.star.uno.UnoRuntime;
2| import com.sun.star.sheet.XSpreadsheetView;
3| import com.sun.star.text.XText;
4| model = XSCRIPTCONTEXT.getDocument();
5| controller = model.getCurrentController();
6| view = UnoRuntime.queryInterface(XSpreadsheetView.class, controller);
7| sheet = view.getActiveSheet();
8| cell = sheet.getCellByPosition(0, 0);
9| cellText = UnoRuntime.queryInterface(XText.class, cell);
10| textCursor = cellText.createTextCursor();
11| cellText.insertString(textCursor, "Hello World from BeanShell", true);
12| return 0;

Makra JavaScript

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

Po výběru Nástroje > Makra > Správce maker > JavaScript v hlavní nabídce zobrazí Calc dialogové okno JavaScript Makra (22).

Obrázek 22: Dialogové okno Makra JavaScriptu

Dialogové okno Makra JavaScriptu

Makra v JavaScriptu nelze v LibreOffice upravovat. Makro musíme upravit v externím editoru.

8 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 8: Ukázka makra v JavaScriptu.

 1| importClass(Packages.com.sun.star.uno.UnoRuntime);
2| importClass(Packages.com.sun.star.sheet.XSpreadsheetDocument);
3| importClass(Packages.com.sun.star.container.XIndexAccess);
4| importClass(Packages.com.sun.star.table.XCellRange);
5| importClass(Packages.com.sun.star.table.XCell);
6| documentRef = XSCRIPTCONTEXT.getDocument();
7| spreadsheetInterface = UnoRuntime.queryInterface(XSpreadsheetDocument, documentRef);
8| allSheets = UnoRuntime.queryInterface(XIndexAccess, spreadsheetInterface.getSheets());
9| theSheet = allSheets.getByIndex(0);
10| Cells = UnoRuntime.queryInterface(XCellRange,theSheet);
11| cellA1 = Cells.getCellByPosition(0,0);
12| theCell = UnoRuntime.queryInterface(XCell,cellA1);
13| theCell.setFormula("Hello World from JavaScript");

Makra Python

Python je univerzální skriptovací jazyk, který byl poprvé vydán v roce 1991. V posledních letech se těší stále větší oblibě a je běžně používán datovými vědci.

Když v hlavní nabídce vybereme Nástroje > Makra > Správce maker > Python, Calc zobrazí dialogové okno Makra Python (23).

Obrázek 23: Dialogové okno Makra Python

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ě můžeme upravovat Python skripty pomocí oblíbeného textového editoru nebo externího IDE. Rozšíření Alternative Python Script Organizer (APSO) usnadňuje editaci skriptů v Pythonu, zejména pokud jsou vložené 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ů.

Více informací nalezneme v systému LibreOffice nápovědy a v sekci Designing & Developing Python Applications na wiki The Document Foundation https://wiki.documentfoundation.org/Macros/Python_Design_Guide.

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

Výpis 9: Ukázkové makro Python

1|import uno
2|
3|
def HelloWorld():
4|    doc = XSCRIPTCONTEXT.getDocument()
5|    cell = doc.Sheets[0]['A1']
6|    cell.setString('Hello World from Python')
7|    return

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ů LibreOffice Base apod. Cílem knihovny ScriptForge je zjednodušit tvorbu maker tím, že usnadní 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 podporuje LibreOffice Basic i Python. 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.

Kapitola Začínáme s makry, příručky Začínáme s LibreOffice obsahuje další úvodní materiál o knihovně ScriptForge a jednoduchý příklad. Podrobnější informace a mnoho příkladů nalezneme v nápovědě LibreOffice, když v rejstříku vyhledáme výraz „ScriptForge“.

Vestavěný inspektor objektů

LibreOffice má rozsáhlé rozhraní API (Application Programming Interface), které mohou programátoři maker využít k automatizaci téměř všech aspektů jeho aplikací. Jednou z hlavních výzev pro programátory je však zjištění typů objektů UNO (Universal Network Objects) a jejich podporovaných služeb, metod a vlastností.

Vestavěný inspektor objektů slouží vývojářům maker k prohlížení objektů a zjišťování, jak k nim lze přistupovat a jak je lze používat. Chceme-li se k tomuto nástroji dostat, přejdeme na Nástroje > Nástroje pro vývojáře v hlavní nabídce a otevře se okno Inspektor objektů (24). Ve výchozím nastavení je toto okno zakotveno v dolní části uživatelského rozhraní.

Levou část okna tvoří navigátor DOM (Document Object Model), který umožňuje uživateli procházet všechny objekty v dokumentu. Po výběru objektu se na kartách v pravé části okna zobrazí následující 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.

Obrázek 24: Okno Inspektor objektů

Okno Inspektor objektů

„Začínáme s makry“ v příručceZačínáme s LibreOffice obsahuje další informace o vestavěném inspektoru objektů. Podrobnější informace a příklady nalezneme v nápovědě LibreOffice po vyhledání výrazu „vývojové nástroje“ v rejstříku nápovědy.

Práce s makry VBA

Pro programátora Excel/VBA je LibreOffice Basic programovacím jazykem velmi podobným VBA. Primárním důvodem, proč VBA nefunguje v programu Calc, přestože Calc umí číst sešit aplikace Excel, je to, že Calc používá jiný mechanismus pro přístup ke komponentám pracovního sešitu "workbook" (v programu Calc se nazývá sešit), jako jsou buňky na listu "worksheet" (tzv. list "sheet" v Calc). Konkrétně objekty, atributy a metody používají různé názvy a odpovídající chování se někdy mírně liší.

Chceme-li převést kód VBA, musíme nejprve načíst kód VBA v LibreOffice.

Načtení kódu VBA

Na stránce Vlastnosti VBA (Nástroje > Možnosti > Načítání/ukládání > Vlastnosti VBA) můžeme nastavit, zda se mají v dokumentech Microsoft Office, které otevíráme v LibreOffice, zachovat makra.

Obrázek 25: Volba Načíst/uložit vlastnosti VBA

Volba Načíst/uložit vlastnosti VBA

Pokud zaškrtneme Načíst kód Basic, umožníme tím v LibreOffice upravovat makra. Změněný kód se uloží v dokumentu ODF, ale nezachová se, pokud ho uložíme do formátu Microsoft Office.

Pokud zaškrtneme Uložit původní kód Basic, makra nebudou v LibreOffice spustitelná, budou však v nezměněné podobě ukládány do souborů ve formátech Microsoft Office.

Při importu souborů programů Microsoft Word nebo Excel, jejichž součástí je kód VBA, můžeme zaškrtnout možnost Spustitelný kód. Tento kód se obvykle jen uchovává, je však neaktivní (pokud kód zobrazíme pomocí Basic IDE, bude celý zakomentovaný). S touto možností bude kód spustitelný.

Možnost Uložit původní kód Basic má přednost před Načíst kód Basic. Pokud jsou vybrány obě možnosti a zakázaný kód upravíme v LibreOffice, původní kód VBA se při ukládání do formátu Microsoft Office uloží.

Chceme-li si být jisti, že jsme odstranili možné makroviry z dokumentu Microsoft Office, zaškrtnutí Uložit původní kód Basic zrušíme. Dokument bude uložen bez kódu VBA.

Příkaz Option VBASupport

Příkaz Option VBASupport určuje, že LibreOffice Basic bude podporovat některé příkazy, funkce a objekty VBA. Tento příkaz musíme přidat před spustitelný kód v modulu.

Podpora VBA není úplná, ale pokrývá velkou část běžných způsobů použití.

Když je povolena volba VBASupport, argumenty funkce LibreOffice Basic a návratové hodnoty jsou stejné jako jejich protějšky VBA. Když je podpora VBA zakázána, mohou funkce LibreOffice Basic přijímat argumenty a vracet hodnoty odlišné od jejich protějšků VBA.

Výpis 10: Použití možnosti VBASupport.

1|Option VBASupport 1
2|Sub Example
3|    Dim sVar As Single
4|    sVar = Worksheets("Sheet1").Range("A1")
5|    Print sVar
6|End Sub

Bez deklarace Option VBASupport musí být kód ve 10 konvertován na LibreOffice Basic, viz 11.

Výpis 11: Převedený kód VBA.

 1|Sub Example
2|    Dim sVar As Single
3|    Dim oSheet as Object
4|    Dim oCell as Object
5|    ' Worksheets(“Sheet1”).
6|    oSheet = ThisComponent.getSheets().getByIndex(0)
7|    ' Range("A1")
8|    oCell = oSheet.getCellByPosition(0, 0)
9|    sVar = oCell.getValue()
10|    Print sVar
11|End Sub

Option VBASupport může ovlivnit nebo pomoci v následujících situacích:

VBA UserForms (dialogová okna LibreOffice Basic)

V makrech se často objevují uživatelské formuláře (dialogy), které vyžadují vaši interakci a výběr parametrů. Fragment kódu níže je receptem na takové převody, které které nejsou zpracovány automaticky pomocí VBA.

Výpis 12: Zobrazení UserForm [Dialog] s názvem „MyForm“ pomocí VBA,

1|Sub MyProc
2|    
MyForm.Show
3|End Sub

Výpis 13. LibreOffice Basic zobrazí UserForm [Dialog] nazvaný “MyForm”

' oDlg by měl být viditelný na úrovni modulu
1|Dim oDlg As Object
2|Sub MyProc
3|    DialogLibraries.LoadLibrary("Standard")
4|    oDlg = CreateUnoDialog(DialogLibraries.Standard.MyForm)
5|    oDlg.execute()
6|End Sub

Proměnná oDlg je viditelná na úrovni modulu pro všechny ostatní procedury, které přistupují k ovládacím prvkům dialogu. To znamená, že všechny postupy manipulující s ovládacími prvky na tomto dialogovém panelu nebo přistupující k nim jsou umístěny v jednom modulu.

Závěr

Tato kapitola poskytuje přehled o vytváření knihoven a modulů pomocí záznamníku maker, o používání maker jako funkcí Calc, psaní vlastních maker bez záznamníku maker a konverzi VBA na LibreOffice Basic. Každé téma si zaslouží alespoň jednu kapitolu a psaní vlastních maker pro Calc může snadno zaplnit celou knihu. Jinými slovy, toto je jen začátek toho, co se můžeme naučit.

Pokud již známe jazyk Basic (nebo jiný programovací jazyk), web LibreOffice Extensions obsahuje na adrese https://extensions.libreoffice.org/ sadu rychlých referenčních karet LibreOffice Basic. Ty lze rychle vyhledat výběrem filtrů Dokumentace a Makro

Další podrobnosti o makrech v Calcu lze získat v nápovědě LibreOffice (obecné informace najdeme vyhledáním hesla „makra“ v rejstříku, konkrétní informace o podpoře VBA najdeme vyhledáním hesla „podpora VBA“), na stránkách wiki nadace The Document Foundation (https://wiki.documentfoundation.org/Macros) a v dalších internetových zdrojích (například na webu https://ask.libreoffice.org/ Q&A>).

Contents