Fórum pro uživatele kancelářského balíku OpenOffice | LibreOffice
 

#26 Re: Calc » Záznam makra » 9. 3. 2010 00:11:57

Áno presne tak, zaznamenáva sa napríklad o koľko buniek sa posunie  nejakým smerom. A pokiaľ stlačíte Enter zaznamená napríklad JumpToNextCell.

#27 Re: Calc » ? Prenos hodnot z listov do listu statistika ? » 9. 3. 2010 00:06:49

Nie je mi presne jasné čo by ste potreboval no šlo by to asi tak, že pomocou funkcie transpose zmeníte tabuľku z riadkov na stĺpce poprípade pomocou tabuľky sprievodcu dátami a potom s ňou môžete ďalej pracovať. Alebo niekde na net zaveste dokument so zdrojom (nemusíte tam mať reálne dáta len pár fiktívnych) a dokument so štatistikou ako by mala vyzerať a pozriem sa na Vám to. Mimochodom ten vzorec Vám nemôže pracovať je tam nesprávna definícia čo testujete a aj návratová hodnota tak Vám to musí vracať #REF. Skôr by to pracovalo takto:=IF(C17="Január 2010";C17;0)
miro

#28 Re: Calc » LibraryNotLoadedException » 15. 2. 2010 09:03:31

Vaše makro by malo vyzerať nejako takto:

sub showDlg_1
DialogLibraries.LoadLibrary("Standard")
libStandard = DialogLibraries.getByName("Standard")
libDialog = libStandard.getByName("Dlg_1")
dlgFilter = CreateUnoDialog(libDialog)
Select Case dlgFilter.execute() 
    Case 1
       MsgBox "OK pressed"        
    Case 0 
       MsgBox "Cancel pressed"
    End Select    
dlgFilter.dispose()
end sub

Nebola nahratá knižnica a nebol na konci dialóg vymazaný.
miro

#29 Re: Calc » Presunut/kopirovat list » 8. 2. 2010 08:10:11

Ondra.kl napsal(a)

Samozřejmě je vhodné si tyto styly nadefinovat v šabloně výchozího dokumentu tak aby byly dostupné ve všech vytvořených dokumentech.

Máte pravdu, prekukol som to. smile

velvet napsal(a)

problém je právě v tom že nedojde k přenesení stylu. Např. ohraničení stránky mezi buňkami se sice tváří že se to přeneslo, ale první náhled tuhle iluzi zruší.

Ak mám tomu rozumieť tak, že v dokumente na monitore po prenose štýl vidno a po vyvolaní náhľadu stránky nie, tak problém bude v tom že sa nepreniesla definícia oblasti tlače a štýl strany.Vyskúšal som to, štýl buniek sa preniesol pekne, no štýl strany a oblasť tlače nie.Osobne by som to si riešil tiež makrom a to asi tak, že by som dal uložiť originál zošitu formou ulož ako (nový názov) a potom (nakoľko sú štýly už definované) len by som odmazal ostatné nepotrebné listy.
Miro

#30 Re: Calc » Presunut/kopirovat list » 6. 2. 2010 22:00:55

Možno by pomohlo vytvoriť si šablónu čistého zošitu, upraviť ju tak ako potrebujete a uložiť medzi šablóny. Potom kopírovať listy resp. obsah listov, do nového zošitu otvoreného na základe tejto šablóny.
Miro

#31 Re: Calc » Zlúčenie zošitov - Makro » 25. 1. 2010 01:18:07

Tak tu je ten sľúbený kód na "msgbox" ktorý sa zavrie za určitý čas. Už si to len uprav na funkciu

Ďakujem je to super zatiaľ som to neriešil a vďaka Tebe to už ani riešiť nemusím.
Skúšal som to ide to fajn,len som si pridal viac sekúnd a skrátil som čas (čakanie) na 80 tak ide ten progresbar plynulejšie.
Ani som sa poriadne na fórum ešte tento rok nepozrel (oddýchol som si od PC smile) a tak oddýchnutý už môžem zasa niečo "spáchať".
Ešte raz dík

