Makrá v OpenOffice.org 03/2008

Július Pastierik  /  15. 05. 2008, 00:00

Potrebujete vytvárať, otvárať a modifikovať súbory pomocou makra? V dnešnom dieli si ukážeme funkcie pre takúto prácu.

Niekedy potrebujeme v makrách otvárať iné súbory – napríklad za účelom ich spojenia do jedného a podobne. Inokedy potrebujeme zistiť, či nejaký súbor vôbec existuje a ak nie, tak ho potrebujeme zároveň vytvoriť.

Tieto možnosti si ukážeme na príklade textového dokumentu, do ktorého budeme pridávať prvý odstavec aktuálneho dokumentu. A aby sme nezostali iba pri tomto príklade, ukážeme si aj makro, pomocou ktorého pridáme do dokumentu tabuľku. Pravdaže, týmto nie sú zďaleka vyčerpané možnosti, ide iba o príklady, ako môžeme pracovať s dokumentom bez toho, aby sme ho manuálne otvárali, ukladali a zatvárali.

Ako obvykle, v makrách sa nachádzajú komentáre a preto ich bližšie nebudeme popisovať.

REM Funkcia otvorí existujúci súbor alebo vytvorí nový súbor
REM Funkcia vráti hodnotu true, ak súbor otvorila (vytvorila)
function otvor_subor (oSubor, nazov as string, novy) as boolean
 dim url as string
 
 url=nazov
 novy=not FileExists(url) ' Zistíme, či súbor existuje
 if novy then
  ' Ak neexistuje, pripravíme si url pre nový súbor
  url="private:factory/swriter"
 endif
 ' Otvorenie existujúceho alebo vytvorenie nového súboru
 oSubor=StarDesktop.loadComponentFromURL(url, "_blank", 0, Array())
 otvor_subor=not isNull(oSubor)
end function

REM Procedúra pre uloženie súboru
REM Podľa parametra "novy" sa uloží buď poď existujúcim alebo novým názvom.
sub uloz_subor (oSubor, nazov as string, novy as boolean)
 if novy then
  ' Ak máme nový súbor, uložíme hod definovaným názvom
  oSubor.storeAsUrl(nazov, Array())
 else
  ' Ak máme otvorený existujúci súbor, uložíme ho priamo
  oSubor.store()
 endif
end sub

REM Procedúra pre zatvorenie súboru
sub zatvor_subor (oSubor)
 oSubor.dispose()
end sub

Makro pre pridanie prvého odstavca aktuálneho dokumentu do súboru „ skuska.odt“:

sub pracuj_so_suborom_1
 dim dokument, kurzor, cesty as object
 dim aktual_dokument, aktual_kurzor as object
 dim nazov as string
 dim novy, otvoreny, koniec as boolean
 
 ' Budeme otvárať (vytvárať) súbor "skuska.odt" v štandardnom pracovnom adresári ("Moje dokumenty" a pod.)
 cesty=CreateUnoService("com.sun.star.util.PathSettings")
 nazov=cesty.Work+"/skuska.odt"
 
 ' Nastavíme sa do aktuálneho dokumentu
 aktual_dokument=StarDesktop.CurrentComponent
 aktual_kurzor=aktual_dokument.text.createTextCursor
 
 otvoreny=otvor_subor (dokument, nazov, novy)
 if otvoreny then
  ' Ak sme otvorili/vytvorili súbor, tak
  ' Súbor sa správa ako "ThisComponent", preto môžeme pracovať s viditeľným kurzorom
  kurzor=dokument.currentcontroller.getViewCursor()
  kurzor.gotoEnd(false) ' Skočíme na koniec súboru
  ' Pridáme odstavec z aktuálneho dokumentu
  ' Skočíme na začiatok odstavca
  aktual_kurzor.gotoStartOfParagraph(false)
  ' Označíme odstavec
  aktual_kurzor.gotoEndOfParagraph(true)
  ' a vložíme ho do nového dokumentu
  kurzor.setstring(aktual_kurzor.String)
  kurzor.gotoEnd(false) ' Skočíme na koniec vloženého textu
  uloz_subor(dokument, nazov, novy) ' Uložíme zmenený/vytvorený súbor
  zatvor_subor(dokument) ' Zatvoríme zmenený/vytvorený súbor
 endif
end sub

Skopírovaný text z iného dokumentu

Makro pre pridanie tabuľky na koniec súboru „skuska.odt“. V tomto makre pre zmenu na konci súbor „skuska.odt“ nezatvoríme, ale zostaneme v ňom pre ďalšiu prácu.

sub pracuj_so_suborom_2
 dim dokument, kurzor, tabulka, cesty as object
 dim nazov as string
 dim novy, otvoreny as boolean
 
 ' Budeme otvárať (vytvárať) súbor "skuska.odt" v štandardnom pracovnom adresári ("Moje dokumenty" a pod.)
 cesty=CreateUnoService("com.sun.star.util.PathSettings")
 nazov=cesty.Work+"/skuska.odt"
 
 otvoreny=otvor_subor (dokument, nazov, novy)
 if otvoreny then
  ' Ak sme otvorili/vytvorili súbor, tak
  ' Súbor sa správa aj ako "StarDesktop.CurrentComponent", preto môžeme využiť aj tieto metódy
  kurzor=dokument.currentcontroller.getViewCursor()
  kurzor.gotoEnd(false) ' Skočíme na koniec súboru
  ' A vložíme tam napríklad tabuľku – 4 riadky a 3 stĺpce
  tabulka=dokument.createInstance("com.sun.star.text.TextTable")
  tabulka.initialize(4,3)
  dokument.Text.insertTextContent(kurzor, tabulka, false)
  kurzor.gotoEnd(false) ' Skočíme na koniec vloženého textu
  ' Teraz môžeme vložiť údaje do tabuľky ... a nakoniec uložiť a zatvoriť súbor
  ' Alebo ho jednoducho nezatvoríme a budeme pokračovať v jeho úprave manuálne – príkazy stačí dať do komentára
  
  'uloz_subor(dokument, nazov, novy) ' Uložíme zmenený/vytvorený súbor
  'zatvor_subor(dokument) ' Zatvoríme zmenený/vytvorený súbor
 endif
end sub

Vložená tabuľka

Neprehliadnite: