Vlastní formáty čísel a podmíněné formátování makrem

calc.png V tomto díle se naučíte nastavit vlastní formát čísel a podmíněné formátování. Podmíněné formátování použijete v různých vyhodnocovacích tabulkách a ovládání makrem se hodí tehdy, když nejste autorem těchto tabulek.     

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:

  1. Čísla se formátují zprava doleva. 
  2. 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.
  3. 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í 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.

(Jako ve škole) Průměr: 1.11 | Hodnotilo: 9
 

Komentáře

user avatar Petr Valach
Odpovědět
Vlastní formáty čísel a podmíněné formátování makrem
8. 07. 2013, 23:56:25
Mám dotaz, nebude nějaká změna oproti LibreOffice? To má už jinak řešené podmíněné formátování... bude výše uvedené fungovat i tam?
user avatar Daniel Sedláček
Odpovědět
Re:Vlastní formáty čísel a podmíněné formátování makrem
14. 07. 2013, 12:25:24
Předpokládám, že popsaný postup funguje i v LibreOffice. Ten ale nemám nainstalovaný a nemohu odzkoušet.


V článku je popsán vyloženě základní možnost nastavení podmíněného formátování. LO ale poskytuje více možností.

Nastavovat makrem podmíněně formátování na smysl pouze v tom případě, že dokument bude obsluhovat "třetí" osoba.


Mohu-li prosit vyzkoušejte v LO a dejte sem vědět jak jste dopadl.


;o)
user avatar Patera
Odpovědět
Smazání podmíněného formátování makrem
31. 08. 2013, 09:33:46
Asi by bylo dobré i uvést, jak se zbavit podmíněného formátování:
podminene_formatovani.clear()

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