Na úvod si pripomeňme, že minule sme si naprogramovali makro pre prevod čísla na text s tým, že sme zatiaľ neuvažovali o tzv. finančných číslach, t.j. tvare, keď sa číslovka jedna vypisuje aj pri stovkách či iných rádoch (jednosto, jedentisíc, …). Toto však v mnohých prípadoch nevyhovuje a preto si uvedieme teraz makro, v ktorom je tento prípad ošetrený. Pochopiteľne, makro upravíme tak, aby sme mohli dostať obidva požadované tvary. Za týmto účelom pridáme do funkcie „daj_slovne“ druhý – nepovinný parameter, pomocou ktorého budeme určovať typ výsledku. Vlastné makro potom môže vyzerať takto:
function daj_slovne(cislo as Long, optional financne as boolean) as string
dim rad as integer ' 1 – tisíc, 2 – milion, 3 – miliarda
dim slovne as string
dim pom_financne as boolean
dim analyza as long
if not IsMissing(financne) then ' Parameter typu výsledku je zadaný
pom_financne=financne
else ' Parameter nie je zadaný
pom_financne=FALSE ' štandardne nebudeme prevádzať na finančné číslo
endif
slovne=""
if cislo=0 then
' Osobitne musíme ošetriť číslo „nula“
slovne="nula"
else
rad=0
do while cislo<>0
' z čísla vyberieme posledné tri číslice
analyza=cislo mod 1000
' ktoré prevedieme na text
slovne=slovne_stovky(analyza, rad)+slovne
' číslo zmenšíme o už spracovanú časť
cislo=int(cislo/1000)
' a pridáme text rádu, ktorý budeme spracovávať v ďalšom kroku cyklu
if cislo<>0 then
rad=rad+1
slovne=slovne_rady(cislo mod 1000, rad)+slovne
endif
loop
if pom_financne then ' Úprava v prípade, že píšeme "finančné" číslovky
' Úprava výsledku, ak chceme finančné číslo
if (analyza>=100) and (analyza<=199) then
' úprava výsledku pre stovky
slovne="jedno"+slovne ' jednosto...
endif
if (analyza=1) and (rad=0) then
' úprava výsledku, ak sme prevádzali na text číslo jedna, lebo
' číslovka "jeden" sa skloňuje, t.j. vo financiách sa píše "jedna koruna".
slovne="jedna"
endif
if (analyza=1) and (rad>0) then
' úprava výsledku pre ostatné rády
select case rad
case 1, 2, 4, 6, 8
slovne="jeden"+slovne ' jedentisíc, jedenmilión, …
case 3, 5, 7, 9
slovne="jedna"+slovne ' jednamilarda, …
end select
endif
endif
endif
daj_slovne=slovne
end function
Teraz si ukážeme, ako budeme toto makro volať tými najrôznejšími spôsobmi. Podobne, ako sme to urobili pri makrách pre formátovanie textu, aj teraz si rozdelíme podprogramy do rôznych modulov. Už naprogramované funkcie uložíme do modulu „ Cislo_Slovom“ a nasledujúce podprogramy do modulu „Module1“ v zložke „Standart“. Robíme to z toho dôvodu, že pri volaní makier v Calcu je potrebné, aby sa tieto nachádzali v tejto zložke.
Pretože si teraz predstavujeme vstupnú funkciu „InputBox “, ukážeme si túto možnosť ako prvú s tým, že prevedené číslo ihneď vložíme do písaného textu:
sub Vloz_cislo_slovom
dim cislo_s as string
dim cislo as long
dim dokument, dispecer as object
dim argumenty(0) as new com.sun.star.beans.PropertyValue
cislo_s= inputbox("Zadajte celé číslo, ktoré chcete vložiť slovom:","Vloženie čísla slovom","")
if cislo_s<>"" then
' ak vôbec zadáme nejaký údaj, tak ho prevedieme na text
cislo=val(cislo_s)
dokument=ThisComponent.CurrentController.Frame
dispecer=createUnoService("com.sun.star.frame.DispatchHelper")
argumenty(0).Name = "Text"
argumenty(0).Value = Cislo_Slovom.Daj_Slovne(cislo)
' a vložíme ho do textu na aktuálnu pozíciu
dispecer.executeDispatch(dokument, ".uno:InsertText", "", 0, argumenty())
endif
end sub
Ešte praktickejšie riešenie je však také, že si napíšeme číslo priamo do dokumentu, označíme ho do bloku a napr. po stlačení niektorej klávesovej skratky, ku ktorej si priradíme nasledujúce makro ho ihneď prepíšeme jeho slovným znením:
sub Vloz_cislo_slovom
dim cislo_s as string
dim cislo as long
dim dokument, vyber, dispecer as object
dim argumenty(0) as new com.sun.star.beans.PropertyValue
dokument=thisComponent ' aktuálny dokument
vyber=dokument.getCurrentSelection() ' aktuálny vyber
' Ak je počet označených častí nenulový
if vyber.getCount()>0 then
' Vyberieme označený reťazec a orežeme ho o okrajové medzery
cislo_s=trim(vyber.getByIndex(0).getString())
if cislo_s<>"" then
' ak sme niečo označili, tak to prevedieme na text
cislo=val(cislo_s)
dokument=ThisComponent.CurrentController.Frame
dispecer=createUnoService("com.sun.star.frame.DispatchHelper")
argumenty(0).Name = "Text"
argumenty(0).Value = Cislo_Slovom.Daj_Slovne(cislo)
' a vložíme ho do textu na aktuálnu pozíciu
dispecer.executeDispatch(dokument, ".uno:InsertText", "", 0, argumenty())
endif
endif
end sub
Úplne najpohodlnejšie riešenie je však také, že napíšeme číslo do dokumentu a bez toho, aby sme ho označovali do bloku ho napr. po stlačení klávesovej skratky prepíšeme jeho slovným znením. Na tento účel však najprv musíme sami vyhľadať a označiť posledne vložené slovo pomocou takejto funkcie:
function posledne_slovo (kurzor as object) as string
' funkcia vráti posledne napísané slovo a zároveň ho označí do bloku
dim poms as string
dim slovo as boolean
dim OddelovaceSlov as string
OddelovaceSlov=" "+chr(&HA0)+chr(&H09)+chr(&H0A)+chr(&H0D)
OddelovaceSlov=OddelovaceSlov+"-/.,!?;…"
OddelovaceSlov=OddelovaceSlov+"()[]{}"
poms=""
slovo=false
do while (not kurzor.isAtStartOfLine) and (not slovo)
' pokiaľ nie sme na začiatku riadku a nie sme ešte na začiatku slova
' tak sa presunieme o jeden znak doľava s tým, že označíme tento znak do bloku
kurzor.goleft(1,true)
' označené slovo si uložíme do pomocnej premennej
poms=kurzor.getstring
' ak sme našli oddeľovač slov, tak sme na začiatku slova
slovo=instr(OddelovaceSlov,left(poms,1))
loop
if slovo and (len(poms)>1) then
' ak sme boli na začiatku slova (a ak sme vôbec niečo označili)
' tak musíme tento oddeľujúci znak z nájdeného slova vylúčiť, t.j.
' vrátime sa o krok späť
kurzor.goright(1,true)
poms=kurzor.getstring
endif
posledne_slovo=poms
end function
Vlastné makro pre vloženie slovného znenia môže potom vyzerať takto:
sub Vloz_cislo_slovom
dim kurzor, doc as object
dim cislo as long
dim scislo as string
doc=ThisComponent.CurrentController
kurzor=doc.getViewCursor() ' Aktuálna pozícia kurzora
scislo=posledne_slovo(kurzor)
cislo=val(scislo)
if trim(str(cislo))=scislo then
scislo=Cislo_Slovom.Daj_Slovne(cislo)
kurzor.SetString(scislo) ' označené číslo prepíšeme jeho slovným znením
endif
kurzor.goright(len(scislo),false) ' nakoniec odznačíme blok (zostal označený aj po vložení textu)
end sub
Ako ste si mohli všimnúť, funkcia pre hľadanie posledného slova ukončí jeho hľadanie, ak narazí na nejaký znak, ktorý považujeme za oddeľovač slov a preto musíme procedúru „Vloz_cislo_slovom“ volať ihneď po napísaní príslušného čísla bez toho, aby sme za ním zadali čo i len medzeru.
Nakoniec si naprogramujeme funkciu pre vloženie slovného znenia čísla v module Calc. Pretože niekedy požadujeme, aby vložené slovo začínalo veľkým písmenom, vylepšíme ju aj o takýto nepovinný paramater:
function Slovom(Cislo as Long, optional Financne, optional Velke)
dim nazov as string
dim pom_fin, pom_velke as boolean
' štandardne budeme predpokladať, že chceme finančné číslo
pom_fin=TRUE
if not IsMissing(Financne) then ' Parameter je zadaný
if TypeName(Financne)="String" then
' ak je vstupná hodnota logická, Calc ju odovzdá ako reťazec „true“ alebo „false“
if uCase(Financne)="TRUE" or uCase(Financne)="FALSE" then
pom_fin=Financne
endif
endif
endif
' štandardne budeme predpokladať, že chceme začínať veľkým písmenom
pom_velke=TRUE
if not IsMissing(Velke) then ' Parameter je zadaný
if TypeName(Velke)="String" then
if uCase(Velke)="TRUE" or uCase(Velke)="FALSE" then
pom_velke=Velke
endif
endif
endif
' číslo prevedieme na text
nazov=Cislo_Slovom.Daj_Slovne(cislo,pom_fin)
if pom_velke then
' a ak chceme prvé písmeno veľké, tak to zmeníme
nazov=uCase(left(nazov,1))+right(nazov,len(nazov)-1)
endif
Slovom=nazov
end function
Pri vlastnom volaní tejto funkcie si musíme uvedomiť, že nepovinné parametre sa „dopĺňajú“ zľava doprava, t.j. ak zadať tretí parameter „Velke“, musíme zadať aj druhý parameter „Financne“. Jednotlivé možnosti si však podrobnejšie preskúmajte ako domácu úlohu.
Skončili sme tretiu sériu nášho seriálu o programovaní makier v OpenOffice.org. Teraz môžete protestovať, že sme ešte neprebrali poslednú možnosť interaktívnych vstupov – dialógy. Vzhľadom na rozsah tejto problematiky im však budeme venovať celú nasledujúcu sériu článkov. Štvrtú sériu začneme, ako inak, makrami pre vkladanie nezalomiteľnej medzery za jednoznakové predložky s tým, že rozšírime možnosti OpenOffice.org o ich automatické vkladanie už počas písania (podobne, ako to majú konkurenčné produkty) a navyše do makra postupne zabudujeme možnosť vkladania „pružnej“ nezalomiteľnej medzery, čo v súčasnosti nedokážu ani najznámejšie platené kancelárske programy.
Pre všetkých záujemcov sme zároveň pripravili PDF verziu práve ukončenej tretej časti seriálu o programovaní makier v OpenOffice.org: makra_v_ooo_3.pdf (378kB, MD5 kontrolný súčet – 228D7C86E82E9173CCD131BA912A2786). Ako prílohy sú na príslušných stranách priamo v ňom vložené aj zdrojové texty makier v TXT formáte.
Makrá v OpenOffice.org 3/VII. – Prevod čísla na text 2.
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í.
Oznamy
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...
Novinky
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...
Oznamy
Plánovaná údržba v datacentre (20.09.2026)
Stabilita a nepretržitá dostupnosť vašich webov je pre nás kľúčová. Aby sme tento štandard nielen udržali, ale neustále zvyšovali, naši p...
Oznamy
Aktualizujte ihneď svoj Wordpress - Kritická zraniteľnosť (CVE-2026-63030)
Bezpečnostný tím WordPressu vydal núdzovú bezpečnostnú záplatu pre kritickú chybu označenú ako CVE-2026-63030. Táto zraniteľnosť dosiahla...
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.
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í.
Slovenská
firma
Nepatríme pod žiadnu nadnárodnú spoločnosť, sme malá rodinná firma.
Dlhoročné
skúsenosti
Na slovenskom trhu pôsobíme už viac ako 20 rokov, sme overená značka.
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ť
Chránime Vás pred útokmi i SPAMom. U nás sú Vaše dáta v bezpečí.
Ochotná
podpora
Zakladáme si na individuálnom prístupe, preto Vám vždy radi pomôžeme.
Výborný pomer
cena / výkon
Ponúkame kvalitné a stabilné služby za rozumnú cenu bez skrytých poplatkov.
Pravidelné
zálohovanie
Vaše dáta zálohujeme každý deň, dostupné sú aj zálohy z pred niekoľkých mesiacov.
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
Spravujte svoje projekty bez akýchkoľvek obáv s kolegami alebo externými partnermi.
Vernostné
zľavy
Verní klienti u nás automaticky získavajú 15 % zľavu na každú ďalšiu objednávku.
Bez
obmedzení
Neobmedzujeme počet databáz, e-mailov, ftp a ani prenos dát.
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.
"S firmou Inet.sk sme veľmi spokojní, vrelo ju odporúčam. Profesionálny a ústretový prístup pána Slančíka, seriózne jednanie a rýchla implementácia našich požiadaviek, 100% spokojnosť. Všetky služby od webhostingu cez výrobu stránky až po detailný servis počas chodu tu máme pod jednou strechou."
Ing. Jozef Brázdik
BB motors, s.r.o.
"Mal som možnosť vyskúšať rôzne webhostingy, ale nakoniec som sa rozhodol všetky moje stránky zveriť Inet.sk. Webhosting zvláda jednoduché, ale aj veľmi náročné stránky a magazíny. Podporuje najnovšie technológie a má veľmi prehľadnú a jednoduchú správu domén. Komunikácia s technickou podporou Inet.sk je vynikajúca a za mňa môžem túto firmu iba doporučiť."
Richard Horný
Final Vision, s. r. o.
"Pri migrácii našej stránky sme sa stretli s maximálnou podporou a profesionálnym prístupom. Inet.sk nám nielen pomohol celý proces zvládnuť bez komplikácií, ale tiež poskytol odborné poradenstvo, ktoré zabezpečilo hladký prechod. Ich hosting je rýchly a najmä stabilný, rovnako oceňujeme aj ich priateľskú komunikáciu."
Peter Kasan
Svet-mineralov.sk
"Proces migrácie bol zrealizovaný hladko a efektívne, pričom všetky kroky boli vykonané precízne a bez výpadkov. Inet.sk poskytol spoľahlivé a profesionálne riešenie, ktoré zjednodušilo správu domén a optimalizovalo ich prevádzku. Oceňujeme ich stabilnú infraštruktúru a kvalitné hostingové služby."
Lukáš Kazík
LKStudio.sk
"Mám u Inet.sk zaparkovanú jednu doménu a mám pocit, že tam zaparkujem aj všetky ostatné domény, ktoré mám, pretože po dlhoročných skúsenostiach s rôznymi inými firmami, mi Vaše služby vyhovujú zatiaľ najviac. Odporúčam kvôli dobrej konektivite a primeranej cene + rýchly support."
Ladislav Kéry
vypnutieimobilizera.sk
"Po rokoch skúšania dodávateľov na poli webhostingových služieb sme našli svojho spoľahlivého a stabilného partnera tu. Stabilita, ochota, znalosť, dobrá cena a rýchle vyriešenie prípadných problémov - to je pre nás Inet.sk."
Jaroslav Mráz
Allycom, s.r.o.
"Máme u Vás doménu a hosting. So službami sme nadmieru spokojní. Z Vašej strany máme pozitívne skúsenosti ako sú: rýchle jednanie, znalosť v problematike, ochota pomôcť, stabilita, zavádzanie noviniek, ak ich klient vyžaduje a dobrá cena. Za nás môžeme Inet.sk len odporučiť. Ďakujeme."
Mgr. Zuzana Valovičová
BL servis, s.r.o.