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

#1 16. 3. 2014 02:34:55

rejze
Člen
Registrace: 9. 1. 2013
Příspěvků: 51

Proč je rozdíl jak sešit otevřu

Zdravim. Nevim co může být jinak,ale když otevřu sešit makrem,tak se mi neaktualizují odkazy na data v jiném sešitu. pokud tentýž sešit otevřu ručně všechno je správně.Jak na to? Díky.

Offline

#2 16. 3. 2014 15:46:25

neutr
Člen
Registrace: 8. 3. 2007
Příspěvků: 2,658

Re: Proč je rozdíl jak sešit otevřu

Je to tak. Existuje "pomalé" otevírání které vše synchronizuje a pak naproti tomu "simple", nebo také rychlé - správně asynchronní otevírání. Které otevře prakticky jen "data". Já se peru s podobnými problémy zejména od LO verze 4. Něco málo se dá vyčíst například ModulStarXFrameLoader Najeďte si na ModulStarIndex. Já mám několik maker na otevírání a nejlepší jsem našel zde :
MakraJapan_1
MakraJapan_2
MakraJapan_3
MakraJapan_4
MakraJapan_5
MakraJapan_6
MakraJapan_Calc_1
MakraJapan_Calc_2
      Nenechte se odradit tím jejich písmem. Je to nejúplnější zdroj maker jakou znám. Odlišují makra jak pro AOO, tak LO, nebo pro Calc, Writer, a nebo také Python, Javascript ap. Někdy bývají stránky nedostupné - jsou často inovované ale ještě se mi nestalo, aby nefungovaly všechny.
      PS - Musel jsem ty hyperlinky přepsat Fungoval jenom ten první. U těch ostatních jsem musel dát odkaz přímo na makra. Takže když tam skočíte musáte vyrolovat až nahoru, abyste viděli nabídku.


      Problém který řeším je v tom, že se někdy soubory otevřené jako hidden z nějakého důvodu uloží jako jen pro čtení (ReadOnly). Tam potom makro nefunguje. Někdy se stane, že to zablokuje při vlastních operacích a pak se musí dokument obnovit. Pokud to ale otevíráte jako viditelný soubor tak by takovéhle potíže být neměly. Existuje otevírání například shellem. Jde otevírat pomocí Open - Close ale chyby jsem našel v každém způsobu otevírání. Možná bych našel příčinu, ale doporučuji abyste si prostudoval dříve uvedené stránky Modulu Star - hesla jako Open, Load a podobně.

Editoval neutr (17. 3. 2014 05:56:34)


Pokud je Váš problém vyřešen, označte prosím svůj příspěvek za "VYŘEŠENÝ"
Zlepšíte tak orientaci na fóru při vyhledávání řešení problémů
JAK OZNAČIT TÉMA ZA VYŘEŠENÉ

Offline

#3 17. 3. 2014 02:56:46

rejze
Člen
Registrace: 9. 1. 2013
Příspěvků: 51

Re: Proč je rozdíl jak sešit otevřu

Z toho jsem nic nevykřesal. Začal jsem zkoušet aktualizaci makrem po otevření,ale z těch dvou co jsem objevil ani jedno nefunguje uspokojivě. jedno nedělá nic a druhé vyžaduje ruční zásah. Je nějaká možnost to vést tudy?
Ta makra jsou:

sub aktualizovat
rem ----------------------------------------------------------------------
rem define variables
dim document   as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

rem tento příkaz vyvolá ovládání linků a vyžaduje zásah
dispatcher.executeDispatch(document, ".uno:EditLinks", "", 0, Array())

rem tento nefunguje
dispatcher.executeDispatch(document, ".uno:RecalcPivotTable", "", 0, Array())

rem jinak jsou makra stejná


end sub

Editoval rejze (17. 3. 2014 02:57:50)

Offline

#4 17. 3. 2014 04:59:52

neutr
Člen
Registrace: 8. 3. 2007
Příspěvků: 2,658

Re: Proč je rozdíl jak sešit otevřu

Těch maker je tam určitě víc. Například jen v 6. odkazu je samotné UNO. Musím se omluvit moje původní odkazy byly špatně. Stránky mají dnes jinou strukturu nežli tehdy, když jsem si to poznamenal. Nyní skočíte přímo na makro a pak musíte vyrolovat nahoru kde je nabídka. Mne to ani nepozastavilo protože odkaz číslo 1 fungoval. Stránky často editují.

      Tyto stránky mají velikou přednost v tom, že jsou poznámkou odkazované na jednotlivé strukturální celky - například moduly UNO, IDE ap. V podstatě podle všech programových modulů Open Office. Jsou tam také červeně staré deklarace a nové.
      Já mám ve Firefoxu úplně vespod lištu vyhledávání výrazu (musíme zavolat z menu Firefoxu "úpravy" - "najít"), ale nevím jestli je to tak u všech prohlížečů. Takže najedeme na stránku a dole zadáme výraz. Je to podobné s vyhledáváním v LibreOffice. Doporučuji hledat všechny výrazy OPEN, LOAD a podobně. Jinak se nedopracujete nikam. Těch maker jsou opravdu stovky. Například jen v 6. odkazu je přes 40 se stejným názvem "oHowmanyServiceSupported". Takže najít co potřebujete chce trpělivost. Některá hesla najdete s jinými souvislostmi. Ubezpečuji Vás, že pod Vaším tématem bude několik desítek maker.