#32 Re: Calc » Novy dokument - otvorenie » 24. 11. 2009 11:12:54

Ok už rozumiem, správanie pri otváraní cez kontext je nastavené vo win inde.
Večer sa na to pozriem.

Edit:
Takže som sa na to pozrel. Toto nastavenie ide zmeniť pravdepodobne len zmenou v registri a to v kľúči:

HKEY_USERS\S-1-5-21-839522115-2025429265-725345543-1003\Software\Microsoft\Windows\CurrentVersion\Explorer\Discardable\PostSetup\ShellNew
Sú tam súbory, ktoré sa vytvárajú ako nové pomocou kontextovej ponuky na prac ploche. Je tam kľúč OpenDocument Zošit ktorý je binárny ten pravdepodobne treba zmeniť.
No do tohto už nechcem rypkať, tak snáď nejaký windowsák Vám poradí.

#33 Re: Calc » soucet hodnot ve slopci A podle hodnoty v B » 24. 11. 2009 10:04:43

Ondra.kl napsal(a)

Podle toho co jste napsal je to funkce SUMIF - mrkněte do nápovědy, je to tam hezky popsáno.

ALE chcete něco jiného, chcete výpis IP adres, kdy každá bude uvedena pouze jednou a vedle ní bude součet hodnot ze sloupce B. Tohoto dosáhnete použitím kontingenční tabulky. (calc: data - průvodce daty - začátek)

Aj ja vidím najlepšie riešenie pomocou tabuľky sprievodcu dátami, no doplnil by som ešte, že je možné do nej vložiť aj počet výskytov.
Do riadkové polia -ip adresu
Do dátové polia _ip adresu a hodnotu
V dátových poliach na ip adrese zvoliť možnosti a zadať namiesto súčtu počet.
ip.png
vzorový súbor je tu http://www.lugesa.szm.com/moje/ip_vzor.ods

miro

#34 Re: Calc » Zlúčenie zošitov - Makro » 19. 11. 2009 22:17:15

Mimochodom toto som už skúšal no nedopadlo to dobre.
Alebo priradiť makro k udalosti Dokument zmenený.

Edit: a veruže už viem. Vlož si tam nad bunku (prekry ju) prvkom formulára napr. textové pole a ten prepoj s tou bunkou, tak aby to čo vložíš do pola sa menilo aj v bunke a potom na karte udalosti daj po aktualizácii, alebo si vyber čo chceš a priraď k tomu to makro.

#35 Re: Calc » Zlúčenie zošitov - Makro » 19. 11. 2009 22:15:35

NO myslím, že makro by muselo bežať od otvorenia dokumentu, kde by ako premenná bola práve sledovaná bunka a pokiaľ by sa jej obsah zmenil makro by zavolalo ďalšie makro , alebo func..
Bežiace makro by sa muselo stopnúť pri zatváraní dokumentu.
Asi tak. Myslím.

#36 Re: Calc » Novy dokument - otvorenie » 19. 11. 2009 22:01:57

Tak som sa na to pozrel pod windows no beží to v pohode, žiadne Vami udávané správanie som neregistroval.
Ešte ma napadá pozrite si ako je nastavené otváranie súborov .ots v sytéme (možnosti priečinka > typy súborov) nájdite príponu OTS a stlačte zmeniť. Malo by v tom okne byť poradie OpenOffice.org 3.0 (alebo Vaša verzia) a na druhom mieste scalc.
Ak stlačíte spresniť malo by byť poradie akcií Nový ,open , print a printto.
Osobne si myslím, že je to v systéme a nie v OOo.

#37 Re: Calc » Zlúčenie zošitov - Makro » 19. 11. 2009 21:34:38

