Metody k hledání v oblasti buněk
Níže uvedené metody vrací oblast buněk, která vyhovuje zadaným podmínkám. S těmito oblastmi (buňkami) můžeme nadále pracovat stejně jako při jejich standardním zadáním pomocí adresy nebo pozice. Pro využití těchto metod musíte v makru zadat adresu buněk, ve kterých po té bude toto vyhledávání probíhat.
Pro odzkoušení si připravte sešit s následující strukturou buněk:
ZOBRAZENÉ HODNOTY | POUŽIT VZOREC =FORMULA(bunka) | ||||||||
A | B | C | D | E | F | G | H | I | |
1 | 1 | 2 | 3 | 4 | 1 | =A1+1 | =B1+1 | =C1+1 | |
2 | 11 | 12 | 13 | 14 | =A1+10 | =A2+1 | =B2+1 | =C2+1 | |
3 | |||||||||
4 | 11 | 21 | 31 | 41 | =A1&1 | =B1&1 | =C1&1 | =D1&1 | |
5 | 111 | 121 | 131 | 141 | =A2&1 | =B2&1 | =C2&1 | =D2&1 | |
6 | |||||||||
7 | A | #VALUE! | #VALUE! | #VALUE! | A | =A7+1 | =B7+1 | =C7+1 | |
8 | s | s | s | t | s | s | s | s | |
9 | s | s | t | t | s | s | t | t | |
10 | s | t | t | t | s | t | t | =D9 |
Tabulka 1: Struktura buněk pro zkoušku maker
V levé části tabulky jsou hodnoty a v pravé části pomocí funkce sešitu FORMULA() vidíte použité vzorce a zopakovanou hodnotu nebo text tam, kde nejsou použity vzorce. Poté si definujte základní proměnné, které budete používat pro zkoušení:
doc = thisComponent list = doc.currentController.getActivesheet oblast = list.getCellRangeByName("A1:D10") bunka = doc.currentSelection()
Proměnná bunka je určena tak, aby stačilo přemístit výběr buňky myší nebo šipkami bez nutnosti zadávání adresy buňky.
Po vyhledání buněk nebo oblastí jsou tyto vráceny jako adresované buňky/oblasti. Můžete s nimi tedy nadále pracovat – například formátovat – stejně jako se standardně definovanou buňkou. Pro názorné předvedení je v příkladech použito obarvení pozadí buněk.
Vyhledání předchůdce
Pro vyhledání buněk, které jsou odkázány do zadané oblasti (buňky) použijte metodu:
queryPrecedents(True)
Předchůdci jsou všechny buňky, které ovlivňují zadanou proměnnou (oblast nebo buňku) a jsou umístěny ve stejném listu.
predchudce = bunka.queryPrecedents(True) predchudce.CellBackColor = RGB(0,0,50)
Pro větší přehlednost je v použitém příkladu použito vyhledání předchůdců jedné buňky. Tato metoda vyhledá
kromě předchůdců i buňku nebo oblast, která je použita k vyhledávání. Při použití oblasti je tedy vybrána
celá oblast + případní předchůdci. Například při výběru jedné buňky B4 se označí její předchůdce – tedy buňka
B1.
Vyhledání následníka
Pro vyhledání buněk, které obsahují odkazy ze zadané oblasti (buňky), použijte metodu:
queryDependents(True)
Následníci jsou všechny buňky, které jsou ovlivněny zadanou proměnnou (oblastí nebo buňkou) a jsou umístěny ve stejném listu.
naslednik = bunka.queryDependents(True) naslednik.CellBackColor = RGB(0,50,50)
Princip vyhledávání je stejný jako u předchůdců. Při výběru buňky C5 je vyhledán i následník buňka H5.
TIP: Podobnou funkci plní i funkce Detektiv, která je schopna najít předchůdce i následníky. Po nalezení je ale pouze označí šipkou a tyto buňky není možné přímo ovlivňovat.
Následující funkce jsou určené pro použití v oblastech.
Vyhledání viditelných buněk
Pro vyhledání buněk, které neobsahují žádná data, použijte metodu:
queryVisibleCells()
Pro odzkoušení funkčnosti si skryjte řádek 5 a sloupec C ve vzorovém příkladu.
viditelne = oblast.queryVisibleCells() viditelne.CellBackColor = RGB(50,50,50)
Tento kód označí všechny neskryté buňky. Po zobrazení skrytých buněk je výsledek tento:
Vyhledání prázdných buněk
Pro vyhledání buněk, které neobsahují žádná data, použijte metodu:
queryEmptyCells()
Po spuštění kódu zůstanou označeny buňky v řádku 3 a 5 našeho příkladu:
viditelne = oblast.queryEmptyCells() viditelne.CellBackColor = RGB(50,50,100)
Po spuštění jsou vybarveny neprázdné buňky A3:D3 a A6:D6.
Vyhledání buněk podle obsahu
Pro vyhledání buněk podle obsahu použijte metodu:
queryContentCells(CellFlags)
CellFlags již znáte z dílu Základní práce s buňkami, kde jste se jejich pomocí naučili mazat jen
určitý druh obsahu.
TIP: Pro zopakování, jsou možné tyto hodnoty VALUE – čísla, DATETIME – čas, datum nebo obojí, STRING – text,
ANNOTATION – poznámky (komentáře), FORMULA – vzorce, HARDATTR – formátování buněk, STYLES – styly, OBJECTS –
objekty.
obsahuje = oblast.queryContentCells(com.sun.star.sheet.CellFlags.STRING) obsahuje.CellBackColor = RGB(50,100,100)
Tento kód označí všechny buňky v oblasti, které obsahují text nebo hodnotu. V použitém příkladu tedy
buňky C7, A8:D9 a A10:C10.
Vyhledání buněk podle výsledku vzorce
Vzorce používané v Calcu vrací vždy hodnotu jako text, hodnotu, případně chybu. Pro jejich vyhledání
použijete metodu:
queryFormulaCells()
Možnosti kódu jsou tyto:
vysledek_hodnota = oblast.queryFormulaCells(1) ' vyhledání výsledku jako hodnota (čísla) vysledek_hodnota.CellBackColor = RGB(100,100,100) vysledek_text = oblast.queryFormulaCells(2) ' text vyhledání výsledku jako textu vysledek_text.CellBackColor = RGB(100,100,150) vysledek_chyba = oblast.queryFormulaCells(4) ' vyhledání výsledku jako chyba vysledek_chyba.CellBackColor = RGB(100,150,150)
Tento příklad označí šedou barvou buňky B1:D1 a A2:D2, kde vzorec vrací výsledek jako číslo, dále označí
modře buňky A4:D5 a D10, ve kterých vzorec vrací výsledek jako text a nakonec buňky B7:D7, ve kterých
vzorec vrací chybovou hlášku, označí zeleně.
TIP: Ve funkci queryFormulaCells() můžete pomocí funkce OR kombinovat více požadavků v jednom zadání. Pro
vyhledání čísel a textu zadáte oblast.queryFormulaCells(1 or 2).
Vyhledávání rozdílů ve sloupci
Užitečnou metodou v některých případech je i metoda:
queryColumnDifferences(bunka.CellAddress)
Tato metoda vyhledá buňky v definované oblasti, které obsahují rozdílnou hodnotu než hodnota, která je v zadané buňce, přitom vyhledávání probíhá pouze ve sloupcích. Použitá oblast obsahuje 4 sloupce, metoda zjistí hodnotu ze stejného řádku, jaký má zadaná buňka ve všech sloupcích. Celkem tedy porovnává hodnoty 4 buněk ze stejného řádku, ale ve čtyřech sloupcích.
podle_sloupce = oblast.queryColumnDifferences(bunka.CellAddress) podle_sloupce.CellBackColor = RGB(150,150,150)
Při vybrané buňce B9 zjistí hodnoty buněk z devátého řádku, tedy – s v sloupci A. Pokud sloupec
A obsahuje buňky s rozdílnou hodnotou, jsou tyto buňky vráceny jako výsledek metody.
Vyhledávání rozdílů v řádku
Obdobným způsobem s naprosto rozdílným výsledkem lze vyhledávat i rozdíly po řádcích.
queryRowDifferences(bunka.CellAddress)
Princip vyhledávání je stejný, jen je aplikován na řádky. V použitém příkladu bude tedy probíhat vyhledávání hodnot 10 buněk ze stejného sloupce v deseti řádcích.
podle_radku = oblast.queryRowDifferences(bunka.CellAddress) podle_radku.CellBackColor = RGB(150,150,200)
Při vybrané buňce B9 je výsledek naprosto rozdílný.
Vyhledání průniku dvou oblastí
Poslední metodou v tomto díle je:
queryIntersection(oblast2.RangeAddress)
Tato metoda vyhledá společné buňky dvou definovaných oblastí. Pro tento příklad je nutné definovat si druhou oblast.
oblast2 = list.getCellRangeByName("D4:H20")
Společné buňky proměnné oblast a oblast2 jsou D4:D10. K jejich zjištění použijete metodu takto:
prunik_oblasti = oblast.queryIntersection(oblast2.RangeAddress) prunik_oblasti.CellBackColor = RGB(150,200,200)
Očekávaný výsledek je označen světle modrou barvou.
Příští díl se bude věnovat dalším možnostem, jak se můžete pohybovat v buňkách sešitu.