Makrá v OpenOffice.org 12/2008

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

V dnešnom pokračovaní seriálu o makrách v OpenOffice.org si ukážeme makro pre import a export používateľských slovníkov z a do textových súborov.

 

Pokiaľ používate operačný systém MS Windows, viete, že jeho súčasťou je aj slovník „custom.dic“, ktorý sa ukladá v obyčajnom textovom formáte. Žiaľ, tento slovník nie je v tomto tvare použiteľný pre OpenOffice.org a preto nezostáva nič iné, ako slová, ktoré obsahuje, nanovo vložiť do niektorého z používateľských slovníkov.

Toto však nemusíme robiť manuálne, ale môžeme si na to naprogramovať makro. Pravdaže, makro nebudeme robiť tak, aby pracovalo iba s týmto slovníkom, ale naprogramujeme ho tak, aby sme mohli importovať ľubovoľný slovník v textovom formáte, kde sú slová zadané v riadkoch.

Zároveň, keď už importujeme slovníky, prečo ich aj neexportovať, teda spätne neuložiť do textového súboru, ktorý môžeme ľahko preniesť na iný počítač alebo zálohovať na CD médium.

Návrh dialógu - priradenie makra k tlačidlu

Aby sme mohli vyberať slovník, s ktorým chceme robiť import alebo export a zároveň, aby sme mohli vybrať príslušný textový súbor, vytvoríme si v makre dialóg so vstupným poľom pre názov textového súboru (vrátane tlačidla pre jeho výber), zoznamom používateľských slovníkov a, samozrejme, tlačidlami pre spustenie importu alebo exportu. Pravdaže, k príslušným tlačidlám je potrebné na záložke „Udalosti“ priradiť príslušné makrá. Aby sme vedeli, že import a export prebehol úspešne, vložíme si tam aj prázdne textové pole, do ktorého budeme vypisovať priebeh spracovania. Celé makro aj s dialógom uložíme do knižnice „dictionary_IO“.

Nastavenie slovníka a textového súboru

Na záver ešte upozornime, že jeden používateľský slovník v OpenOffice.org môže obsahovať maximálne 2000 slov. Pri vlastnom importe sa do neho nevloží slovo, ktoré sa v ňom už nachádza (toto zabezpečuje priamo OpenOffice.org) a OpenOffice.org nevyhlási chybu, ak sa pokúsime naimportovať viac slov – zdá sa, akoby ich importoval, ale v skutočnosti ich do súboru nevloží. Toto však v makre riešiť nebudeme a ponecháme iba na používateľovi, aby si prípadný väčší vstupný súbor rozdelil na menšie podľa svojho vlastného uváženia, prípadne to necháme ako „domácu úlohu“.

Priebeh exportu

REM Import/Export používateľských slovníkov
private dialog_IO as object

Sub Import_Export_slovnikov
 dim pom_zoznam, zoznam, slovniky as object
 
 DialogLibraries.LoadLibrary("dictionary_IO") ' Otvorenie knižnice
 dialog_IO=CreateUnoDialog (DialogLibraries.dictionary_IO.Dialog_dictionary_IO) ' Sprístupnenie dialógu
 
 ' Načítanie zoznamu slovníkov
 pom_zoznam=createUnoService("com.sun.star.linguistic2.DictionaryList") ' sprístupnenie zoznamu slovníkov
 zoznam=pom_zoznam.GetDictionaries ' zoznam slovníkov
 slovniky=dialog_IO.getControl ("zoznam_slovnikov") ' prístup k zoznamu slovníkov v dialógu
 ' Vloženie názvov slovníkov do zoznamu v dialógu
 for i=LBound(zoznam) to UBound(zoznam)
  slovniky.AddItem(zoznam(i).Name, slovniky.ItemCount)
 next i
 slovniky.Text=slovniky.Items(0) ' Zobrazenie prvej položky
 ' Vlastný Import/Export
 dialog_IO.Execute()
 ' Vymazanie dialógu
 dialog_IO.dispose()
 
End Sub