No pekné, ešte by som dal na záver nejaký
msgbox("Listy vami vybratých dokumentov boli zlúčené do nového dokumentu",0,"Zlúčenie listov")'hláška
Otázočka - nevieš ako msgbox zavrieť makrom za nejaký čas (napr. 5sec)?
Inak kopírujem Tvoje makro, ak by sa mi z neho v budúcnosti niečo hodilo.
Miro

#38 Re: Calc » Zlúčenie zošitov - Makro » 19. 11. 2009 10:09:36

S tikaním nie je problém, pokiaľ to nie je niekde v kufríku na hlavnej stanici. smile smile smile
Pekné, páči sa mi hlavne ten spôsob otvorenia ( že to "nepláca" na plochu).
No Ty kopíruješ listy z už uložených dokumentov. Ja som myslel a začal riešiť otvorené dokumenty a to aj pokiaľ neboli ešte uložené.
Ďakujem, že si sem hodil ten kód, je dobré vidieť aj, ako to riešia iný.
Miro

#39 Re: Calc » Novy dokument - otvorenie » 19. 11. 2009 09:12:53

No z Vašeho prvého príspevku som pochopil, že to máte pod platformou Windows.
Momentálne neviem vyskúšať Vami uvedené správanie, lebo teraz som pod Linuxom (no večer sa na to pozriem).
Toto správanie by ste mohli vyriešiť nasledovne:
Otvorte si čistý dokument, zadajte si formátovanie, aké chcete aby mali nasledovné dokumenty, ktoré budete otvárať podľa šablóny. Uložte si tento dokument vo formáte šablóny (v tomto prípade napríklad čistý.ots) Tento si uložte do Vašej zložky zo šablónami.
Podľa popisu vyššie si ho nastavte, ako východziu šablónu. (už nemusíte importovať, súbor bude v ponuke moje šablóny).
Pokiaľ by sa ani teraz neupravilo správanie pri otváraní, tak si jednoducho vytvorte odkaz na tento súbor buď v ponuke štart,na spodnej lište (myslím, že panel rýchleho spúšťania), alebo na ploche a otvárajte nové dokumenty pomocou tohoto odkazu.

#40 Re: Calc » Zlúčenie zošitov - Makro » 17. 11. 2009 17:18:08

Žiaľ áno, je to pravda, že na zložitejšie problémy ohľadom makier je tu dosť málo odpovedí.
A pokiaľ sa pamätám bolo to tak aj predtým (hoci som to tu navštevoval, len sporadicky).
Makrám sa venuje menej ľudí a myslím, že to tu skôr navštevujú bežný užívatelia. (no a ešte začínajúci, ktorý potrebujú nájsť jednoduchšie veci)
PS:Zaujímalo by ma, ako ste to vyriešil Vy. Ak by som neobťažoval, mohol by ste mi poslať kód na e-mail?
Ďakujem

#41 Re: Calc » Zlúčenie zošitov - Makro » 17. 11. 2009 02:12:05

No vidím že ste "vykuchal" AndrewMacro.
Nemám kompletné riešenie, len čiastočné možno to niekto dotiahne, kým sa k tomu opäť dostanem (lebo už zaspávam) smile

sub uloz_listy
uloz_listy_do_jedneho_zositu("/home/miro/dokumenty/test.ods")'tu zmeň cestu k tvojmu novému zošitu do ktorého sa skopírujú listy
end sub

sub uloz_listy_do_jedneho_zositu(optional cesta as string)
dim oDoc, eDocs,oSheet,oNovy_list ,oDoc_novy,oZosit  as object, i,list as integer, sURL,sCesta,nazov as string
list=0
 sURL = "private:factory/scalc"
  set oDoc_novy = StarDesktop.loadComponentFromURL(sURL, " ", 0, Array())'vytvor novy zosit
uloz_ako(cesta)
set eDocs = StarDesktop.Components.CreateEnumeration' vytvor kolekciu otvorenych dokumentov
  on error goto DALSI
  do while eDocs.hasMoreElements ' prejdi kolekciu dokumentov
    set oDoc = eDocs.NextElement 
     if oDoc.ImplementationName="ScModelObj" then ' pokiaľ je to zošit
         if (ConvertFromURL(oDoc.URL))=cesta then ' a tento zošit to nemôže byť, lebo do toho kopírujeme
         
         else 'nie je to zošit do ktorého sa kopíruje 
         msgbox oDoc.URL 'cesta niektorého otvoreného zošitu za týmto vložiť podmienku pokiaľ by bol otvorený zošit ešte neuložený zobrazí cestu prázdnu
    
    oDoc.CurrentController.Frame.activate  
    nastav_subor(oDoc.CurrentController.Frame.Title)
    current= oDoc.CurrentController.Frame.Title

'tak a teraz prejdi listy
  with  ThisComponent.Sheets
    for i = 0 to .Count -1
      set oSheet = .GetByIndex(i)
meno=oSheet.Name
print meno
vyber(meno)
'zkopiruj
'gosub vloz_do_testu
next i
end with
end if       
end if
DALSI:
  loop
uloz_zosit("/home/miro/dokumenty/test.ods")
exit sub

vloz_do_testu:
ovladanie.nastav_subor("test")
vyberlb(list,"A1")
vloz
list=list+1
ovladanie.nastav_subor(current)
return
 end sub

sub zkopiruj
dim oDoc,oDisp as object
oDoc= ThisComponent.CurrentController.Frame
oDisp=createUnoService("com.sun.star.frame.DispatchHelper")
oDisp.executeDispatch(oDoc, ".uno:Copy", "", 0, Array())'zkopírovanie dát do schránky
'msgbox("zkopírované",0,"Oznam")
end sub

sub vyber(optional list as string)
dim oSheet,oCell as object, bunka as string
oSheet= ThisComponent.Sheets.getByname(list)
oCell = oSheet.getCellRangeByName("A1:AMJ65536")
ThisComponent.getCurrentController.select(oCell)
end sub

sub vyberlb(optional list as string,optional bunka as string)
dim oSheet,oCell as object
oSheet= ThisComponent.Sheets.getByIndex(list)
oCell = oSheet.getCellRangeByName(bunka)
ThisComponent.getCurrentController.select(oCell)
end sub

sub vloz 'číslo,formát,text,dátum
dim dispatcher,document as object
dim vloz(5) as new com.sun.star.beans.PropertyValue
vloz(0).Name = "Flags"
vloz(0).Value = "SVDT"
vloz(1).Name = "FormulaCommand"
vloz(1).Value = 0
vloz(2).Name = "SkipEmptyCells"
vloz(2).Value = false
vloz(3).Name = "Transpose"
vloz(3).Value = false
vloz(4).Name = "AsLink"
vloz(4).Value = false
vloz(5).Name = "MoveMode"
vloz(5).Value = 4
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
set document= ThisComponent.CurrentController.Frame
dispatcher.executeDispatch(document, ".uno:InsertContents", "", 0, vloz())'vloženie dát ako čísiel zo schránky
'msgbox("vložené",0,"Oznam")
end sub

sub nastav_subor(optional nazov as string)'nastaví hladaný otvorený zošit
dim oDesk, oFrames, oFrame,oDoc,oActivny as object, sURL,nazov1 as string,i as integer
  set oDesk = StarDesktop
  set oFrames = oDesk.Frames
  for i=0 to oFrames.Count - 1
  set oFrame = oFrames.getByIndex(i)
     nazov1=oFrame.Title
    if nazov1=nazov then    
     oFrame.activate 
     oActivny=oFrame.ComponentWindow
     oActivny.setFocus   
    ' msgbox "pravda"
    else
   ' msgbox "nepravda"
 ' msgbox oFrame.Title 
    end if
  next i
end sub

sub uloz_zosit(optional cesta as string)
dim oDoc, eDocs as object
  set eDocs = StarDesktop.Components.CreateEnumeration' vytvor kolekciu otvorenych dokumentov
  on error goto DALSI
  do while eDocs.hasMoreElements ' prejdi kolekciu dokumentov
    set oDoc = eDocs.NextElement 
     if oDoc.ImplementationName="ScModelObj" then ' pokiaľ je to zošit   
      if(ConvertFromURL(oDoc.URL))=cesta then ' a je to hladany zošit
        oDoc.Store() ' tak ho uloz
        oDoc.Close(true) ' a zavri
        exit sub '  končíme
      end if
    end if
DALSI:
  loop
end sub

sub uloz_ako (optional cesta as string)'ak dokument zmením ale chcem ho uložiť pod iným menom
dim oDoc as object
on error goto chyba
  oDoc=ThisComponent
  with oDoc    
        .storeAsURL(ConvertToURL(cesta), Array()) ' ulozit ako
  end with
  exit sub
chyba:
  msgbox("chyba!!!",0,"Chyba uloz_ako")
stop
end sub

Snáď vám to pomôže makro mi však zastane pri druhom zošite na prvom liste - treba sa s tým pohrať.
Makro najskôr otvorí nový zošit, potom ho uloží ako test.ods. Ďalej začne prechádzať otvorené zošity a pri prvom nájdenom začne prechádzať jeho listy a kopírovať ich pomocou schránky do listov v zošite Test.ods. (tu je potrebné dorobiť vloženie ďalších listov do tohoto súboru - toľko koľko bude potrebné na kopírovanie, takže ak sa skopírovalo na posledný list vložiť ďalší čistý).Ďalej je potrebné doladiť makro, resp nájsť chybu prečo zostane na druhom zošite.
Na koniec makro uloží dokument Test.ods.
No snáď to pomôže, ak budem mať viac času tak sa stým ešte pohrám.:)

#42 Re: Calc » Novy dokument - otvorenie » 17. 11. 2009 01:45:47

Skúste Súbor | Šablony >Usporiadať...
Označte si moje šablóny, stlačte tlačidlo Príkazy a tu vyberte Importovať šablónu...
Teraz vyberte dokument, ktorý ste vytvoril.
Označte si importovanú šablónu a opäť stlačte Príkazy a zadajte Nastaviť ako východziu šablónu.

No pokiaľ ten dokument nechcete mať ako východziu šablónu ten druhý krok samozrejme vynechajte

#43 Re: Calc » Export listu do html. » 21. 5. 2009 13:22:21

Ǎno, skúste použiť  nasledovné makro, ktoré možete priradiť k tlačítku, alebo si ho umiestnite niekam do menu a samozrejme tie názvy v prvom makre si doplňte:

sub export_list
SheetToHTML("názov listu ktorý chcem uložiť","/media/hda5/firma/web/názov a cesta súboru pod ktorým to chcem uložiť.html")
end sub

sub SheetToHTML(optional sSheetName as string,optional subor as string,optional sRange as string,optional sOrientation as string)
dim i as integer
dim arg(0) as new com.sun.star.beans.PropertyValue
dim PA() as object
dim CRA(0) as new com.sun.star.table.CellRangeAddress
' skryta vychozi objektova promenna
  with ThisComponent.Sheets
  ' Pokud je to nutne nastav vychozi parametry
    if IsMissing(sSheetName) or sSheetName = "" then sSheetName = .getByIndex(.Count-1).Name
    if IsMissing(subor) then subor = "/media/hda5/testHTML.html" ' aj tu si cestu upraviť         
    if IsMissing(sRange) then sRange = ""
    if IsMissing(sOrientation) then sOrientation = ""
  ' Nastav orientaci stranky
    arg(0).Name = "PaperOrientation"
    with com.sun.star.view.PaperOrientation
      select case lcase(sOrientation)
        case "portrait"
          arg(0).Value = .PORTRAIT
          ThisComponent.Printer =arg()
        case "landscape"
          arg(0).Value = .LANDSCAPE
          ThisComponent.Printer =arg()
      end select
    end with
    dim bVisible(.Count-1)
  ' Priprava listu pro vystup do html
    for i = 0 to .Count-1
      with .getByIndex(i)
      ' uloz viditelnost listu
        bVisible(i) = .IsVisible
      ' uloz oblasti tisku
        redim preserve PA(i)
        PA(i) = .PrintAreas
      ' zrus oblasti tisku
        .PrintAreas = array()
        if .Name = sSheetName Then
        ' Zadany list bude viditelny
          .IsVisible = true
        ' Dle potreby se nastavi oblast tisku,
        ' pro neexistujici adresu ale preskoc
          on error goto ERR_NEXT
          if sRange <> "" then
            CRA(0) = .getCellRangeByName(sRange).RangeAddress
            .setPrintAreas(CRA())
          end if
