Archív Inet.sk Pôvodný autor: Július Pastierik
05. 05. 2008 o 00:00 4809x

Makrá v OpenOffice.org 02/2008

V dnešnom dieli seriálu o makrách si ukážeme, ako dokážeme vytvoriť tabuľku v textovom procesore Writer. Zároveň si ukážeme, ako do nej dokážeme skopírovať obsah zošitu z tabuľkového procesora Calc.
Makrá v OpenOffice.org 02/2008

 

Pri tvorení dokumentov, v ktorých chceme prezentovať výsledky práce potrebujeme niekedy vkladať tabuľky. Hoci aj v textovom procesore Writer môžeme do nich vkladať niektoré vzorce, predsa len ich možnosti sú v tejto oblasti obmedzené. Vtedy prichádza do úvahy jediná možnosť – vytvoriť si tabuľku v zošite modulu Calc a nakoniec jej určitú časť preniesť do modulu Writer.

OpenOffice.org v tomto smere neposkytuje priame kopírovanie či dokonca vytvorenie textovej tabuľky, ktorej obsah by bol totožný s obsahom zošita v Calcu. Preto si naprogramujeme makro, ktoré to dokáže. Využijeme na to špeciálnu „schránku“, ktorú si zadefinujeme ako globálne premenné:

REM Makro pre kopírovanie tabuliek z Calcu do Writeru
REM Definícia globálnych premenných špeciálnej "schránky"
global bunky_z_calcu_do_writer(0,0)
global stlpce_z_calcu_do_writer, riadky_z_calcu_do_writer as long

Kopírovaná časť tabuľky v Calcu


Pretože nikdy nechceme kopírovať celý zošit, vo funkcii pre skopírovanie obsahu z modulu Calc budeme pracovať iba s označenou časťou tabuľky:

REM Makro pre skopírovanie tabuľky z Calcu do špeciálnej "schránky"
sub Kopiruj_tabulku_z_Calc_do_Writer
 dim dokument, bunka as object
 dim stlpec, riadok as long
 dim sprava as string
 
 REM Ak sme v tabuľkovom procesore, tak
 if ThisComponent.supportsService("com.sun.star.sheet.SpreadsheetDocument") then
  REM Nastavíme sa na označenú časť tabuľky
  Dokument=ThisComponent.getCurrentSelection()
  REM Zistíme rozsah označenej časti - počet stĺpcov a riadkov
  stlpce_z_calcu_do_writer=dokument.getcolumns().Count
  riadky_z_calcu_do_writer=dokument.getrows().Count
  
  REM Ak je počet označených stĺpcov a riadkov nenulový, tak
  if stlpce_z_calcu_do_writer<>0 and riadky_z_calcu_do_writer<>0 then
   REM Zmeníme veľkosť "schránky" podľa aktuálneho výberu
   redim preserve bunky_z_calcu_do_writer(riadky_z_calcu_do_writer, stlpce_z_calcu_do_writer)

   REM Pre všetky stĺpce z výberu
   for stlpec=0 to stlpce_z_calcu_do_writer-1
    REM a pre všetky riadky z výberu
    for riadok=0 to riadky_z_calcu_do_writer-1
     REM Vyberieme bunku a skopírujeme jej obsah do "schránky"
     bunka=dokument.getCellByPosition(stlpec,riadok)
     bunky_z_calcu_do_writer(riadok+1,stlpec+1)=bunka.getstring()
    next riadok
   next stlpec
  endif
  REM Vypíšeme, akú veľkú oblasť tabuľky sme skopírovali do "schránky"
  sprava="Skopírovaných "+str(stlpce_z_calcu_do_writer)+" stĺpcov a "+str(riadky_z_calcu_do_writer)+" riadkov"
  msgbox sprava
 endif
end sub

Oznam o akopírovanej oblastiNakoniec si naprogramujeme funkciu pre vloženie obsahu špeciálnej „schránky“ do tabuľkového procesora. Tu musíme rozoznávať dve situácie. Prvá je, že sa nachádzame vo vnútri už existujúcej tabuľky – v tomto prípade prepíšeme jej obsah. Ak sa nenachádzame vo vnútri tabuľky, tak vytvoríme tabuľku novú s rozsahom, ktorý zodpovedá skopírovanej tabuľke z modulu Calc.

Vložená tabuľka do Writeru

Ešte uveďme, že ak sa nachádzame v už existujúcej tabuľke, makro skopíruje tabuľku od ľavej hornej bunky bez ohľadu na to, kde sme sa predtým nachádzali:

