Nastavení kontroly vstupních dat makrem

programovani.png Určitým druhem formátu buněk je i nastavení kontroly vstupních dat. To je funkce, která umožňuje omezit možnosti zadání obsahu do buněk. Je užitečná zejména tam, kde potřebujete povolit výběr pouze určitých hodnot. Je ale možné, že potřebujete tyto hodnoty dynamicky měnit. V tom případě se možnost nastavení makrem velice hodí.    

Možnost nastavení klasickým způsobem naleznete v Calcu pod záložkou Data | Kontrola vstupních dat

Kontrola vstupních dat Kontrola vstupních dat


Vždy je nutné nastavit typ hodnoty, způsob vyhodnocení kontroly dat a samotné hodnoty, se kterými bude prováděno porovnání. V makru si přiřadíte ovládání kontroly vstupních dat do proměnné, pomocí které je nakonec přiřadíme k buňce, nebo oblasti buněk.

kontrola = oblast.Validation
Oblast = thisComponent.sheets(0).getCellRangeByName("A1:A10")

V proměnné kontrola nyní budeme provádět veškerá nastavení.

Nastavení typu hodnoty

Jako první nastavíte typ hodnoty, které poté mohou být použity.

Dialog pro kontrolu vstupních dat Dialog pro kontrolu vstupních dat


Programově nastavíte typ hodnoty takto:

Kontrola.type = com.sun.star.sheet.ValidationType.WHOLE ' porovná celá čísla proti zadané podmínce

Další možnosti jsou:

.ValidationType.ANY – nastaví kontrolu na všechny hodnoty – tedy anuluje veškerou kontrolu.
.ValidationType.DECIMAL – porovná všechny čísla proti specifikované podmínce
.ValidationType.DATE – porovná zadané datum proti specifikované podmínce
.ValidationType.TIME – porovná zadaný čas proti specifikované podmínce
.ValidationType.TEXT_LEN – porovná délku zadaného textu proti specifikované podmínce
.ValidatinType.LIST – jsou povoleny pouze hodnoty zadané přímo, nebo obsahem z oblasti buněk

Jak budete kontrolovat hodnotu

V minulém díle jste se v části o podmíněném formátování seznámili se způsobem, jakým se zadávají operátory pro podmíněné formátování. Při kontrole dat použijeme stejný postup.

kontrola.setOperator(com.sun.star.sheet.ConditionOperator.EQUAL)

Proti čemu kontrolujete – zadání hodnoty

Můžete zadat jednu až dvě hodnoty (pro případ, že si jako operátor vyberete mezi a není mezi). Dále můžete zadat adresu buněk, které obsahují povolené hodnoty, a nakonec můžete hodnoty zadávat přímo do kódu makra.

Pro celá čísla a omezení délky textu

kontrola.setFormula1(1) ' číslo 1

 Pro desetinná čísla

kontrola.setFormula(1.5) ' pro číslo 1,5 
Pozor, v kódu makra používáte tečku jako desetinnou čárku.

Pro datum
kontrola.setFormula1("2012-12-12") ' pro 12.12.2012
Pro čas
kontrola.setFormula1("08:08:08") ' pro čas 8 hodin, 8 minut a 8 sekund
Pro seznam přímým zadáním
kontrola.setFormula1("""ahoj"";""nazdar"";""čau"";""dobrý den""")

Hodnoty seznamu oddělujte středníkem. Všimněte si také uvozovek. První a poslední uvozovky označují začátek a konec seznamu. Okolo slov jsou vždy dvě uvozovky. V programovém zápisu to znamená oddělení jednotlivých záznamů.

Pro seznam z rozsahu buněk
kontrola.setFormula1("$List1.$C$1:$C$5")

Adresu buněk zadávejte vždy jako absolutní. Při zadání kontroly dat do oblasti buněk dojde k posunu i v zadání kontroly (stejně jako při kopírování relativních odkazů).

Pro zadání dvou podmínek
kontrola.setFormula1(10)
kontrola.setFormula2(20)

Tímto způsobem zadáte hodnoty pro kontrolu čísel při použití mezi a není mezi.

Nápověda při vstupu

Pokud chcete zobrazit nápovědu, musíte ji definovat a povolit: 

Záložka Nápověda při vstupu

Záložka Nápověda při vstupu


Kód pro zadání bude vypadat takto:

kontrola.InputTitle = "Nápověda"
kontrola.InputMessage = "Hodnota musí být ze seznamu"
kontrola.ShowInputMessage = True