ERR_NEXT:               
          on error goto 0
        else
        ' Skryj nezadouci listy
          .IsVisible = false
        end if
      end with
    next i
  ' Uloz vybrany list do html
    arg(0).Name = "FilterName"
    arg(0).Value = "HTML (StarCalc)"
    ThisComponent.storeToURL(ConvertToUrl(subor), arg())
  ' Vraceni vsech listu do puvodniho stavu
    for i = 0 to .Count-1
      with .getByIndex(i)
      ' Zobraz puvodni listy
        .IsVisible = bVisible(i)
      ' Nastav puvodni tiskove oblasti
        .PrintAreas = PA(i)
      end with
    next i
  end with
end sub


miro

#44 Re: Calc » Number Format - jak sestavit » 11. 5. 2009 12:06:30

a skúšal ste aj podmienené formátovanie?
Tam by to asi šlo nadefinovať.
Myslím do podmieneného formátovania nadefinovať vzorec a je to v reálnom čase .

#45 Re: Calc » prechod medzi dokumentami » 20. 1. 2009 08:06:08

j-pastierik napsal(a)

Super, ja mám tento problém: potrebujem zatvoriť súbor, ktorý je otvorený a prepnúť sa do pôvodného. Ako vidím, tak to asi dokážem teraz vyriešiť - najprv sa prepnem do pôvodného a potom zatvorím ten druhý:
oSubor.store() ' uloží zmeny
oSubor.dispose() ' zatvorí súbor

xray je dobrý pomocník, ale niekedy je to na dlhé hľadanie :-)

Ja to tak nerobím, ale zatváram ho hneď (neprepínam sa do pvôvodného).
Mám to tak,že skopírujem dáta z pôvodného dokumentu v ktorom pracujem  potom otvorím dokument ktorý mi slúži ako databáza tam vložím údaje uložím a zavriem a potom uložím a zavriem pvôvodný. Toto mi v pohode šlo aj predtým.
Tento problém (s prepínaním) mi vznikol až vtedy keď som potreboval skopírovať z pvôvodného dokumentu nejaké dáta dva krát(rozdielne) nešlo to a preto som musel hľadať riešenie ako ho znovu aktivujem.

PS:mám narobených dosť univerzálnych makier pre Calc na otváranie, zatváranie,uloženie, uloženie ako,prepínanie medzi listami, vkladanie do buniek,zoradenie dát a iné.
Niekde to môžem zakvačiť.Poprípade ak by mi tu povolili blog mohol by som to dať tam:)
Alebo čo tak pokračovanie Vášho seriálu tentoraz pre calc?

Nejaké makro na zatváranie a ukladanie zošitov kde sa netreba prepínať do iného dokumentu zavrie ho aj keď je aktívny:

takže makro sa volá s parametrom cesta (windowsáci si ju samozrejme zmenia na trebárs C:\ atd.)

sub makro
uloz_zosit("/media/................/databázy/cenníky.ods") 
end sub

