Vlastní formát čísel
Pokud jsou standardní formáty nevyhovující, je nutné si nastavit vlastní. Pro nastavení formátu jej musíte definovat, přidat mezi ostatní formáty a nakonec použít v buňce nebo oblasti. Všechny číselné formáty mají přiřazené „identifikační“ číslo, pod kterým je možné je vyvolat. U formátů, které teprve definujete, je to číslo -1. Takto zjistíte, zda formát existuje, a pokud ne, tak ho vytvoříte. K tomu slouží metoda queryKey.
format_cisla = "1 - 00000" existuje_format = doc.NumberFormats.queryKey(format_cisla, jazyk, false)
Na druhém řádku vidíte použití v kódu makra. Takto zjistíte, zda definovaný formát existuje, a pokud ne, je návratová hodnota -1.
if existuje_format = - 1 then ' neexistuje existuje_format = doc.getNumberFormats().addNew( format_cisla, jazyk) endif
Tímto způsobem přidáte vlastní formát mezi ostatní, takže je již dostupný pro použití
v dokumentu.
oblast.NumberFormat = existuje_format
Formátování má vlastní zákonitosti. Zde je pár nejdůležitějších:
- Čísla se formátují zprava doleva.
- Použití nuly ve formátu znamená, že číslo bude vždy zobrazeno. Nulu použijte vždy na konci formátu, nebo před desetinnou čárkou. Například pokud použijete formát 0000 a do buňky zadáte číslo 12, bude zobrazeno 0012.
- Znak # ve formátu znamená, že číslo bude zobrazeno, pouze pokud existuje. Na rozdíl od nuly by výsledek zadání čísla 12 byl opět pouze 12.
Možností je více a jsou velice dobře popsány v nápovědě pod Kódy pro formát
čísla. Formáty si rovněž můžete odzkoušet v dialogu Formát
buněk.
Následující kód nastaví formát v buňce tak, že bude znázorněno vždy pětimístné číslo, před kterým bude doplněno 1 – . Pro zadání čísla 12 se tak zobrazí 1 – 00012.
Dim jazyk as new com.sun.star.lang.Locale format_cisla = "1 - 00000" existuje_format = doc.NumberFormats.queryKey(format_cisla, jazyk, false) if existuje_format = - 1 then ' neexistuje existuje_format = doc.getNumberFormats().addNew( format_cisla, jazyk) endif bunka.NumberFormat = existuje_format
Podmíněné formátování
Další užitečnou funkcí sešitu je nastavení podmíněného formátování. Podmíněné formátování mění formát buňky na
základě jejich obsahu. Automatické grafické vyhodnocení obsahu buněk lze samozřejmě nastavit
i makrem.
V Apache OpenOffice a ve starších verzích LibreOffice je možné zadat pouze tři
podmínky formátování. V nejnovějších verzích LibreOffice není počet podmínek omezen.
Dialog nastavení podmíněného formátování
Pro názornost jednotlivých kroků si je porovnejte s dialogovým oknem samotného podmíněného formátování.
Dialog podmíněného formátování v Apache OpenOffice
Musíte vždy nastavit podmínku, způsob jejího vyhodnocení a přiřadit styl, který má být
použit. Pro tato nastavení použijete v kódu makra strukturu com.sun.star.beans.PropertyValue.
Dim podminka as new com.sun.star.beans.PropertyValue
Tato struktura se skládá z pouhých dvou hodnot, a to Name a Value. Setkali jste se s ní například v kódech pro tisk. Hodnotou Name vyvoláváte jednotlivé vlastnosti a Value jim určujete hodnotu.
Kód podmíněného formátování
Následujícím příkladem nastavíte formátování pro oblast A1:D6:
sub nastaveni_podmineneho_formatovani dim podminka(2) as new com.sun.star.beans.PropertyValue oblast = thisComponent.Sheets(0).getCellRangeByName("A1:D6") podminene_formatovani = oblast.ConditionalFormat podminka(0).Name = "Operator" podminka(0).Value = com.sun.star.sheet.ConditionOperator.LESS podminka(1).Name = "Formula1" podminka(1).Value = "10" podminka(2).Name = "StyleName" podminka(2).Value = "Červená" podminene_formatovani.addNew(podminka()) oblast.ConditionalFormat = podminene_formatovani end sub
Tento kód nastaví v buňkách formát definovaný stylem buněk Červená, pokud je hodnota buněk menší než deset. Vidíte, že máme podminku definovanou celkem třikrát (podmínka, způsob vyhodnocení a použití stylu).
Vlastní nastavení
Definovali jste oblast A1:D6, dále jste nastavili
proměnnou podminene_formatovani jako podmíněné
formátování v dané oblasti.
Poslední dva řádky makra přidá tuto podmínku do podmíněného formátování podminene_formatovani.addNew(podminka()) a nakonec je samotné formátování aktivováno příkazem oblast.ConditionalFormat = podminene_formatovani.
Operator
podminka(0).Name = "Operator" podminka(0).Value = com.sun.star.sheet.ConditionOperator.LESS
Operátorem nastavujete způsob vyhodnocování hodnoty. Nastavujete podmínku porovnávané hodnoty. Dostupné jsou následující hodnoty:
- com.sun.star.sheet.ConditionOperator.NONE – není specifikována žádná podmínka
- .ConditionOperator.EQUAL – rovná se, porovnávaná hodnota se musí rovnat podmínce
- .ConditionOperator.NOT_EQUAL – není rovno
- .ConditionOperator.GREATER – je větší
- .ConditionOperator.GREATER_EQUAL – je větší nebo rovno
- .ConditionOperator.LESS – je menší
- .ConditionOperator.LESS_EQUAL – je menší nebo rovno
- .ConditionOperator.BETWEEN – leží mezi
- .ConditionOperator.NOT_BETWEEN – není mezi
- .ConditionOperator.FORMULA – použití funkce vzorec je
Určení hodnoty
podminka(1).Name = "Formula1" podminka(1).Value = "10"
Za hodnotou vlastnosti Formula1 se skrývá hodnota, podle které bude posuzována hodnota buňky. Ve většině případů zadáváte pouze jednu hodnotu, ovšem v případě použití operátoru není mezi a leží mezi musíte zadat i druhou hodnotu. V makru má tato hodnota název Formula2.
Použití stylu
podminka(2).Value = "Červená" podminka(2).Name = "StyleName"
Použít můžete pouze styly definované ve Stylech buňky. Styl přiřadíte pouze jeho jménem. Nezapomeňte, že tento styl musíte mít definovaný předem.
Nastavení dalších podmínek
Stanovením pouze jedné podmínky samozřejmě nekončíte. Můžete pokračovat dále. A stanovit druhou
a další podmínku. Zde již ale můžete použít kratší zápis. Protože hodnoty .Name
jsou již vybrány a jsou pro podmíněné formátování neměnné, je zbytečné je znovu v kódu
opakovat.
podminka(0).Value = com.sun.star.sheet.ConditionalOperator.GREATER podminka(1).Value = "10" podminka(2).Value = "Zelená" podminene_formatovani.addNew(podminka())
V případě, že stanovujete více podmínek, musíte příkaz, který aktivuje v oblasti podmíněné
formátování, zařadit na konec stanovení podmínek.
oblast.ConditionalFormat = podminene_formatovani
Stejně tak nezapomeňte přidat každou nově stanovenou podmínku do proměnné
podminene_formatovani, jinak nebude v kódu makra realizována.
Použití vzorců v podmíněném formátování
Pokud potřebujete formátovat buňku na základě obsahu jiné buňky, využijete v případě standardního
zadávání volbu Vzorec je.
V makru pak tento požadavek definujete stanovením podmínky .FORMULA
podminka(0).Value = com.sun.star.sheet.ConditionalOperator.FORMULA podminka(1).Value = "A10=B10"
Podmíněné formátování bude aktivní v případě, že se hodnota buňky A10 rovná buňce B10.