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.

 
EDU Trainings
Tomáš Hanusek

Tomáš Hanusek

 

Public Relations

IPv4 zastarává, i tak si však zaslouží kvalitní zabezpečení

Znáte souvislost mezi doménami a typickými IP adresami? Není od věci si uvědomit, že zatímco domény jsou určeny pro zjednodušení hledání webové stránky na internetu, IP adresy slouží primárně pro výpočetní techniku, konkrétně pro přesné vyhledání konkrétního serveru nebo počítače.

Pokračování ...


AIMTEC
SAM v kostce 2019
 
 
woo jaw demo hz