sub uloz_zosit(optional cesta as string)
dim oDoc, eDocs as object
  set eDocs = StarDesktop.Components.CreateEnumeration' vytvor kolekciu otvorenych dokumentov
  on error goto DALSI  'ak by bola chyba
  do while eDocs.hasMoreElements ' prejdi kolekciu dokumentov
    set oDoc = eDocs.NextElement 
     if oDoc.ImplementationName="ScModelObj" then ' pokiaľ je to zošit   
      if(ConvertFromURL(oDoc.URL))=cesta then ' a je to hladany zošit
        oDoc.Store() ' tak ho uloz
        oDoc.Close(true) ' a zavri
        exit sub '  končíme
      end if
    end if
DALSI:
  loop
end sub

#46 Re: Calc » Hodnoty pre makro "Štandardný filter" » 19. 1. 2009 13:53:24

Skúste túto stránku http://members.chello.cz/ladinek/ooo/ca … kra04.html
V spodnej časti je popis  a fungovanie filtrov.
PS: filtre nejdu nahrať záznamníkom makier (nefungujú). Takže si treba makro napísať, alebo upraviť makro zo záznamníka.

Ešte poznámočka hodnoty filtrov ide zadať viacerími spôsobmi.
1)Zadať do bunky zošitu pred spustením makra a makro si hodnotu načíta keď ho spustíš.
2)Hodnota je zadaná priamo v makre, alebo za behu makra a pomocou msgbox a vetvenia makra si vyberieš určenú hodnotu (malo by to ísť zadávať aj cez inputbox)

#47 Re: Calc » prechod medzi dokumentami » 19. 1. 2009 08:20:03

j-pastierik napsal(a)

Je to trochu ťažší oriešok - OO.o. sa po otvorení súboru doň prepne a jeho zavretím "ste vo vzduchu". Mne napríklad blblo rozšírenie, kde som súbor zavrel - zhavaroval OO.o, lebo sa nedokázal prepnúť do pôvodného dokumentu, z ktorého bolo makro volané. Iné riešenie zatiaľ nepoznám ako je manuálne zatváranie dokumentov.

Už to mám:
Takto aktivujem dokument ktorý chcem , ide to podľa názvu a nie cesty

takže makro sa volá s parametrom nazov

sub makro
nastav_subor("ceny")'ceny je napríklad ten názov súboru z ktorého bolo pôvodne spustené makro ,ale už nie je aktívny
end sub

samotné makro:

sub nastav_subor(optional nazov as string)'nastaví hladaný otvorený zošit
dim oDesk, oFrames, oFrame,oDoc,oActivny as object, sURL,nazov1 as string,i as integer
  set oDesk = StarDesktop
  set oFrames = oDesk.Frames
  for i=0 to oFrames.Count - 1
  set oFrame = oFrames.getByIndex(i)
 	nazov1=oFrame.Title
    if nazov1=nazov + ".ods - OpenOffice.org Calc" then    
     oFrame.activate 
     oActivny=oFrame.ComponentWindow
     oActivny.setFocus   
    ' msgbox "pravda"
    else
   ' msgbox "nepravda"
 ' msgbox oFrame.Title 
    end if
  next i
end sub

PS:s tým ComponentWindow mi pomohol mr. xray smile

#48 Re: Calc » prechod medzi dokumentami » 16. 1. 2009 09:56:16

No samotné otváranie zatváranie dokumentov mi nerobí problémy na to mám urobené makrá.
Problém je v tom že keď otvorím dokument a chcem z neho nakopírovať niečo do dokumentu z ktorého bolo volané makro tak vtedy mi to ostane visieť hoci dokument ktorý som otvoril zavriem.Zaujímavé je že keď tam ten msgbox nechám aktívny a odkliknem ho tak to funguje a makro beží ďalej.No musí byť otvorené len okno z ktorého bolo makro volané.
No nič asi sa budem musieť nejako potrápiť.
Sú tri makrá na prechádzanie dokumentov a okien skúsim ich využiť.

