Makrá v OpenOffice.org 11/2008

Július Pastierik  /  25. 09. 2008, 00:00

Potrebujete vložiť aktuálny dátum a čas do zošitu tabuľkového procesora Calc alebo do textového dokumentu tak, aby sa viac nemenili? Naprogramujte si jednoduché makro, ktoré to dokáže.

Vo vytváraných dokumentoch potrebujeme mať častokrát vložené dátumové a časové údaje. V textovom dokumente modulu Writer túto možnosť nájdeme ukrytú v menu „Vložiť – Pole – Dátum“ a „Vložiť – Pole – Čas“. Tieto polia majú však nevýhodu – nedajú sa v prípade potreby editovať a navyše, V module Calc, túto možnosť nenájdeme vôbec.

Z uvedených dôvodov si naprogramujeme makro, pomocou ktorého dokážeme tieto údaje vkladať. Aby sme nemuseli programovať osobitné funkcie pre modul Writer a pre modul Calc, makro naprogramujeme tak, že budeme rozoznávať, aký druh dokumentu máme práve otvorený.

Podobne, ako v ostatných dieloch tohto seriálu, sú makrá dostatočne okomentované a preto ich nemusíme podrobnejšie vysvetľovať. Ešte dodajme, že do textového dokumentu sa vloží dátum vo formáte DD.MM.RRRR (deň.mesiac.rok) a čas vo formáte HH:MM:SS (hodiny_minúty_sekundy). V tabuľkovom procesore závisí formát od nastaveného formátu zobrazenia príslušnej bunky. Samozrejme, pre pohodlné vkladanie je vhodné, aby sme si procedúry priradili k nejakej klávesovej skratke alebo zaradili do menu či panelov nástrojov.

REM Makro pre vloženie aktuálneho dátumu na bunku (Calc) alebo pozíciu (Writer), kde sa nachádzame
sub Vloz_Datum
 dim dokument, bunka as object
 dim teraz, datum, cas as string
 dim i as integer
 
 teraz=now ' Aktuálny dátum a čas ako reťazec vo formáte "dd.mm.rrrr hh:mm:ss"
 i=instr(teraz," ") ' Pozícia, kde je oddelený dátum a čas
 
 datum=left(teraz,i-1) ' Dátum
 
 REM Časť pre CALC
 if ThisComponent.supportsService("com.sun.star.sheet.SpreadsheetDocument") then
  ' Funkcia vloží dátum do aktuálnej bunky zošitu v Calcu
  ' V Calcu je bunka, na ktorej sa nachádzame vybraná automaticky
  dokument=ThisComponent.getCurrentSelection() ' Aktuálny výber
  bunka=dokument.getCellByPosition(0,0) ' Aktuálna bunka
  bunka.value=datevalue(datum) ' Vloženie dátumu ako hodnoty
 endif
 
 REM Časť pre WRITER
 if ThisComponent.supportsService("com.sun.star.text.TextDocument") then
  ' Funkcia vloží dátum na aktuálnu pozíciu vo Writeri
  dokument=ThisComponent.currentcontroller.getViewCursor() ' Viditeľný kurzor
  dokument.collapseToEnd() ' Zrušíme prípadný výber (označený text)
  teraz=dokument.getstring() ' Odpamätáme si aktuálny reťazec kde sa nachádzame s kurzorom
  dokument.setstring(teraz+datum) ' a vložíme odpamätaný aktuálny reťazec + dátum
  dokument.collapseToEnd() ' Skočíme na koniec vloženého dátumu
 endif
 
end sub


REM Makro pre vloženie aktuálneho času na bunku (Calc) alebo pozíciu (Writer), kde sa nachádzame
sub Vloz_Cas
 dim dokument, bunka as object
 dim teraz, datum, cas as string
 dim i as integer
 
 teraz=now ' Aktuálny dátum a čas vo formáte "dd.mm.rrrr hh:mm:ss"
 i=instr(teraz," ") ' Pozícia, kde je oddelený dátum a čas
 
 cas=right(teraz,len(teraz)-i) ' Čas
 
 REM Časť pre CALC
 if ThisComponent.supportsService("com.sun.star.sheet.SpreadsheetDocument") then
  ' Funkcia vloží čas do aktuálnej bunky zošitu v Calcu
  dokument=ThisComponent.getCurrentSelection() ' Aktuálny výber
  bunka=dokument.getCellByPosition(0,0) ' Aktuálna bunka
  bunka.value=timevalue(cas) ' Vloženie času ako hodnoty
 endif
 
 REM Časť pre WRITER
 if ThisComponent.supportsService("com.sun.star.text.TextDocument") then
  ' Funkcia vloží čas na aktuálnu pozíciu vo Writeri
  dokument=ThisComponent.currentcontroller.getViewCursor() ' Viditeľný kurzor
  dokument.collapseToEnd() ' Zrušíme prípadný výber
  teraz=dokument.getstring() ' Odpamätáme si aktuálny reťazec
  dokument.setstring(teraz+cas) ' a vložíme odpamätaný aktuálny reťazec + čas
  dokument.collapseToEnd() ' Skočíme na koniec vloženého času
 endif
 
end sub

 

Neprehliadnite: