Archív Inet.sk Pôvodný autor: Július Pastierik
06. 04. 2011 o 00:00 2141x

Makrá v OpenOffice.org: Vkladanie dátumu a času podľa vlastného formátu (1)

Potrebujete do dokumentov vkladať aktuálny dátum alebo čas a to podľa vlastného formátu? V nasledujúcich dieloch seriálu o programovaní makier si ukážeme funkcie, pomocou ktorých to dokážete urobiť.
Makrá v OpenOffice.org: Vkladanie dátumu a času podľa vlastného formátu (1)

 

Hoci OpenOffice.org umožňuje vkladať do dokumentu aktuálny dátum a čas, nie vždy tieto možnosti vyhovujú tomu, čo požadujete. Preto si pripravíme niekoľko funkcií, pomocou ktorých dokážeme vkladať dátum nielen v niektorom z preddefinovaných formátov, ale navyše pomocou dialógu si pripravíme možnosti pre vloženie týchto údajov v nami požadovanom formáte.

 

Za týmto účelom si musíme, samozrejme, určiť formátovacie značky – hodina (h), minúta (m), sekunda (s), deň (d), mesiac číslom (c), priamy názov mesiaca (n), skloňovaný názov mesiaca (a) a rok (r). Aby formátovacie možnosti boli čo najširšie, umožníme zadávať napr. deň v taktom počte cifier, koľko skutočne obsahuje (d), alebo povinne v dvojcifernom tvare (dd). Pravdaže, toto umožníme nielen pre deň, ale aj pre ostatné číselné údaje, pričom pre rok umožníme zápis od jednociferného až po štvorciferné číslo.


 

Aby sme mohli do dátumových a časových údajov vkladať aj písmená, ktoré sme určili pre formátovanie, toto umožníme tak, že pokiaľ sa pred nimi bude nachádzať znak opačnej lomky, vložíme značku ako písmeno (samotnú opačnú lomku potom vložíme jej dvojitým zadaním).

 

Ako obvykle, dátumy umožníme vkladať v rôznych jazykoch (automaticky podľa jazyka dokumentu) a to ako do textových dokumentov, tak aj do zošitov modulu Calc. Preto si v prvej časti predstavíme funkcie pre jazykovú lokalizáciu dialógového okna, v ktorom budeme definovať formát vkladaného dátumu a času a názvy mesiacov pre rôzne jazyky (okrem slovenčiny, ktorá je obsiahnutá priamo v makre).

 

dim oDlg as object
dim sJazyk$ ' Jazyk dokumentu

REM Funkcia pre zistenie jazyka 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=lcase(left(MasterKey.getByName("ooLocale"),2)) '"sk", "cs", …
end function

REM Procedúra pre nastavenie jazyka dialógu
Sub Set_jazyk_dialogu(oDlg, sNazov, sZahlavie)
 dim riadok, premenna, definicia as string
 dim rovna as integer
 dim sf, inStream, inFile ' Pre čítanie z lokalizačného súboru

 on error resume next
 
 oDlg.model.getByName("Jazyk").setpropertyvalue("Label","Jazyk: "+sJazyk)
 
 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
    premenna=trim(left(riadok,rovna-1)) ' Budeme ignorovať medzery
    definicia=trim(right(riadok,len(riadok)-rovna))
    select case premenna
     case sZahlavie
      oDlg.Title=definicia
     case "Pomoc1"
      oDlg.model.getByName("Pomoc").setpropertyvalue("Label",definicia+chr$(&H0A))
     case "Pomoc2", "Pomoc3", "Pomoc4", "Pomoc5", "Pomoc6", "Pomoc7", "Pomoc8", "Pomoc9"
      pom=oDlg.model.getByName("Pomoc").getpropertyvalue("Label")
      oDlg.model.getByName("Pomoc").setpropertyvalue("Label",pom+chr$(&H0A)+definicia)
     case "Jazyk"
      oDlg.model.getByName("Jazyk").setpropertyvalue("Label",definicia+" "+sJazyk)
     case else
      oDlg.model.getByName(premenna).setpropertyvalue("Label",definicia)
    end select
   end if
  loop
  ' Zatvorenie definičného súboru – namiesto close #subor
  inStream.closeInput
  inFile.closeInput
 end if
end sub

REM Funkcia pre načítanie názvov mesiacov z aktuálneho dokumentu alebo z definičného súboru
function nacitaj_nazvy_mesiacov as string
 dim dokument, povodny as object
 dim vysledok$, sSubor$
 dim sf, inStream, inFile ' Pre čítanie z definičného súboru
 
 vysledok=""
 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
  povodny=dokument.getCellByPosition(0,0) ' Aktuálna bunka
  sJazyk=left(povodny.CharLocale.Language,2) ' Jazyk bunky (sk, cs, …)
 endif
 if ThisComponent.supportsService("com.sun.star.text.TextDocument") then ' Ak sme v textovom dokumente
  kurzor= ThisComponent.currentcontroller.getViewCursor() ' Viditeľný kurzor
  povodny=kurzor.getstart() ' Odpamätanie pozície
  kurzor.gotoStart(false) ' Skočíme na začiatok dokumentu
 
  sJazyk=left(kurzor.CharLocale.Language,2) ' Jazyk znaku, na ktorom sa nachádzame (sk, cs, …)
  
  if sJazyk<>"sk" then ' Pre slovenčinu nenačítavame údaje zo súboru
   do ' Prejdeme súbor a vyhľadáme definície mesiacov
    kurzor.gotoStartOfLine(false)
    kurzor.gotoEndOfLine(true)
    riadok=trim(kurzor.getstring())
    kurzor.collapseToEnd()
    if instr("m01=m02=m03=m04=m05=m06=m07=m08=m09=m10=m11=m12=a01=a02=a03=a04=a05=a06=a07=a08=a09=a10=a11=a12=",left(riadok,4))>0 and riadok<>"" then
     if vysledok="" then
      vysledok=riadok
     else
      vysledok=vysledok+chr(13)+riadok
     endif
    endif
   loop while kurzor.goRight(1,false)
   kurzor.gotoRange(Povodny,false)
  end if
 
  if vysledok="" then ' Ak nie je definícia jazykov v súbore, potom ju načítame z definičného súboru (ak existuje)
   sSubor="JP_date_"+sJazyk+".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 mesiacov
   if fileexists(sNazov) then ' Ak súbor s mesiacmi 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" ' 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
     if vysledok="" then
      vysledok=riadok
     else
      vysledok=vysledok+chr(13)+riadok
     endif
    loop
    ' Zatvorenie definičného súboru – namiesto close #subor
    inStream.closeInput
    inFile.closeInput
   end if
  end if
 end if
 nacitaj_nazvy_mesiacov=vysledok
end function

REM Funkcia volaná pri stlačení tlačidla "Ulož"
sub uloz_initiated
 ' Uloženie definície mesiacov do súboru
 dim premenna, definicia, riadok as string
 dim prepisat as boolean
 dim tt1, tt2, tt3 as string
 dim sf, inStream, inFile, outStream, outFile ' Pre čítanie a zápis do lokalizačného súboru

 riadok=trim(oDlg.model.Nazvy.Text)
 if (sJazyk="sk") or (riadok="") then exit sub ' Ak sme nič nezadali a pre slovenčinu nemeníme nastavenia názvov mesiacov
 
 sSubor="JP_date_"+sJazyk+".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 mesiacov
 prepisat=true ' Predpokladáme, že definičný súbor s názvami mesiacov neexistuje
 
 if fileexists(sNazov) then ' Ak súbor existuje, tak sa opýtame, či prepísať
  prepisat=prepisat_subor(sSubor)
 endif
 
 if prepisat then
  sf = createUnoService("com.sun.star.ucb.SimpleFileAccess")
  outStream = sf.openFileWrite(sNazov)
  outFile = createUnoService("com.sun.star.io.TextOutputStream")
  outFile.OutputStream = outStream
  outFile.Encoding = "UTF-8" ' Súbor bude v UTF-8 aby bola dobrá diakritika
  outStream.truncate() ' Vymazanie predchádzajúceho obsahu
  outFile.writeString(riadok)
  outStream.closeOutput
  outFile.closeOutput
 endif
end sub

REM Funkcia volaná pri stlačení tlačidla "Nastav"
sub nastav_initiated
 ' Uloženie definície formátu mesiaca do súboru
 dim premenna, definicia, riadok as string
 dim prepisat as boolean
 dim tt1, tt2, tt3 as string
 dim sf, inStream, inFile, outStream, outFile ' Pre čítanie a zápis do lokalizačného súboru
 
 riadok=trim(oDlg.model.Pole.Text)
 if riadok="" then exit sub ' Ak nič nezadáme, nemeníme definície

 sSubor="JP_setup_"+sJazyk+".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 dormátu
 prepisat=true ' Predpokladáme, že definičný súbor s definíciou formátu mesiaca neexistuje
 
 if fileexists(sNazov) then ' Ak súbor existuje, tak sa opýtame, či prepísať
  prepisat=prepisat_subor(sSubor)
 endif
 
 if prepisat then
  sf = createUnoService("com.sun.star.ucb.SimpleFileAccess")
  outStream = sf.openFileWrite(sNazov)
  outFile = createUnoService("com.sun.star.io.TextOutputStream")
  outFile.OutputStream = outStream
  outFile.Encoding = "UTF-8" ' Súbor bude v UTF-8 aby bola dobrá diakritika
  outStream.truncate() ' Vymazanie predchádzajúceho obsahu
  outFile.writeString(riadok)
  outStream.closeOutput
  outFile.closeOutput
 endif
end sub

REM Procedúra pre otvorenie dialógu pre nastavenie mesiacov a formátu
sub spusti_dialog
 DialogLibraries.LoadLibrary("JP_date_time")
 oDlg=CreateUnoDialog(DialogLibraries.JP_date_time.DialogDateTime)
 
 kde=basiclibraries.getLibraryLinkURL("JP_date_time") ' Adresár, kde je rozšírenie nainštalované
 nazov=left(kde,len(kde)-10)+"JP_date_time_"+Jazyk_OOo+".txt" ' Súbor s jazykovou lokalizáciou
 
 oDlg.model.Nazvy.Text=trim(nacitaj_nazvy_mesiacov) ' Zistí aj jazyk dokumentu
 oDlg.model.Pole.Text=trim(nacitaj_format(sJazyk))
 
 Set_jazyk_dialogu(oDlg, nazov, "DialogDateTime") ' Nastavenie jazyka dialógu
  
 oDlg.execute() ' Spustenie dialógu
 oDlg.dispose() ' Zatvorenie dialógu
end sub

Novinky a inšpirácie

Z nášho blogu

Prečítajte si novinky, inšpirácie a dôležité informácie zo sveta webhostingu a technológií.

Bezpečnostné aktualizácie PHP: Chráňte svoj web pred hrozbami Oznamy
21. 10. 2026

Bezpečnostné aktualizácie PHP: Chráňte svoj web pred hrozbami

Vývojársky tím PHP vydal dôležité bezpečnostné záplaty pre všetky oficiálne podporované verzie PHP 8. Na našich serveroch sme nezaváhali ...

Čítať viac
Gmail končí s funkciou „Odoslať ako“ pre cudzie e-mailové adresy. Čo to znamená pre vás? Oznamy
01. 10. 2026

Gmail končí s funkciou „Odoslať ako“ pre cudzie e-mailové adresy. Čo to znamená pre vás?

Google oznámil, že v januári 2027 zruší v Gmaile funkciu „Odoslať ako“ (Send as) pre e-mailové adresy od iných poskytovateľov. Ak ste si ...