sub ProjdiOkna 
dim oDesk as object, oFrames as object, oFrame as object
dim i as integer
  set oDesk = StarDesktop
  set oFrames = oDesk.Frames
  for i=0 to oFrames.Count - 1
    set oFrame = oFrames.getByIndex(i)
    msgbox oFrame.Title 
  next i
end sub

 sub ProjdiSesity
  dim oDoc, eDocs as object
   set eDocs = StarDesktop.Components.CreateEnumeration
   on error goto DALSI
    do while eDocs.hasMoreElements
    set oDoc = eDocs.NextElement
      if oDoc.ImplementationName = "ScModelObj" then
      xray odoc
      oDoc=CurrentController.Frame
      oDoc.initialize
        msgbox oDoc.URL & " >> " & oDoc.CurrentController.Frame.Title
      end if
  DALSI:
    loop
  end sub

sub ProjdiKomponenty
dim eComponents as object, oDoc as object
  set eComponents = StarDesktop.Components.CreateEnumeration
' Jedna z komponent Nápovědy nepodporuje ImplementationName
' proto obslouzime pripadnou chybu
  on error goto DALSI
  do while eComponents.hasMoreElements
    oDoc = eComponents.NextElement
    msgbox oDoc.ImplementationName
DALSI:
  loop
end sub

#49 Calc » prechod medzi dokumentami » 15. 1. 2009 15:04:07

Mirozm
Odpovědí: 6

Mam taký problém:
mám otvorený dokument z neho spustím makro ktoré mi skopíruje nejaké dáta ,otvorí ďalší dokument a vloží ich do neho uloží ho a zavrie. No potom by som chcel z pôvodného dokumentu zas niečo kopírovať a robiť s tým inú operáciu ,ale neviem ako ho zaktivovať.

sub vlozit
dim document, dispatcher object

document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
' kopírovanie dát na export
	with ovladanie
		.vyberlb("export","A1:C4901")
		.zkopiruj
		.vyberlb("ceny")
		rem ------export dát----------------------- zošit č.2----(do šablony faktúra)
		.otvor("/media/................/faktúra.ots")'otvorenie dokumetu 
		.uloz_novy_zosit("/media/............/faktúra.ots")
		.vyberlb("cena","D1")
		.vloz
		.vyberlb("faktúra")
		.uloz_zosit("/media/............/faktúra.ots") 
   		
potialto to ide dobre
                        .nastav_subor("/media/.............../ceny.ods") - Tu je problém 
                        .vyberlb("ceny","A1:E4901")
                        .zkopiruj

		.otvor("/media/.............../cenníky.ods")'otvorenie dokumetu 
		.vyberlb("ceny","A1")
		.vloz
		.uloz_zosit("/media/............../cenníky.ods")
	end with
end sub 

takže skusil som niečo ako toto,(nastav_subor) lebo po uložení tej faktúry mi už nechce robiť operácie v pôvodnom dokumente "ceny" ale vypíše mi error
Takže môj pokus:

sub nastav_subor(optional cesta as string)'nastaví hladaný otvorený zošit
dim oDoc as object, eDocs as object
  set eDocs = StarDesktop.Components.CreateEnumeration' vytvor kolekci otevrenych dokumentu
  on error goto DALSI
  do while eDocs.hasMoreElements ' projdi kolekci dokumentu
    set oDoc = eDocs.NextElement 
     if oDoc.ImplementationName="ScModelObj" then ' pokud je to sesit   
      if(ConvertFromURL(oDoc.URL))=cesta then ' a je to hledany sesit neviem co tu mam dať aby som inicializoval dokument
      
      oDoc.initialize '?
rem set oDoc = StarDesktop.ActiveFrame ?
rem set oDoc = this component ?
                ' msgbox("súbor nájdený",0,"Databáza")'hláška
        exit sub ' udelali jsme co jsme chteli, koncime
      end if
    end if
DALSI:
  loop
end sub

Zápatí

Používáme FluxBB