Zobrazený výsledek při vybrané buňce se zobrazenou nápovědou:

Zobrazení nápovědy Zobrazení nápovědy

Chybové hlášení

V případě, že dojde k zadání neplatných hodnot, máte několik možností určit, jak má program reagovat.

Záložka Chybové hlášení Záložka Chybové hlášení


Například můžete zobrazit hlášení, že hodnota neodpovídá zadané podmínce a určíte, jak má program pokračovat:


kontrola.ErrorTitle = "CHYBA"
kontrola.ErrorMessage = "Hodnota neodpovídá možnostem zadání"
kontrola.ShowErrorMessage = True

Takto jste povolili chybové hlášení.

Zobrazení upozornění Zobrazení upozornění


Zbývá určení, jak se má program dále chovat:

kontrola.ErrorAlertStyle = com.sun.star.ValidationAlertStyle.WARNING

Při tomto zadání se po zadání hodnoty do buňky zobrazí upozornění s možnostmi hodnotu ponechat či vymazat.

Možností je opět více.

com.sun.star.ValidationAlertStyle.STOP – zobrazí zprávu a vymaže zadanou hodnotu
com.sun.star.ValidationAlertStyle.INFO – zobrazí zprávu a ponechá zadanou hodnotu
com.sun.star.ValidationAlertStyle.MACRO – při zadání chybné hodnoty se spustí definované makro.

ValidationAlertStyle.MACRO

Zatímco ostatní možnosti a jejich zadání jsou jasné, při použití makra je nutné znát způsob, jakým se makro v podmíněném formátování definuje.

Adresa makra se zadává do „titulku“ chybové zprávy, v kódu tedy do kontrola.ErrorTitle. Ukázka zadání makra více osvětlí způsob zadání adresy.

vnd.sun.star.script:Standard.Module1.Main?language=Basic&location=application

Rozdělením adresy na několik částí zjistíte zákonitosti zadání.

Vnd.sun.star.script:Standard.Module1.Main

Tato část znamená, že používáte makro umístěné v knihovně Standard a v modulu s názvem Module1. Makro je pojmenované Main.

Otazník rozděluje adresu makra od jeho druhu.

language=Basic&location=application

Zde uvádíte, že makro je psáno v jazyce Basic s jazykovou lokací dle aplikace.

Zavedení kontroly dat

Když jste definovali všechny podmínky, zbývá jen přiřadit formátování k rozsahu buněk.

oblast.Validation = kontrola

Příklad kódu

Na ukázku uvádím příklad kódu, kterým nastavíte podmíněné formátování pro oblast A1:A10 na prvním listu sešitu. Kód nastaví požadovanou hodnotu na rozsah buněk B1:B10 v prvním listu, zobrazí nápovědu a při zadání chybné hodnoty se zobrazí informační zpráva a hodnota bude vymazána.

sub nastav_podm_formatovani
Oblast = thisComponent.sheets(0).getCellRangeByName("A1:A10")
kontrola = oblast.Validationkontrola.Type = com.sun.star.sheet.ValidationType.LIST
kontrola.setOperator(com.sun.star.sheet.ConditionOperator.EQUAL)
kontrola.setFormula1("$List1.$B$1:$B$10")
kontrola.InputTitle = "ZADÁNÍ"
kontrola.InputMessage = "Vložte hodnotu z výběru"kontrola.showInputMessage = Truekontrola.ErrorTitle = "POZOR – CHYBA"
kontrola.ErrorMessage = "Zadána chybná hodnota"
kontrola.ShowErrorMessage = Truekontrola.ErrorAlertStyle = com.sun.star.sheet.ValidationAlertStyle.STOP
oblast.Validation = kontrola
end sub

Pro tuto chvíli opustíme formátování, přestože nebyly dosud vyčerpány všechny možnosti, které program poskytuje. Další díly se budou věnovat ukládání sešitů do formátů CSV a exportu do PDF.

(Jako ve škole) Průměr: 1.00 | Hodnotilo: 4
 

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.

 
Daniel Sedláček

Daniel Sedláček

Amatérsky se věnuji programování maker od podzimu 2010.
Aktivní jsem na fóru od ledna 2011.
Od července 2011 spolupracuji i jako moderátor fóra.

Využívám pouze OpenOffice.org (LibreOffice nemám nainstalován).

 
 
 
woo jaw demo hz