Július Pastierik / 20. 04. 2011, 00:00
V poslednom pokračovaní makier pre vkladanie dátumu si ukážeme funkcie pre analýzu zadefinovanej štruktúry a vlastné vloženie takto definovaného dátumu a času.
Ako čerešničku na torte si na záver ukážeme makrá pre analýzu nami zadefinovanej štruktúry dátumu a času a jej vlastné vloženie do dokumentu.
Rem Funkcia, ktorá vracia jazyk pracovného rozhrania OO.o
function Jazyk_OOo as string
dim ConfigProvider, MasterKey as object
dim NodePath(0) as new com.sun.star.beans.PropertyValue
NodePath(0).Name = "nodepath"
NodePath(0).Value = "org.openoffice.Setup/L10N/"
ConfigProvider = createUnoService("com.sun.star.configuration.ConfigurationProvider")
MasterKey = ConfigProvider.createInstanceWithArguments("com.sun.star.configuration.ConfigurationAccess", NodePath())
Jazyk_OOo = left(MasterKey.getByName("ooLocale"),2) '"sk", "cs", …
end function
function prepisat_subor(sSubor$) as boolean
dim tt1, tt2, tt3, sNazov as string
tt1="Súbor '"
tt2="' existuje. Prepísať?"
tt3="Názvy mesiacov"
dim sf, inStream, inFile ' Pre čítanie a zápis do lokalizačného súboru
kde=basiclibraries.getLibraryLinkURL("JP_date_time") ' Adresár, kde je rozšírenie nainštalované
sNazov=left(kde,len(kde)-10)+"JP_otazka_"+Jazyk_OOo+".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 = inFile.readLine ' namiesto Line Input #subor, riadok
rovna=instr(riadok,"=")
if rovna<>0 then
premenna=trim(left(riadok,rovna-1)) ' Budeme ignorovať medzery
definicia=trim(right(riadok,len(riadok)-rovna))
select case premenna
case "subor"
tt1=definicia+" '"
case "existuje"
tt2="' "+definicia
case "nadpis"
tt3=definicia
end select
end if
loop
' Zatvorenie definičného súboru – namiesto close #subor
inStream.closeInput
inFile.closeInput
end if
prepisat_subor=(msgbox(tt1+sSubor+tt2,52,tt3)=6)
end function
REM Funkcia pre načítanie definície formátu
function nacitaj_format(jazyk as string) as string
dim sSubor$, riadok$
dim sf, inStream, inFile ' Pre čítanie zo súboru
riadok="dd.cc.rrrr"
sSubor="JP_setup_"+jazyk+".txt"
kde=basiclibraries.getLibraryLinkURL("JP_date_time") ' Adresár, kde je rozšírenie nainštalované
sNazov=left(kde,len(kde)-10)+sSubor ' Súbor s definíciou
if fileexists(sNazov) then ' Ak 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
riadok=trim(inFile.readLine) ' namiesto Line Input #subor, riadok
' Zatvorenie definičného súboru – namiesto close #subor
inStream.closeInput
inFile.closeInput
end if
nacitaj_format=riadok
end function
REM Funkcia pre nastavenie vkladaného dátumu a času podľa formátu
function nastav_DT(Jazyk$, Datum$, Cas$) as string
dim sFormat$ : sFormat=nacitaj_format(Jazyk)
dim sVysledok$, sDen$, sMesiac$, sRok$, sHodina$, sMinuta$, sSekunda$
dim znak$, posledny$, definicia$, co$
dim mmc%
sDen=left(Datum,2)
sMesiac=mid(Datum,4,2)
sRok=right(Datum,4)
sHodina=left(Cas,2)
sMinuta=mid(Cas,4,2)
sSekunda=right(Cas,2)
sVysledok=""
posledny=""
definicia=""
REM Analýza formátu
for i=1 to len(sFormat)+1
if i=len(sFormat)+1 then ' Sme "za", musíme zapísať definíciu
znak=""
else
znak=(mid(sFormat,i,1)) ' i-ty formátovací znak
endif
if lcase(znak)<>lcase(posledny) and posledny<>"" then ' Zmena znaku, je potrebné zapísať definíciu
co=lcase(left(definicia,1)) ' Prvý znak definície určuje, čo vkladáme
select case co
case "h" ' Hodina: hh (h)
if (len(definicia)=1) and (left(sHodina,1)="0") then
sVysledok=sVysledok+right(sHodina,1)
else
sVysledok=sVysledok+sHodina
endif
case "m" ' Minúta: mm (m)
if (len(definicia)=1) and (left(sMinuta,1)="0") then
sVysledok=sVysledok+right(sMinuta,1)
else
sVysledok=sVysledok+sMinuta
endif
case "s" ' Sekunda: ss (s)
if (len(definicia)=1) and (left(sSekunda,1)="0") then
sVysledok=sVysledok+right(sSekunda,1)
else
sVysledok=sVysledok+sSekunda
endif
case "d" ' Deň: dd (d)
if (len(definicia)=1) and (left(sDen,1)="0") then
sVysledok=sVysledok+right(sDen,1)
else
sVysledok=sVysledok+sDen
endif
case "c" ' Mesiac číslom: cc (c)
if (len(definicia)=1) and (left(sMesiac,1)="0") then
sVysledok=sVysledok+right(sMesiac,1)
else
sVysledok=sVysledok+sMesiac
endif
case "n" ' Mesiac názov: n
mmc=val(sMesiac)
sVysledok=sVysledok+Mesiac_zo_suboru(mmc, true, Jazyk)
case "a" ' Mesiac skloňovaný: a
mmc=val(sMesiac)
sVysledok=sVysledok+Mesiac_zo_suboru(mmc, false, Jazyk)
case "r" ' Rok: rrrr (rrr, rr, r)
sVysledok=sVysledok+right(sRok,len(definicia))
case "\" ' Pred znakom bola opačná lomka, znak pridávame priamo – nie je to formátovacia značka
if len(definicia)>1 then ' Boli zadané opakované opačné lomky – vkladáme znak lomky
sVysledok=sVysledok+"\"
endif
if len(definicia)<>2 then ' Bola zadaná jedna alebo tri a viac lomiek – vkladáme aj znak za poslednou lomkou
sVysledok=sVysledok+znak ' Vkladáme znak za lomkou
znak="" ' Posledný znak ignorujeme
endif
case else
sVysledok=sVysledok+definicia
end select
definicia=""
end if
definicia=definicia+znak ' Pridanie znaku k definícii
posledny=znak
next i
nastav_DT=sVysledok
end function
REM Funkcia pre vloženie dátumu a času podľa používateľskej definície
sub Vloz_Datum_pouzivatel
dim dokument, bunka as object
dim teraz, datum, cas, jazyk, format 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
cas=right(teraz,len(teraz)-i) ' Čas
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=nastav_DT(jazyk,datum,cas) ' 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(nastav_DT(jazyk,datum,cas))
endif
end sub
REM Funkcia pre zápis názvov mesiacov z aktuálneho dokumentu do jazykového súboru
sub zapis_definiciu_jazyka
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