Ohraničení
Několik vlastností nelze nastavit jediným příkazem, jednou z nich je i ohraničení. Ohraničení (orámování) se nastavuje prostřednictvím struktury com.sun.star.table.BorderLine, kde je nutné nastavit jeho typ, a teprve poté nastavíte (přiřadíte) vlastní ohraničení do stylu. Struktura se skládá z následujících částí:
Color – barva čáry – použijete funkci RGB
InnerLineWidth – šířka vnitřní čáry v setinách milimetru při dvojité čáře.
OuterLineWidth – šířka čáry (samostatné), nebo šířka vnější čáry (při nastavení dvojité čáry) opět v setinách mm.
LineDistance – stanoví mezeru mezi dvojitými čarami.
Je nutné vždy nastavit barvu a šířku čáry. Tedy:
dim cara as New com.sun.star.table.BorderLine cara.Color = RGB (125, 125, 125) cara.InnerLineWidth = 100 cara.OuterLineWidth = 50 cara.LineDistance = 100
Nyní máte nadefinovaný styl čáry, který má být použit. K jednoduchému ohraničení buněk samozřejmě stačí definovat pouze vnější nebo vnitřní čáru. Pokud definujete obě, můžete nastavit mezeru mezi čarami (LineDistance). Získáte tak dvojité ohraničení.
Ohraničení jedné buňky
Pro ohraničení jedné buňky musíte styl čáry přiřadit k okraji buňky, kde má být použita:
bunky = thisComponent.sheets(0).getCellRangeByName("A1") bunky.RightBorder = cara 'pravý okraj 'LeftBorder - levý, BottomBorder - dolní, TopBorder - horní ' pro šikmé přeškrtnutí – DiagonalBLTR (zleva doprava a zdola nahoru) a Diagonal TLBR (zleva doprava a zhora dolů)
Nastavení ohraničení jedné buňky
Ohraničení v oblasti buněk
Při ohraničení souvislých oblastí buněk je ovládání makrem jiné a poskytuje více možností ohraničení. Ovládáte zde navíc i ohraničení „vnitřních“ buněk.
TIP: Je možné použít i zápis pro ohraničení jedné buňky, pak se ale vzdáváte možnosti nastavit rozdílně vnitřní a vnější čáry. Všechny čáry pak budou mít jeden styl.
Nejprve určíte oblast buněk a do proměnné přiřadíte její ohraničení.
ohraniceni = oblast.TableBorder
Teď nastavujete jednotlivé čáry oblasti. Pro jednodušší zápis můžete opět použít funkci with.
With ohraniceni .TopLine = cara 'přiřazení druhu ohraničení k horní čáře .BottomLine = cara ' spodní čára .RightLine = cara ' pravá .LeftLine = cara ' a levá čára .VerticalLine = cara ' vodorovné čáry ohraničení – pouze vnitřní .HorizontalLine = cara ' kolmé čáry ohraničení – pouze vnitřní end with
Pro použití rozdílných čar vnitřního a vnějšího ohraničení si nadefinujte další proměnnou (např. cara_2) s nastavením jejích hodnot. Pak už jen přiřadíte k jednotlivým čarám.
.HorizontalLine = cara_2
Možnosti ohraničení zde ale nekončí. Je možné makrem nastavit i podmínku, zda má být čára použita. Na to slouží následující příkazy:
with ohraniceni .IsTopLineValid = True 'povolení použití horní čáry '.IsBottomLineValid = True ' spodní okraj '.IsRightLineValid = True ' pravý okraj '.IsLeftLineValid = True ' levý okraj '.IsHorizontalLineValid = True ' vodorovné vnitřní čáry '.IsVerticalLineValid = True ' svislé vnitřní čáry end with
Pokud chcete využít této možnosti, musíte tyto příkazy umístit v kódu makra před přiřazením čáry k ohraničení buněk (tedy například před ohraniceni.TopLine = cara). Jestliže tuto definici vynecháte, bude ohraničení nastaveno vždy.
TIP: Podmínka ohraničení nemusí být striktně zadána jako True nebo False. Je možné použít i výsledek funkce, která tuto hodnotu vrací (například funkce IIF a jiných).
Nakonec opět musíte ohraničení nastavit pro vybranou oblast buněk:
oblast.TableBorder = hranice
Vzorový kód makra nastaví dvojité ohraničení červené barvy na vnitřních vodorovných a kolmých stranách buněk a v případě, že buňky A1 a A2 jsou si rovny, bude použito i horní ohraničení oblasti. V opačném případě nebude horní ohraničení použito.
sub ohraniceni oblast = thisComponent.Sheets(0).getCellRangeByName("B2:D6") oblast1 = thisComponent.Sheets(0).getCellRangeByName("A1").value oblast2 = thisComponent.Sheets(0).getCellRangeByName("A2").value dim ohraniceni as new com.sun.star.table.BorderLine ohraniceni.color = RGB(255,55,50) ohraniceni.OuterLineWidth = 40 ohraniceni.InnerLineWidth = 10 ohraniceni.Linedistance = 20 hranice = oblast.TableBorder with hranice .IsTopLineValid = IIF(oblast1=oblast2,True,False) ' .TopLine = ohraniceni .VerticalLine = ohraniceni .HorizontalLine = ohraniceni end with oblast.Tableborder = hranice end sub
Ohraničení při různých hodnotách v
buňkách
Ohraničení při shodě hodnot v buňkách
Nastavení stínování buněk
Stínování buněk má podobnou strukturu jako ohraničení buněk, neřídí se ale jedním příkazem. Pomocí struktury com.sun.star.table.ShadowFormat si nastavíte vlastnosti a přiřadíte k proměnné buňky (oblasti). Nastavujete umístění stínu, barvu a velikost.
Nastavení provedete tak, že si zadefinujete proměnnou, ve které provádíte vlastní nastavení stínování, a poté je přiřadíte k buňce:
dim stin as new com.sun.star.table.ShadowFormat stin.ShadowWidth = 100 'nastavení velikosti stínu v setinách mm stin.Color = RGB(100, 100, 100) ' nastavení barvy stínu stin.Location = com.sun.star.table.ShadowLocation.BOTTOM_RIGHT ' vpravo dole
Další možnosti nastavení stínování:
.ShadowLocation.BOTTOM_LEFT ' vlevo dole .ShadowLocation.TOP_LEFT ' vlevo nahoře .ShadowLocation.TOP_RIGHT ' vpravo nahoře .ShadowLocation.NONE ' žádný stín stin.isTransparent = True bunka.ShadowFormat = stin
Slučování buněk
Samozřejmě lze makrem slučovat i rozdělovat buňky. Na rozdíl od Writeru lze ale rozdělit pouze sloučené buňky. Samotné sloučení provedete příkazem merge(true), pro rozdělení zadáte samozřejmě false.
oblast = thisComponent.sheets(0).getCellRangeByName("A1:B5") oblast.merge(true)
Zde je nutné ohlídat si obsah buněk. Při sloučení buněk ruční volbou v Calcu jste dotázáni, zda chcete přesunout obsah skrytých buněk do první. Při psaní makra ale musíte tuto volbu samostatně zadat v kódu. Sloučení také způsobí pouze skrytí slučovaných buněk, takže pokud nepřesunete jejich obsah, bude po rozdělení opět viditelný. V makru obsah ale můžete stále používat. Stačí zadat adresu sloučené (skryté) buňky.
Také si uvědomte, že při sloučení se mění adresování buněk. Sloučené buňky jsou považovány za jednu s adresou původní buňky, která byla položena v levém horním rohu. Například při sloučení oblasti B5:C10 se adresa buněk změní na B5.
Při slučování buněk se také hodí způsob, jakým zjistíte, zda jsou buňky sloučené. K tomu slouží funkce ismerged, která vrací hodnotu boolean (tedy True nebo False). Například takto:
oblast = thisComponent.sheets(0).getCellRangeByName("A1:B5") if oblast.isMerged then 'místo pro další příkazy...
I zde však platí určitá omezení. Funkce vrátí True pouze v případě, že buňky správně adresujete. Vždy musí adresa obsahovat první použitou buňku (zde A1), a to i v případě zadání rozsahu (A1:B5). V opačném případě (např. B5) vrátí funkce hodnotu False.
V dalších dílech si ukážeme, jak formátovat přímo obsah buňky např. formát použitého písma, ale také jaký formát čísel můžete pomocí makra nastavit.