Editoval neutr (17. 3. 2014 05:35:28)


Pokud je Váš problém vyřešen, označte prosím svůj příspěvek za "VYŘEŠENÝ"
Zlepšíte tak orientaci na fóru při vyhledávání řešení problémů
JAK OZNAČIT TÉMA ZA VYŘEŠENÉ

Offline

#5 17. 3. 2014 15:20:35

rejze
Člen
Registrace: 9. 1. 2013
Příspěvků: 51

Re: Proč je rozdíl jak sešit otevřu

Toho písma si jde nevšímat. Bohužel všechno co se týká LOAD a OPEN používá prakticky stejnou metodu a výsledek je taky stejný. Škoda. Ještě mě napadla automatická aktualizace,ale to mi nejde nastavit. Je tam ruční a volby jsou zešedlý. Taky nelze vložit odkaz z menu. Vyberu soubor a OK zůstane zešedlý a dostupné oblasti prázdné. Tady taky netuším co je špatně. Každej začátek je těžkej. Komplet hotová věc je zatim jen kvuli tomuhle nepoužitelná.
Dík za ochotu.

Offline

#6 17. 3. 2014 17:44:44

neutr
Člen
Registrace: 8. 3. 2007
Příspěvků: 2,658

Re: Proč je rozdíl jak sešit otevřu

Já si pořád myslím, že v tom hledání se najít dá. Uvádím makro, které sice není asi úplně to co hledáte, ale ukáže Vám deklaraci podle které se můžete také orientovat.

Sub Main
 oNewDoc = StarDesktop.loadComponentFromURL("private:factory/scalc", "_blank", 0, Array() ) 
 oNSheets = oNewDoc.getSheets()
 oNSheet = oNSheets.getByIndex(0) 
 ' add link - tady vidíte MODE NORMAL
 oNSheet.link("/home/name/Desktop/LinkTest.ods", "List1","", "", com.sun.star.sheet.SheetLinkMode.NORMAL )
 ' remove link  - tady vidíte MODE NONE 
 oNSheet.setLinkMode(com.sun.star.sheet.SheetLinkMode.NONE )
End Sub

     Těch MODE bude dozajista více. Také byste měl hledat Property(value ap). Někde to určitě bude. Existuje ještě jiná možnost - nastavit v "Úpravy" > "Odkazy.." jiný režim načítání, například v časovém intervalu. Vy byste měl mít nastaveno "při načítání" nyní vlastně makrem "otevíráte bez plnohodnotného obnovení", ale časový interval by na tom měl být nezávislý a pravděpodobně 1. obnovení bude záhy po otevření. Otestujte jiné možnosti aktualizace dde (odkazy).


Pokud je Váš problém vyřešen, označte prosím svůj příspěvek za "VYŘEŠENÝ"
Zlepšíte tak orientaci na fóru při vyhledávání řešení problémů
JAK OZNAČIT TÉMA ZA VYŘEŠENÉ

Offline

#7 17. 3. 2014 21:09:48

rejze
Člen
Registrace: 9. 1. 2013
Příspěvků: 51

Re: Proč je rozdíl jak sešit otevřu

To nastaveni v casovem intervalu mi prave nejde zprovoznit. Volba automaticky je seda a nejde to prepnout. Ani mi nejde vytvorit odkaz na externi data z volby Vlozit Odkaz. Zatim jsem to vyresil tim,ze misto odkazu na databazi exportuju ty data makrem primo soucasne s exportem do databaze.

Editoval rejze (17. 3. 2014 21:12:34)

Offline

#8 21. 3. 2014 10:03:05

rejze
Člen
Registrace: 9. 1. 2013
Příspěvků: 51

Re: Proč je rozdíl jak sešit otevřu

Tak jsem objevil tohle http://flylib.com/books/en/4.290.1.141/1/ makro listing29 je myslim to co hledám. Zřejmě ale předávám špatně proměnné a hlásí mi to chybu "NoSuchElementException" a zastaví se na příkazu oSheets = oDoc.Sheets() Situace je že otvírám sešit pro vytvoření faktury,který mimo jiné obsahuje list s názvem faktury který obsahuje linky na databázi s fakturami.
Tohle je makro které tlačítkem spustí otvírání

REM  *****  BASIC  *****

global Dcesta as string, Dsoubor as string 'Dcesta je pracovní adresář Dsoubor volí co chci otevřít
global panfce as string

Sub Faktura 'otevřít novou fakturu

