Práce s listy

programovani.png V tomto díle seriálu o makrech se podíváme na práci s listy; ty jsou součástí sešitu. Můžete je makrem přidávat, odebírat, přesouvat, přejmenovávat, nastavovat jim pozadí, skrývat a znovu zobrazovat a lze ještě mnoho dalších věcí. Ukážeme si ještě, jak listy procházet jeden po druhém a jak zjistit jejich počet. Nejprve ale jakým způsobem se k listům dostanete.  

Přístup k listům

Listy jsou v definici proměnných objekty. Pro přístup k listu musíte nejprve mít zpřístupněný dokument.

doc = thisComponent
oListy = doc.Sheets()

Po zpřístupnění dokumentu přiřadíte všechny listy do proměnné oListy. Pokud chcete pracovat pouze s jedním listem, musíte určit programu, s kterým, a to buď určením jeho jména, nebo jeho pořadí (indexu):

oList = doc.sheets.getByName("List1")

nebo

oList = doc.sheets(0) / oList = doc.sheets.getByIndex(0)

Přístup podle jména je bezpečnější, protože se nemůže stát, že zapomenete započítat skryté listy. Ale všude tam, kde budete provádět operace se všemi listy, použijete index (číslo lze nahradit proměnnou, která se pravidelně zvyšuje/snižuje).

Pokud dopředu víte, že nebudete pracovat s dokumentem jako celkem, ale pouze s listem, můžete zápis zkrátit takto:

oList = thisComponent.sheets.getByName("List1")

nebo

oList = thisComponent.sheets(0)

Jak vidíte, vypustili jste proměnnou dokumentu. Je ale lepší si dokument deklarovat zvlášť, nikdy nevíte, jak se bude náš kód vyvíjet a zda nakonec nebudete pracovat právě s dokumentem.

TIP: Toto byla jedna z věcí, která mě zpočátku trápila. Ke konci psaní makra jsem zjistil, že potřebuji pracovat i s dokumentem, a přepisoval jsem kód. Pokud spěcháte, stačí si dokument deklarovat do nové proměnné třeba na konci makra, ale zbytečně tak zanášíte kód, protože jde v podstatě o duplicitní deklaraci.

Ve všech dalších příkladech budete používat kratší definici doc.sheets(0) .

Procházení listů

Pokud budete pracovat se všemi listy dokumentu, máte několik možností, jak listy projít a průběžně s nimi pracovat.

První takovou možností je listy spočítat a pomocí cyklu je projít. Na spočítání máte v Basicu funkci count, pomocí které jste schopni zjistit poslední volnou pozici v definovaných proměnných.

oListy = doc.sheets.Count – 1

Protože chcete zjistit pořadí posledního listu, musíte na konci příkazu odečíst 1.

Následujícím příkladem zjistíte pořadí všech listů v sešitu

sub prochazej_listy
dim list as object
oListy = thisComponent.Sheets
for i = 0 to oListy.getCount – 1
list = oListy(i)
print i 
next i
end sub

Pokud zadáte v příkazu print místo i hodnotu list.name, vrátí makro názvy všech listů v sešitu.

Přidání

Pro přidání listu použijete následující příkaz, kde musíte specifikovat jméno a umístění listu:

doc = thisComponent
listy = doc.sheets
listy.insertNewByName("Nový list",0)

Příkaz insertNewByName vloží list, první údaj v závorce je vámi určené jméno listu a druhý údaj je pořadí, na jaké chcete list vložit. Pořadí nemusíte zadávat číselně, pokud budete přidávat vždy na konec sešitu, místo nuly zadáte listy.count.

Vložení nového listu na první pozici Vložení nového listu na první pozici

Přesunutí

Obdobně jako vkládání funguje i přesouvání listů, jen místo insertNewByName použijete MoveByName:

presun_list = listy.MoveByName("Nový list",1)

Údaje jsou opět v závorce: název listu, který chcete přesunout, a pořadí, kam ho přesouváte.

Přesunutí listu na druhou pozici Přesunutí listu na druhou pozici

Kopírování

Nyní je kopírování již hračka:

listy.CopyByName("Nový list","Zkopírovaný list",0)

Údaje v závorce – název zdrojového listu, název zkopírovaného listu a pořadí umístění.

Zkopírování Zkopírování "Nového listu" a vložení na první pozici

Odstranění

listy.RemoveByName("Nový list")

Odstranění Odstranění "Nového listu"

Přejmenování

Pro přejmenování nejdříve musíte vybrat list a pak mu určit jméno.

listy.getByName("Zkopírovaný list").name("Přejmenovaný list")

Přejmenování listu Přejmenování listu

Zkuste si zapsat následující makro, které spustíte v sešitu, příkaz Wait 500 zadrží vykonání příkazů na 500 milisekund a uvidíte, jak se listy mění.

sub prace_s_listy
listy=thiscomponent.sheets
listy.insertNewByName("Nový list",0)'
wait 500
listy.MoveByName("Nový list",1)
wait 500
listy.copyByName("Nový list","Zkopírovaný list", 0)
wait 500
listy.RemoveByName("Nový list")
wait 500
listy.getByName("Zkopírovaný list").setName("Přejmenovaný list")
end sub

Skrývání a zobrazování

Pokud chcete pomocí makra skrýt, nebo zobrazit určitý list, slouží k tomu vlastnost IsVisible :

doc = thisComponent
list = doc.sheets(0)
list.IsVisible = True

a pro zobrazení

list.IsVisible=False

navíc můžete ještě zjistit, zda je list skrytý

if list.IsVisible then

tento zápis vrátí True, pokud je list viditelný.

Ochrana listu

Stejně jako můžete uzamknout dokument proti změnám, můžete uzamknout i jednotlivé listy:

doc = thisComponent
list = doc.sheets(0)
list.Protected("Heslo") nebo list.Protected("")
list.Unprotect("Heslo") nebo list.Unprotect("")

a zjištění, zda je list chráněn

if list.IsProtected = True then

Zamčení listu souvisí s uzamykáním buněk. Popis na uzamčení buněk najdete v některém z dalších dílů o buňkách.

Základní práce s listy je zde popsána. V příštím díle se budeme věnovat řádkům, sloupcům a práci s nimi.

(Jako ve škole) Průměr: 1,09 | Hodnotilo: 11
 

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