Čítať viac
Večerná „prestávka“ pre server VIP033 Oznamy
25. 09. 2026

Večerná „prestávka“ pre server VIP033

Neustále pracujeme na tom, aby vaše weby bežali hladko, rýchlo a bezpečne. Technológie idú míľovými krokmi vpred a my v Inet.sk s nimi dr...

Čítať viac
Novinky na Inet.sk (09 / 2026) Novinky
09. 09. 2026

Novinky na Inet.sk (09 / 2026)

Posledné mesiace sme v Inet.sk nevenovali len stabilite serverov, ale najmä počúvaniu vašich reálnych skúseností z každodennej praxe. Výs...

Čítať viac

Podpora klientom

Máte ďalšie otázky?

Nezúfajte, pripravili sme pre Vás jednoduché odpovede na najdôležitejšie otázky, ktoré od našich klientov dostávame.

Zistiť viac

Naše výhody

Prečo si nás vybrať?

Našim klientom ponúkame až 30-dňovú záruku vrátenia peňazí.

Sme skutočný slovenský webhosting

Slovenská
firma

Nepatríme pod žiadnu nadnárodnú spoločnosť, sme malá rodinná firma.

Na nás sa môžete kedykoľvek spoľahnúť

Dlhoročné
skúsenosti

Na slovenskom trhu pôsobíme už viac ako 20 rokov, sme overená značka.

Naši prví zákazníci sú stále s nami

Spokojní
zákazníci

Naši zákazníci sú ako naša rodina, preto nám verí už viac ako 1250 klientov.

Maximálna bezpečnosť

Maximálna
bezpečnosť

Chránime Vás pred útokmi i SPAMom. U nás sú Vaše dáta v bezpečí.

Prozákaznícka podpora

Ochotná
podpora

Zakladáme si na individuálnom prístupe, preto Vám vždy radi pomôžeme.

Kvalita a dobrá cena

Férová
cena

Cena pri obnove je rovnaká ako pri objednávke. Nezdražujeme po prvom roku a bez skrytých poplatkov.

U nás sa Vám nič nestratí

Pravidelné
zálohovanie

Vaše dáta zálohujeme každý deň, dostupné sú aj zálohy z pred niekoľkých mesiacov.

Svižný Admin Panel nájdete len u nás

Prehľadný
Admin Panel

Máme rýchly a prehľadný Admin Panel, ktorý zvládne používať naozaj každý.

Správa používateľov

Správa
používateľov

Spravujte svoje projekty bez akýchkoľvek obáv s kolegami alebo externými partnermi.

Máme zľavy pre verných klientov

Vernostné
zľavy

Verní klienti u nás automaticky získavajú 15 % zľavu na každú ďalšiu objednávku.

My Vás nebudeme obmedzovať

Bez
obmedzení

Neobmedzujeme počet databáz, e-mailov, ftp a ani prenos dát.

Hosting pre WordPress

WordPress
na 1 klik

Nainštalujte si obľúbené redakčné systémy rýchlo a jednoducho.

Referencie

Spokojní zákazníci

Pozrite sa, čo o nás povedali naši klienti. Neváhajte a pridajte sa k nám ešte dnes.

Auto 100
Bystricoviny
eCall Slovakia
Filip Jančík
Frost
Merkury Broker
Mi:Su Design
Mesto Nitra
Pro Clienta
Schneider Lekáreň
Vego Marketing
Mesto Zlaté Moravce

Všetky ceny sú uvádzané bez DPH
© 2006 - 2026, Inet.sk, s. r. o., Všetky práva vyhradené

Na našej stránke používame "cookies". Vďaka nim sledujeme návštevnosť, prispôsobujeme reklamu a používateľské nastavenia, čo zlepšuje Váš zážitok z našej stránky. Súhlasíte s ich spracovaním?
Vlastné nastavenia cookies