dim document as object, dokument as object, list as object
dim bunka_slozka as object, bunka_soubor as object
    'if panfce="" then 'ošetřuje že lze otevřít jen jednu možnost
    'panfce="faktura"
    'endif
    'if panfce="faktura" then  
document= ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
dokument=stardesktop.currentcomponent
list=dokument.sheets(0)
bunka_slozka=list.GetCellByPosition(8,35)'I36
Dcesta=trim(bunka_slozka.string)
bunka_soubor=list.GetCellByPosition(1,2)'B3
Dsoubor=trim(bunka_soubor.string)
ovladani.otevrit (""+Dcesta+""+Dsoubor+"")'Otevře sešit jako šablonu
ovladani.LinkAktu (Dcesta+"databáze/faktury.ods","faktury")'aktualizuje odkazy v listu faktury 
'ovladani.otevri ("/home/tomas/distribuce/šablony/faktura.ots")
'wait 5000
'ovladani.nastav_sablonu("faktura")
   'else
'msgbox("nejdříve ukončete práci na sešitu "+panfce+"",0,"PANEL")
   'endif
End Sub

Odtud předávám makru LinkAktu odkaz na sešit s databází a na list faktury v právě otevřené šabloně. Zřejmě tohle jsem nepochopil a LinkAktu mám předat buď jiné parametry,nebo jiným způsobem.

Makro LinkAktu:

Sub LinkAktu(optional odkaz as string, optional list as string)
  Dim oSheets          'The sheets object that contains all of the sheets
  Dim oDoc
  Dim oSheet  as object         'Individual sheet
  Dim oSheetEnum       'For accessing by enumeration
  Dim s As String      'String variable to hold temporary data
  Dim i As Integer     'Index variable
  Dim sURL As String   'URL of the document to import
  Dim oLink            'The link object

  sURL = ConvertToUrl(odkaz)
  oDoc = ThisComponent
  oSheets = oDoc.Sheets() 'tady se to zastaví a ohlásí zmíněnou chybu
  If oSheets.hasbyName(list) Then
    oLink = ThisComponent.SheetLinks.getByName(sURL)
    oLink.refresh()
    MsgBox ("List" +list+" byl aktualizován")
    Exit Sub
  End If
  oSheets.insertNewByName (list, oSheets.getCount())
  oSheet = oSheets.getByName(list)

  oSheet.link(sURL, "Sheetl", "", "", com.sun.star.sheet.SheetLinkMode.NORMAL)
 End Sub

Podle seriálu o makrech od Dana Sedláčka je to po tento příkaz správně,ale taky jsem se ze seriálu dozvěděl,že chyba nemusí být tam,kde se to zastaví.
Předem dík za další nasměrování,případně za značku slepá ulice.

Editoval rejze (21. 3. 2014 10:12:34)

Offline

#9 21. 3. 2014 12:34:34

neutr
Člen
Registrace: 8. 3. 2007
Příspěvků: 2,658

Re: Proč je rozdíl jak sešit otevřu

Já za chvilku jedu pryč a nemám čas to otestovat a opravit. Ale napadá mne z "voleje" špatná deklarace :
If oSheets.hasbyName(list) Then
Vy tam máte někde list pojmenovaný list - nebo tam máte List1...List5. Ono to tak může být. List se může jmenovat jak chce, ale explicitní nastavení je číslované List(číslo).


     Také stačí, aby makrodostávalo špatné parametry z přenosu otestujte toto
Sub LinkAktu(ByVal optional odkaz as string, optional list as string)
Přeji úspěch víc dnes nemohu - snad později z hlavy, ale tam nemám AOO, ani LO :-(

Editoval neutr (21. 3. 2014 12:36:05)


Pokud je Váš problém vyřešen, označte prosím svůj příspěvek za "VYŘEŠENÝ"
Zlepšíte tak orientaci na fóru při vyhledávání řešení problémů
JAK OZNAČIT TÉMA ZA VYŘEŠENÉ

Offline

#10 21. 3. 2014 13:10:21

rejze
Člen
Registrace: 9. 1. 2013
Příspěvků: 51

Re: Proč je rozdíl jak sešit otevřu

Díky teď mi zrovna došlo v čem je problém. Makro LinkAktu musí být voláno z makra ovladani.otevrit. Když jsem ho volal až po vystoupení z otevřít,bralo to jako ThisComponent sešit s tím ovládacím panelem a ne fakturu. Tedy to i velké díky Vám funguje.
EDIT:  Nakonec byl problém uplně jinde a byla to předčasná radost. Teď už to opravdu jde. Každopádně jsem musel smazat list ve kterém ty odkazy byly a nechat ho vytvořit tím makrem. Ty odkazy co jsem tam měl byly jiné povahy a to makro je neregistrovalo. Jen bych rád věděl jestli lze v tomhle případě nějak ošetřit v dalších listech ty REF co tam vzniknou když ten list smažu. Po vytvoření nového se to bohužel musí všechno ručně opravit a taky najít.

Editoval rejze (22. 3. 2014 12:56:18)

Offline

Zápatí