Július Pastierik / 13. 04. 2011, 00:00
V druhom pokračovaní si ukážeme funkcie, pomocou ktorých dokážete vkladať dátum a čas podľa pevne určených formátov.
Pretože dátumy potrebujeme do dokumentov vkladať v rôznych formátoch, pripravíme si niekoľko funkcií, kde si ich formát nastavíme pevne.
REM Makro pre vloženie reťazca na aktuálnu pozíciu kurzora v textovom dokumente
sub vloz_do_dokumentu (retazec as string)
dim dokument as object
dim teraz as string
dim tabulka as boolean
dokument=ThisComponent.currentcontroller.getViewCursor() ' Aktuálna pozícia kurzora
tabulka= not IsEmpty(dokument.Cell) ' Identifikácia, či je kurzor v textovej tabuľke
if tabulka Then ' Sme v tabuľke
dokument=dokument.cell
else
dokument.collapseToEnd() ' Presun na koniec a zrušenie označenia, ak je označený text
endif
teraz=dokument.getstring() ' Text na konci kurzora
dokument.setstring(teraz+retazec) ' K textu pridáme dátum
if not tabulka then
dokument.collapseToEnd() ' Presun na koniec vloženého dátumu
endif
end sub
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 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
if ThisComponent.supportsService("com.sun.star.sheet.SpreadsheetDocument") then ' Ak sme v tabuľkovom procesore
' Funkcia vloží dátum 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=datevalue(datum) ' Vloženie dátumu ako hodnoty
endif
if ThisComponent.supportsService("com.sun.star.text.TextDocument") then ' Ak sme v textovom dokumente
' Funkcia vloží dátum na aktuálnu pozíciu vo Writeri
vloz_do_dokumentu(datum)
endif
end sub
REM Makro pre vloženie aktuálneho dátumu ako text s medzerami na bunku (Calc) alebo pozíciu (Writer), kde sa nachádzame
sub Vloz_Datum_text
dim dokument, bunka as object
dim teraz, datum, cas as string
dim dd, mm, rr 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
datum=left(teraz,i-1) ' Dátum
' Dátum je v tvare dd.mm.rrrr, z toho vytvoríme dd. mm. rrrr – medzi čísla vložíme nezalomiteľné medzery
dd=left(datum,3)
mm=mid(datum,4,3)
rr=right(datum,len(datum)-6)
datum=dd+chr$(&HA0)+mm+chr$(&HA0)+rr
if ThisComponent.supportsService("com.sun.star.sheet.SpreadsheetDocument") then ' Ak sme v tabuľkovom procesore
' Funkcia vloží dátum do aktuálnej bunky zošitu v Calcu
dokument=ThisComponent.getCurrentSelection() ' Aktuálny výber
bunka=dokument.getCellByPosition(0,0) ' Aktuálna bunka
bunka.string=datum ' Vloženie dátumu ako reťazca
endif
if ThisComponent.supportsService("com.sun.star.text.TextDocument") then ' Ak sme v textovom dokumente
' Funkcia vloží dátum na aktuálnu pozíciu vo Writeri
vloz_do_dokumentu(datum)
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
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
if ThisComponent.supportsService("com.sun.star.text.TextDocument") then
' Funkcia vloží čas na aktuálnu pozíciu vo Writeri
vloz_do_dokumentu(cas)
endif
end sub
REM Načítanie názvu mesiaca zo súboru
function Mesiac_zo_suboru(m_datum as integer, zaklad_tvar as boolean, jazyk as string) as string
dim mesiac(12), mesiaca(12) as string
dim mm as string
dim riadok, definicia as string
dim rovna, cc as integer ' číslo mesiaca
dim sf, inStream, inFile ' Pre čítanie z lokalizačného súboru
REM Pokiaľ nebude definovaný jazykový súbor, budú sa vkladať slovenské mesiace
mesiac(1)="január"
mesiac(2)="február"
mesiac(3)="marec"
mesiac(4)="apríl"
mesiac(5)="máj"
mesiac(6)="jún"
mesiac(7)="júl"
mesiac(8)="august"
mesiac(9)="september"
mesiac(10)="október"
mesiac(11)="november"
mesiac(12)="december"
mesiaca(1)="januára"
mesiaca(2)="februára"
mesiaca(3)="marca"
mesiaca(4)="apríla"
mesiaca(5)="mája"
mesiaca(6)="júna"
mesiaca(7)="júla"
mesiaca(8)="augusta"
mesiaca(9)="septembra"
mesiaca(10)="októbra"
mesiaca(11)="novembra"
mesiaca(12)="decembra"
if jazyk<>"sk" then
REM Načítanie názvov mesiacov z lokalizačných súborov
on error resume next
kde=basiclibraries.getLibraryLinkURL("JP_date_time") ' Adresár, kde je rozšírenie nainštalované
sNazov=left(kde,len(kde)-10)+"JP_date_"+jazyk+".txt" ' Súbor s jazykovou lokalizáciou
if fileexists(sNazov) then ' Ak lokalizačný súbor existuje, tak načítame definície do premenných
sf = createUnoService("com.sun.star.ucb.SimpleFileAccess")
inStream = sf.openFileRead(sNazov)
inFile = createUnoService("com.sun.star.io.TextInputStream")
inFile.InputStream = inStream
inFile.Encoding = "UTF-8" ' lokalizačný súbor musí byť v UTF-8, inak nebude dobrá diakritika
Do While not inFile.IsEOF
riadok = trim(inFile.readLine) ' namiesto Line Input #subor, riadok
rovna=instr(riadok,"=")
if rovna<>0 then
mm=left(riadok,1)
cc=val(mid(riadok,2,2))
definicia=trim(right(riadok,len(riadok)-rovna))
if mm="m" and cc>=1 and cc<=12 then ' mm = m – mesiac, a – mesiaca
mesiac(cc)=definicia
end if
if mm="a" and cc>=1 and cc<=12 then ' mm = m – mesiac, a – mesiaca
mesiaca(cc)=definicia
end if
end if
loop
' Zatvorenie definičného súboru – namiesto close #subor
inStream.closeInput
inFile.closeInput
end if
end if
if zaklad_tvar then
Mesiac_zo_suboru=mesiac(m_datum)
else
Mesiac_zo_suboru=mesiaca(m_datum)
endif
end function
REM Funkcia pre konverziu mesiaca dátumu na jeho názov
function Datum2Text(datum as string, zaklad_tvar as boolean, jazyk as string) as string
' Význam parametrov:
' datum – dátum ako reťazec dd.mm.rrrr
' zaklad_tvar – ak true, názov mesiaca nebude skloňovaný (január), inak bude skloňovaný (januára)
' jazyk – označenie jazyka (sk, cs, en, …)
dim dd, rr as string
dim mmc as integer
' Dátum je v tvare dd.mm.rrrr a z toho dostaneme dd. mesiac rrrr alebo dd. mesiaca rrrr (v dátume sú za dňom nezalomiteľné medzery)
dd=left(datum,3)
if left(dd,1)="0" then
dd=right(dd,2)
endif
mmc=val(mid(datum,4,2))
rr=right(datum,len(datum)-6)
Datum2Text=dd+chr$(&HA0)+Mesiac_zo_suboru(mmc, zaklad_tvar, jazyk)+" "+rr
end function
REM Makro pre vloženie aktuálneho dátumu v tvare dd. mesiac rrrr ako reťazec na bunku (Calc) alebo pozíciu (Writer), kde sa nachádzame
sub Vloz_Datum_text_zaklad
dim dokument, bunka as object
dim teraz, datum, cas, jazyk 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
datum=left(teraz,i-1) ' Dátum
if ThisComponent.supportsService("com.sun.star.sheet.SpreadsheetDocument") then
' Funkcia vloží dátum do aktuálnej bunky zošitu v Calcu
dokument=ThisComponent.getCurrentSelection() ' Aktuálny výber
bunka=dokument.getCellByPosition(0,0) ' Aktuálna bunka
jazyk=left(bunka.CharLocale.Language,2) ' Jazyk bunky (sk, cs, …)
bunka.string=Datum2Text(datum,true,jazyk) ' Vloženie dátumu ako reťazca
endif
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() ' Skočíme na koniec prípadne označeného textu a zrušíme označenie
jazyk=left(dokument.CharLocale.Language,2) ' Jazyk znaku, na ktorom sa nachádzame (sk, cs, …)
vloz_do_dokumentu(Datum2Text(datum,true,jazyk))
endif
end sub
REM Makro pre vloženie aktuálneho dátumu v tvare dd. mesiaca rrrr ako reťazec na bunku (Calc) alebo pozíciu (Writer), kde sa nachádzame
sub Vloz_Datum_text_tvar
dim dokument, bunka as object
dim teraz, datum, cas, jazyk 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
datum=left(teraz,i-1) ' Dátum
if ThisComponent.supportsService("com.sun.star.sheet.SpreadsheetDocument") then
' Funkcia vloží dátum do aktuálnej bunky zošitu v Calcu
dokument=ThisComponent.getCurrentSelection() ' Aktuálny výber
bunka=dokument.getCellByPosition(0,0) ' Aktuálna bunka
jazyk=left(bunka.CharLocale.Language,2) ' Jazyk bunky (sk, cs, …)
bunka.string=Datum2Text(datum,false,jazyk) ' Vloženie dátumu ako reťazca
endif
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() ' Skočíme na koniec prípadne označeného textu a zrušíme označenie
jazyk=left(dokument.CharLocale.Language,2) ' Jazyk znaku, na ktorom sa nachádzame (sk, cs, …)
vloz_do_dokumentu(Datum2Text(datum,false,jazyk)) ' Vložíme aktuálny reťazec + dátum
endif
end sub
Copyright © 2002 - 2013 inet.sk, s. r. o. | Všetky práva vyhradené | Neprešlo jazykovou úpravou | ISSN 1336-1899
Využívame kvalitný webhosting za rozumnú cenu od Inet.sk