sub Vyber_textovy_subor
 ' Túto funkciu priradíme k tlačidlu pre výber súboru
 dim pom_dialog as object
 ' Štandardný systémový dialóg pre otvorenie súboru
 pom_dialog=CreateUnoService("com.sun.star.ui.dialogs.FilePicker")
 pom_dialog.SetMultiselectionMode (False)
 pom_dialog.Title="Výber textového súboru"
 if pom_dialog.Execute() = 1 then
  'Ak sme vybrali súbor, tak nastavímne jeho názov a cestu do IO dialógu
  dialog_IO.getControl("textovy_subor").Text=ConvertFromURL(pom_dialog.Files(0))
 endif
end sub

Sub Import_slovnika
 ' Túto funkciu priradíme k tlačidlu Import
 dim pom_zoznam, slovnik as object
 dim pom_nazov, nazov, naz_slovnik, slovo as string
 
 pom_zoznam=createUnoService ("com.sun.star.linguistic2.DictionaryList") ' sprístupnenie zoznamu slovníkov
 isubor=FreeFile
 pom_nazov=dialog_IO.getControl("textovy_subor").Text
 nazov=ConvertToURL(pom_nazov)
 ' Ak súbor neexistuje, nie je z čoho importovať
 if not FileExists (nazov) then
  msgbox "Súbor '"+pom_nazov+"' neexistuje."
  exit sub
 endif
 open nazov for Input as isubor
 naz_slovnik=dialog_IO.getControl("zoznam_slovnikov").Text ' Názov vybraného slovníka
 slovnik=pom_zoznam.GetDictionaryByName(naz_slovnik) ' Sprístupnenie zadaného slovníka
 
 ipovodne=slovnik.Count ' Pôvodný počet slov v slovníku
 i=0
 while not EOF (isubor)
  Line Input #isubor, slovo ' Načítanie slova z tetxového súboru
  slovnik.Add(slovo, False, "") ' Vloženie slova do slovníka
  i=i+1
  dialog_IO.getControl("popis_vysledku").Text = "Importovaných "+i+" slov." ' Priebežné zobrazovanie importu
 wend
 i=slovnik.Count-ipovodne ' Skutočne importovaný počet slov do slovníka (nový počet mínus pôvodný počet)
 dialog_IO.getControl("popis_vysledku").Text = "Import "+i+" slov ukončený." ' Oznam o ukončení importu
 close #isubor
 
End Sub


Sub Export_slovnika
 ' Túto funkciu priradíme k tlačidlu Export
 dim pom_zoznam, slovnik as object
 dim pom_nazov, nazov, naz_slovnik, slovo as string

 pom_zoznam=createUnoService("com.sun.star.linguistic2.DictionaryList") ' sprístupnenie zoznamu slovníkov
 isubor=FreeFile
 pom_nazov=dialog_IO.getControl("textovy_subor").Text
 nazov=ConvertToURL(pom_nazov)
 ' Ak súbor existuje, má sa prepísať?
 if FileExists (nazov) then
  if msgbox("Súbor '"+pom_nazov+"' existuje. Prepísať?",4,"")<>6 then
   ' Nestlačilo sa tlačidlo "Áno", neexportujeme
   exit sub
  endif
 endif
 if nazov="" then
  msgbox "Nie je zadaný súbor pre export."
  exit sub
 endif
 isubor=FreeFile
 open nazov for output as isubor
 
 naz_slovnik=dialog_IO.getControl("zoznam_slovnikov").Text ' Názov vybraného slovníka
 slovnik=pom_zoznam.GetDictionaryByName(naz_slovnik) ' Sprístupnenie zadaného slovníka
 ' Budeme exportovať všetky slová
 for i = LBound(slovnik.Entries) to UBound(slovnik.Entries)
  ' Zápis slova do exportného súboru
  print #isubor, slovnik.Entries(i).DictionaryWord
  dialog_IO.getControl("popis_vysledku").Text = "Exportovaných "+i+"/"+slovnik.Count+" slov." ' Priebežné zobrazovanie exportu
 next i
 dialog_IO.getControl("popis_vysledku").Text = "Export "+slovnik.Count+" slov ukončený." ' Oznam o ukončení exportu
 ' Zatvorenie exportovaného zoznamu
 close #isubor

End Sub

Export ukončený

 

Neprehliadnite: