Možnost nastavení klasickým způsobem naleznete v Calcu pod záložkou Data | 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
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
kontrola.setFormula1("2012-12-12") ' pro 12.12.2012
kontrola.setFormula1("08:08:08") ' pro čas 8 hodin, 8 minut a 8 sekund
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ů.
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ů).
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
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:
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.
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í.
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.
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í.













