V následujících příkladech budu tedy vždy uvádět dva zápisy kódu, první s columns (sloupce) a druhý s rows (řádky).
Přístup
Nejprve si ukážeme cestu, pomocí které si k sloupcům a řádkům získáte přístup.
doc = thisComponent list = doc.sheets(0) sloupce = list.columns sloupec1 = sloupce.getByIndex(0) radky = list.rows radek1 = radky.getByIndex(0)
Takto jste si všechny sloupce a řádky přiřadili do proměnných a můžete je pak ovládat jejich prostřednictvím. Pokud ale chcete měnit jejich vlastnosti jednorázově, stačí vynechat proměnnou:
list.columns.... list.rows.....
Zde však už zadáváte přímo, co chcete se sloupci a řádky provádět – například: Za pomoci znalosti této struktury můžete jednoduše zjistit počet sloupců a řádků v označené oblasti.
sub pocet_radku_sloupcu dim radek as long, sloupec as long doc=thisComponent vyber=doc.CurrentSelection radek=vyber.rows.getCount sloupec=vyber.columns.getCount print "Vybráno "+sloupec+" S x "+ radek+ " Ř " end sub
Makro vrátí počet sloupců a řádků v označené oblasti. Někdy totiž neznáte dopředu oblast, se kterou bude program pracovat, zjištění její velikosti se tak může hodit.
Vložení nového sloupce nebo řádku
Na vložení nového sloupce použijete:
list.columns.insertByIndex(1,1)
a řádek:
list.rows.insertByIndex(1,1)
Údaj v závorce uvádí, kolik sloupců chcete vložit a na jakou pozici. Zde vkládáte 1 sloupec na pozici sloupce B (druhý v pořadí).
TIP: Nezapomeňte, že číslování v Basicu začíná vždy 0! Toto pravidlo platí jak pro listy, řádky, sloupce a buňky, ale i pro veškeré operace, pokud je neomezíte sami.
Odstranění
Postup je stejný jako při vkládání:
list.columns.removeByIndex(1,1) list.rows.removeByIndex(1,1)
Čísla v závorce opět řídí počet řádků/sloupců a pozici, ze které budete odebírat.
Vlastnosti
Samozřejmě můžete ovlivňovat i vlastnosti, které řádky a sloupce poskytují, jako je šířka/výška, zda jsou skryté či viditelné, zda se bude šířka/výška automaticky měnit podle obsahu buňky, a nakonec můžete vložit zalomení stránky k určitému sloupci/řádku – toto se velmi hodí při následném tisku.
Ještě než se ale dostanete k prostředkům, jak přímo tyto vlastnosti ovlivnit, musíme si ukázat způsob, jak sloupce a řádky adresovat (říci programu, s jakými konkrétními sloupci a řádky má operaci provést). Přístup k nim si zjednáte pomocí indexu (jejich pořadí):
list.columns(0) list.rows(0)
Číslování jako vždy začíná 0 (nulou). Zde jste tedy identifikovali první sloupec (A) a první řádek (1).
Šířka a výška
Nastavovat můžete obě hodnoty.
Sloupce:
list.columns(0).Weight = 2000 ' výška
Řádky:
list.rows(0).Height = 2000 ' šířka
Číslo uvádí výšku/šířku v setinách milimetru. Nastavili jste tedy výšku a šířku na 2 cm.
Automatická šířka a výška
Pokud chcete určit řádkům/sloupcům, aby řídili svou velikost podle velikosti obsahu, použijete:
list.columns(0).OptimalWeight = True list.rows(0).OptimalHeight = True
Skrýt a zobrazit
Stejně jako u listů:
list.columns(0).IsVisible = False ' skryje sloupec list.rows(0).IsVisible = False ' skryje řádek
Pro zobrazení použijete hodnotu True.
Začátek nové strany
Samozřejmě v Calcu se občas bude hodit, když budete umět nastavit zalomení řádku/sloupce pro tisk.
list.columns(0).IsStartOfNewPage = True list.rows(0).IsStartOfNewPage = True ' vloží zalomení
A opět použijete False pro zrušení zalomení.
Hledání v sešitech
Pro vyhledávání v sešitech můžete využít dva způsoby hledání. Jeden projde buňku po buňce a hledá přesnou shodu, druhý funguje obdobně jako klasické vyhledávání v dokumentu.
Druhý způsob je zde:
sub vyhledej list=thisComponent.sheets(0) hledej=list.CreateReplaceDescriptor hledej.SearchRegularExpression = True hledej.SearchString = "ahoj\>" hledej.ReplaceString = "nazdar" list.ReplaceAll(hledej) end sub
Vidíte, že můžete hledat a nahrazovat velmi rychle. Hledání a nahrazování totiž probíhá „nad úrovní“ dokumentu. Makro najde (a nahradí) pouze hodnotu v buňce, ne buňku jako takovou. Tento způsob vyhledávání nelze použít na formát buněk! Pro tyto případy musíte mít zjištěnu lokalizaci buňky způsobem, jaký se dovíte v dílech věnovaným buňkám.
K jednotlivým řádkům makra: rozmer = list.CreateReplaceDescriptor – v listu, který jste definovali jako první list (sheets(0)), jste vytvořili „pomocný“ descriptor, ve kterém budou vyhledány hodnoty rozmer.SearchString = hodnota, budou v něm také nahrazeny rozmer.ReplaceString = hodnota. Nakonec přiřadíte pomocný descriptor zpět do dokumentu (listu) list.ReplaceAll(rozmer).
Řádek rozmer.SearchRegularExpression = True znamená, že hledáme pomocí regulárních výrazů. Regulární výraz je zástupné vyjádření pro znak/znaky. Využijete je tam, kde nechcete hledat přesnou shodu. Přehled regulárních výrazů je velmi pěkně popsán i v nápovědě OpenOffice.org, ale podrobně si o nich povíme v některém z dalších dílů seriálu.
Nadefinujte si v buňkách slovo ahoj tímto způsobem – ahoj, bahoj, b ahoj, ahojb, ahoj b. Tím, že hledáte za pomoci regulárního výrazu (\>), jste zajistili vyhledání textu ahoj pouze na konci slova. Výměna tedy proběhne pouze tam, kde slovo končí na ahoj. V tomto případě nebude nahrazeno slovo „ahojb“ (ahoj není na konci slova). Pokud chcete vyhledat ve všech listech, musíte pomocí cyklu listy projít a v každém z nich pak proběhne vyhledání a náhrada zvlášť.
Podobný způsob funguje i ve Writeru. Pouze musíte provést změnu v přiřazení descriptoru. Writer samozřejmě neobsahuje listy, proto musíte proměnnou hledej přiřadit k dokumentu:
doc = thisComponent hledej = doc.CreateReplaceDescriptor
Výměna proběhne v celém dokumentu.
V dalším díle se již vrhneme na buňky, jejich definici a práci s nimi.