REM Makro pre skopírovanie tabuľky zo špeciálnej "schránky" do Writeru
sub Vytvor_tabulku_z_Calc_do_Writer
 dim dokument, kurzor, tabulka, bunka as object
 dim stlpec, riadok as long
 dim adresa as string
 
 REM Ak sme v textovom dokumente a veľkosť kopírovanej tabuľky je nenulová, tak
 if ThisComponent.supportsService("com.sun.star.text.TextDocument") and _
  stlpce_z_calcu_do_writer<>0 and riadky_z_calcu_do_writer<>0 then
  dokument=StarDesktop.CurrentComponent
  REM Nastavíme sa na aktuálne miesto v dokumente
  kurzor=ThisComponent.currentcontroller.getViewCursor()
  
  REM Ak nie sme v tabuľke, budeme vytvárať novú
  on error goto Nie_sme_v_tabulke

  REM Pokus o sprístupnenie tabuľky, v ktorej sa možno nachádzame
  REM Ak nie sme v tabuľke, vedie to k chybe - uplatní sa príkaz "on error goto Nie_sme_v_tabulke"
  tabulka=kurzor.TextTable
  
  REM Sme v už existujúcej tabuľke
  
  REM Nasledujúci test môžeme vynechať, ak nám nevadí, že sa prepíše iba časť tabuľky
  REM Ak má existujúca tabuľka iné rozmery, ako skopírovaná, tak to oznámime
  if tabulka.columns.count<>stlpce_z_calcu_do_writer or tabulka.rows.count<>riadky_z_calcu_do_writer then
   msgbox "Zdrojová tabuľka má iné rozmery ako cieľová!"
   REM a ukončíme makro
   exit sub
  endif
  
  mame_tabulku:
  REM Už máme určite tabuľku, môžeme do nej vkladať obsah "schránky"
  on error goto next
  
  REM Pre všetky riadky "schránky"
  for riadok=1 to riadky_z_calcu_do_writer
   REM a pre všetky stĺpce "schránky"
   for stlpec=1 to stlpce_z_calcu_do_writer
    REM Pripravíme si textovú adresu tabuľky 
    adresa=chr(64+stlpec)&riadok
    REM Nastavíme sa do bunky textovej tabuľky
    bunka=tabulka.getCellByName(adresa)
    REM A zmeníme jej obsah podľa "schránky"
    bunka.String= bunky_z_calcu_do_writer(riadok,stlpec)
   next stlpec
  next riadok
 else
  REM Ak sme nič v Calcu neuložili, oznámime to
  msgbox "V schránke nie je žiadna tabuľka."
 endif

 REM Ukončíme makro, lebo ďalej je vytvorenie novej tabuľky!
 exit sub
 
 Nie_sme_v_tabulke:
  REM Sme mimo tabuľky, pripravíme si novú
  tabulka=dokument.createInstance("com.sun.star.text.TextTable")
  REM Nastavíme jej rozmery
  tabulka.initialize(riadky_z_calcu_do_writer, stlpce_z_calcu_do_writer)
  REM a vložíme ju do dokumentu na aktuálnu pozíciu
  dokument.Text.insertTextContent(kurzor, tabulka, false)
  REM Vrátime sa nazad - už sme v tabuľke
  goto mame_tabulku
end sub

Oznam, že nemáme nič odpamätanéV prípade, že sa nachádzame v už existujúcej tabuľke, testovali sme aj jej stávajúci rozmer, pričom sme požadovali, aby bol totožný so skopírovaným rozsahom.


Oznam o inom rozmere tabuľky
Toto však nemusí každému vyhovovať. Pokiaľ niekto nechce toto testovať, stačí, ak si príslušnú časť dá ako komentár (pre prípad, že by makro chcel niekedy v tomto smere predsa len zmeniť):

  REM Sme v už existujúcej tabuľke
  REM Ak má existujúca tabuľka iné rozmery, ako skopírovaná, tak to oznámime
'  if tabulka.columns.count<>stlpce_z_calcu_do_writer or tabulka.rows.count<>riadky_z_calcu_do_writer then
'   msgbox "Zdrojová tabuľka má iné rozmery ako cieľová!"
'   REM a ukončíme makro
'   exit sub
'  endif

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í.

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
Plánovaná údržba v datacentre (20.09.2026) Oznamy
07. 09. 2026

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...

Čí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