Programování vlastních funkcí v Calcu – příklad SPLITSTRING

calc.png Stalo se vám, že jste potřebovali v Calcu něco udělat, jenže k tomu neexistovala odpovídající funkce, nebo jste museli použít složité konstrukce vzorců a pomocných výpočtů? Proč si nevytvořit vlastní funkci? Ukážeme vám to.  

Funkce jsou v podstatě jakési mini programy, které provádějí zadané úkony. Calc umožňuje vytvářet i vlastní takovéto prográmky, které pak můžete volat v listu jako funkci. Obecně se takovým programům vytvořeným v rámci sešitu říká makra.

Jak s makry začít

Abyste mohli makra (a tedy i naprogramované funkce) spouštět, musíte je nejprve povolit přes menu Nástroje | Volby... | OpenOffice.org | Bezpečnost | Zabezpečení maker. V otevřeném dialogu nastavte úroveň zabezpečení na střední. Při otevírání souboru s makry je pak nutné makra vždy povolit.

Povolení maker při otevírání souboruPovolení maker při otevírání souboru

OpenOffice.org umožňuje psát makra v různých programovacích jazycích, na výběr máte: OpenOffice.org Basic, Python, JavaScript, BeanShell. Příklad dále je napsán v Basicu.

Správce maker pro OpenOffice.org BasicSprávce maker pro OpenOffice.org Basic

Editor Basicu spustíte přes menu Nástroje | Makra | Správce maker | OpenOffice.org Basic. Ve zobrazeném správci maker vyberte soubor a modul, ve kterém chcete makro editovat. Pokud v souboru ještě není žádný modul, pak vytvořte nový pomocí stejnojmenného tlačítka. Jestliže chcete editovat konkrétní, již existující makro, vyberte ho ze seznamu Existující makra a klikněte na Upravit. Tím se otevře editor Basicu, jak vidíte na následujícím obrázku.

Editor OpenOffice.org BasicuEditor OpenOffice.org Basicu

Další text předpokládá alespoň základní znalost nějakého programovacího jazyka, např. Basicu, Pascalu, C či Perlu, a základních struktur, jako jsou sekvence, selekce a iterace. OpenOffice.org Basic má velmi jednoduchou syntaxi, komplikace pak nastávají v případě využití objektů Calcu.

Hlavní část okna editoru Basicu zabírá samotná editační oblast, ve které se píše text maker a funkcí. Pod ní se nachází tzv. kukátko, pomocí kterého lze při krokování sledovat hodnoty zvolených proměnných. Pomocí rozbalovacího seznamu nad editační oblastí se lze rychle přepínat mezi jednotlivými soubory s makry.

Funkce se v OOo Basicu zapisují následovně:

Function nazev_funkce(parametry)
	příkazy
End Function

Parametry jsou volitelné, je však jen málo funkcí, které by je nepoužívaly.

Příklad makra

V následujícím popisovaném příkladu bude vytvořena nová, vlastní funkce SPLITSTRING, která má za úkol rozdělit vstupní text podle zadaného oddělovače a jako výsledek vrátit pořadím určenou část vstupního textu po rozdělení. V programovacích jazycích je k tomuto obvykle určen příkaz split. Calc však takovouto funkci v rámci sešitu nemá (v Basicu však ano, což znamená úsporu práce). Například SPLITSTRING("a,b,c,d";",";3) má vrátit „c“.

Prvním úkolem je převzetí odpovídajících parametrů z funkce zadané v sešitu. Funkce SPLITSTRING bude mít tedy parametry v tomto pořadí:

  1. vstupní text;

  2. oddělovač;

  3. pořadí z rozdělených částí.

Parametry převezmete již v hlavičce funkce:

Function splitstring(retezec, rozdelovac, prvek)

Kdo je zvyklý definovat u proměnných datové typy, může použít delší zápis:

Function splitstring(retezec as string, rozdelovac as string, prvek as integer) as string

Celý úkol značně usnadní příkaz Basicu split, který rozdělí vstupní text na části podle zadaného oddělovače a jeho výsledkem je pak pole řetězců – v příkladu nazvané polozky na 3. řádku.

Na 2. řádku je potřeba od zadaného pořadí odečíst jedničku, protože první prvek pole polozky má index 0.

Řádky 4-8 pak představují jakési bezpečnostní opatření pro případ, že by někdo zadal pořadí z pole rozdělených položek, které neexistuje (záporné pořadí nebo příliš vysoké) – samotný test je proveden na řádku 4. Příkaz ubound(název_pole) vrací počet prvků v poli. Pokud ve funkci zadaný parametr pořadí není v rozsahu počtu prvků pole polozky, pak je výsledkem prázdný řetězec (řádek 5), jinak je vrácen odpovídající prvek z pole polozky (řádek 7).

Výpis funkce SPLITSTRING – řádky jsou číslovány pro lepší provázanost s textem:

  1. Function splitstring(retezec, rozdelovac, poradi)
  2. 	poradi = poradi - 1
  3. 	polozky = split(retezec, rozdelovac)
  4. 	if poradi < 0 or poradi > ubound(polozky) then 
  5. 		splitstring = ""
  6. 	else
  7. 		splitstring = polozky(poradi)
  8. 	end if	
  9. End Function

Jestliže máte funkci zapsanou v Basicu, můžete ji pak použít v samotném listu. Pokud ji budete chtít použít v jiném sešitu (souboru ODS), musíte ji vložit do jeho maker – buďto běžným překopírováním textu makra, nebo načtením ze souboru. Makra zapsaná v editoru Basicu lze uložit pomocí ikonky diskety v horní liště a načíst pomocí ikonky složky (soubory mají příponu .bas a jde o obyčejný text); položky v menu Soubor slouží k ukládání a otevírání celého dokumentu.

Ke stažení

Stáhněte si uvedené dokumenty:

Další články o funkcích

(Jako ve škole) Průměr: 1,57 | Hodnotilo: 7
 

Přidat názor

 

Nejsou podporovány žádné značky, komentáře jsou jen čistě textové. Více o diskuzích najdete v nápovědě. Diskuzi můžete sledovat pomocí RSS kanálu.

 
Tomáš Hanusek

Tomáš Hanusek

 
 
 
woo jaw demo hz