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

#1 30. 10. 2020 11:33:41

ludviktrnka
Člen
Registrace: 9. 7. 2009
Příspěvků: 697

přechod win7 > win10 - VYŘEŠENO

Dobrý den, nevíte zda neexistuje nějaký nástroj na korekci nebo test BASIC maker pro LO? Ve Win7 jsem používal LO 6... a vše fungovalo, teď jsem si ve Win10 nainstaloval LO 7 a soubor se ani neotevře (při startu spadne) to stejné ve win10 a LO 6. Až tepreve LO 5.4.7.2 (ve Win10) to vypadá že to funguje. Moje makra jsou, přiznávám, trochu divoká, nicméně že by nutně musel soubor padnout ještě před startem, to se mi samozřejmě moc nelíbí. LO 6 a dále v kombinaci s win10 musí mít nějakou nadstandardní ochranu - nedá se někde vypnout? :-)

Editoval ludviktrnka (31. 10. 2020 15:38:40)


LibreOffice 5.4.

Offline

#2 30. 10. 2020 21:13:43

kamlan
Člen
Registrace: 15. 9. 2016
Příspěvků: 368

Re: přechod win7 > win10 - VYŘEŠENO

Myslím že někde ve verzi 6.něco bylo uděláno striktnější parsování Basic kódu, zmiňoval to snad někdo v nějakém tématu na http://ask.libreoffice.org, ale fakt už nevím kde přesně to bylo. Nicméně narazil jsem na to též, byť ne ve svých makrech ale při úpravách maker od jiných autorů. To starší parsování občas dovolilo vykonat kód i s nějakou drobnou chybou, kdežto to novější to musí mít zcela správně. Nepamatuji si přesně jaký byl příklad, myslím že třeba když byl příkaz MsgBox() rozdělen na více řádků pomocí podtržítek, tak na posledním řádku nemusela být dána uzavírací závorka a přesto se vykonal.

Msgbox("vypiš něco", _
16

Asi 2x nebo 3x jsem hlásil na bugzillu pád celého Libre díky makru, zmiňoval jsem něco i někde pod článkem zde na webu - fakt to byly dost brutální pády na jednoduchých věcech v makru - ale už si nevybavuji kde jsem to komentoval a není to nyní potřeba. Jednou to bylo snad díky tomu, že vlastnosti objektu ještě nebyly naplněné (byl nově vytvořený), ale již se zkoušela nějaká vlastnost testovat na nějakou hodnotu. Něco se táhlo také již z verze 3.3 a já byl první kdo na chybu po letech narazil, reprodukoval a nahlásil. Ale vše to bylo již opraveno.


Také jsem se setkal s tím, že ve starší verzi makro běželo, ale v novější verzi Libre již ne. Odkrokovával jsem to v Basic editoru a dokrokoval k funkci která vyvolávala chybové hlášení. Pak jsem tu funkci vyhledal v SDK dokumentaci a byla uvedena již jako deprecated (zavržená) a tak ji stačilo nahradit novou tam uvedenou funckí pro onu vlastnost, která však měla nově navíc další parametr -> a pak to šlo.


Jenže co s tím ve vašem případě, že? Jestli vám ten soubor jde otevřít ve verzi 5.4, tak bych tam v té verzi šel do Basic editoru a ta makra nandal do jednoho modulu a ten si vyexportoval do BAS souboru. Pak z toho souboru ta makra odstranil aby byl úplně bez maker. Bez maker by měl jít snad otevřít ve verzi 7 - zkuste kdyžtak 7.0.3.1 z pre-releasů, ta mi zatím běhá pěkně (7.0.2 a 7.0.1 mi v něčem blbly, třeba někdy zamrzal Basic editor ale nějak spíš náhodně a nedokázal jsem to reprodukovat). Bez maker by vám zřejmě ten soubor měl jít otevřít. No a v Basic editoru si vytvořte nějaký modul a naimportujte tam ten BAS soubor. Pak to zkompilujte (menu Spustit/ Zkompilovat) a mělo by vám to zahlásit případné chyby které třeba starší parser ignoroval. No a pak potřebná makra spouštějte. Pokud padne Libre, tak to nahoďte znovu a makro krokujte, mělo by jít alespoň krokovat postupně až do toho pádu. Pak by to třeba bylo na nahlášení na bugzillu.

Offline

#3 31. 10. 2020 00:04:47

ludviktrnka
Člen
Registrace: 9. 7. 2009
Příspěvků: 697

Re: přechod win7 > win10 - VYŘEŠENO

TO kamlan: Díky, zkusil jsem to. Našel jsem takové spíše řekl bych marginální chyby (např. nyní vyžaduje u adresy convertToURL, před tím to šlo bez toho pokud byla adresa bez divnoznaků), nicméně tedy zafungovalo to. Ještě to není hotové, ale určitě to je cesta. Akorát ten příkaz "Zkompilovat" nějak nereaguje - co by měl přesně dělat? Rozhodně mi nenašel žádnou chybu. Zkoušel jsem to prostě prostupným spouštěním jednotlivých maker.


LibreOffice 5.4.

Offline

#4 31. 10. 2020 07:58:19

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

Re: přechod win7 > win10 - VYŘEŠENO

Potvrzuji problémy pod W10. Makra jsou pomalejší nežli například pod W7. Myslím si, že příčina je v tom, že LO akceptuje mimo jiné i syntaxi VBA. Také základní funkcionality jsou psány většinou v Pythonu, C- čku a podobně protože je postupně odbourávána Java.


     Tyhle "různosti" se křižují v UNO. Myslím si, že nás to tlačí k deklaracím OPTION EXPLICIT. Pokud to bude vyhovovat podmínkám OPTION EXPLICIT mělo by to fungovat. To ale dostatečně nevysvětluje pád souboru při spuštění. Příčinou by mohlo být nastavení firewallu, respektive nějakého antiviru - například Defenderu


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

Offline

#5 31. 10. 2020 10:22:04

kamlan
Člen
Registrace: 15. 9. 2016
Příspěvků: 368

Re: přechod win7 > win10 - VYŘEŠENO

@ludviktrnka: ta kompilace je jako v jakémkoliv jiném jazyku, napsaný kód si to zkomplikuje do strojové formy - nebo možná ne přímo do strojové formy ale do formy kterou pak vykoná nějaký Libre provaděč maker. Když makro spustíte tak se to zkompiluje do této formy a pak spustí. No a samotná kompilace to jen zkompiluje aniž by to spouštěla. Ale právě při tom kompilování to kontroluje nějaké syntaktické chyby a vypisuje na ně chybové hlášky. Tudíž když vám to nic neprovede/nevypíše, tak máte kód syntakticky správně.

Editoval kamlan (31. 10. 2020 10:22:50)

Offline

#6 31. 10. 2020 11:08:52

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

Re: přechod win7 > win10 - VYŘEŠENO

kamlan napsal(a)

@ludviktrnka: ta kompilace je jako v jakémkoliv jiném jazyku, napsaný kód si to zkomplikuje do strojové formy - nebo možná ne přímo do strojové formy ale do formy kterou pak vykoná nějaký Libre provaděč maker. Když makro spustíte tak se to zkompiluje do této formy a pak spustí. No a samotná kompilace to jen zkompiluje aniž by to spouštěla. Ale právě při tom kompilování to kontroluje nějaké syntaktické chyby a vypisuje na ně chybové hlášky. Tudíž když vám to nic neprovede/nevypíše, tak máte kód syntakticky správně.

     S tímhle vysvětlením spíš nesouhlasím. Závadnost souboru a jeho odstavení obstarává ochrana stroje. Kompiler by měl do hry vstupovat až po spuštění makra. Existuje možnost, že makro se spouští při startu - pak ano. Nastavení ochran zajišťuje nastavení v LO (AOO) - úroveň vysoká, nízká, povolený adresář ap.
     Při popisovaném chování by se mělo objevit hlášení o chybě v kódu který vystaví Basic. Ochrana ve W10 je tak paranoidní, že deklasuje funkce kancelářské aplikace LO (AOO). Takže dle mne jde o nastavení ochran OS. Problém je asi v tom, že OS při spouštění rozpozná Basic a nechá ho zkontrolovat jako VBA.


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

Offline

#7 31. 10. 2020 12:35:08

kamlan
Člen
Registrace: 15. 9. 2016
Příspěvků: 368

Re: přechod win7 > win10 - VYŘEŠENO

@neutr: ona je otázka jestli ten soubor shazuje systém nebo jestli se shazuje samo Libre :-). Když je chyba v basic kódu tak to většinou spustí Basic editor a zahlásí to nějakou chybu. Ale už jsem zažil, že na jednoduché chybě v kódu makra spadlo celé Libre aniž by to cokoliv zahlásilo, dokonce to nezahlásilo ani tu hlášku že Libre havarovalo a jestli chce uživatel odeslat chybové hlášení.


Připadalo mi že je možné, že ludviktrnka v tom souboru po startu spouští nějaké makro, ale nějaký libre-bug shodí Libre. Jenže kdyby to tak bylo, tak by mělo Libre nejspíš padnout i po spuštění či krokování toho makra v Basic editoru, což jak psal Ludvík se zatím neděje.


Ta možnost že to shazuje Win10 je také (byť mě nenapadla), jenže to by Ludvík musel ten soubor nasdílet abychom to třeba též zkusili. Otázkou ovšem je, jestli těmi makry třeba netahá data z nějaké databáze apod., čímž by to na jiném stroji bylo nereprodukovatelné. Ale snad dá autor vědět kam se dopracoval, zda-li to po těch drobných úpravách marginalit začne fungovat nebo bude dál blbnout, když se to opět dá do souboru.

Offline

#8 31. 10. 2020 13:37:13

ludviktrnka
Člen
Registrace: 9. 7. 2009
Příspěvků: 697

Re: přechod win7 > win10 - VYŘEŠENO

Asi je to ještě trochu složitější. Mám ručně psané funkce které jsou součástí sešitu, takže pokud se sešit při otvírání přepočítává (nevím) tak se v tom Libre hrabe hned po startu (ale ty funkce jsou poměrně jednoduché). Nicméně závěr je že se mi nakonec podařilo na LO 7.03. rozjet i ten původní soubor. Do Win jsem doinstaloval C++ (nevím zda to mohlo mít přímý vliv, ale nyní to tedy běží). Vyžaduje to drobné úpravy kódu aby to běželo korektně (zmíněné convertToURL a nějaké né moc pochopitelné drobnosti i v oblasti vzorců (např. buňky potenciálně vyplněné kontingenční tabulkou se tváří jako neprázdné, zatímco doteď jsem je vyhodnocoval jako prázdné). Také mám nějaká makra vázaná na vzdálené databáze, nicméně spouští se tlačítkem ... Vypadá to tak, že hlavním problémem bylo spíše dotáhnout nastavení LO a W10, samotná makra se nyní jeví sice s drobnými chybami, ale běžně laditelnými aniž by padal LO.
Každopádně však děkuji. Určitě jsem tomu neuškodil, když jsem ten mastodontní soubor trochu pročistil v rámci hledání chyb.
Zda LO schazolvalo Libre nebo Win se asi nedozvím, spíše bych řekl že LO když nenašel prostředky pro běh maker. (jiné jednoduší soubory s makry však běžely ... - tož nevím).
Aby to nebylo tak jednoduché, úplně stejné chování mi již dříve předvedl soubor kde byla v sešitu ručně vytvořená funkce, která sumírovala hodnoty ze všech předchozích listů (cyklus přes všechny předchozí listy), několikrát to bylo v pohodě a pak při jednom pokusu o otevření to prostě během otvírání spadlo a stejně při dalších pokusech (to bylo LO6 na W7), shodilo to celé LO. Z toho jsem usoudil že i v tomto případě bude chyba především v mých makrech a nenapadlo mne hledat příčiny i jinde.


LibreOffice 5.4.

Offline

#9 31. 10. 2020 15:24:24

kamlan
Člen
Registrace: 15. 9. 2016
Příspěvků: 368

Re: přechod win7 > win10 - VYŘEŠENO

Tipuji že to prostě bude tou potřebnou instalací nějakého toho C++, mám takový mlhavý dojem, že před nějakým časem na mě vyběhlo též, že něco někdy chtělo nainstalovat něco co mělo v názvu C++ a pak už to běželo. Ale je to skutečně taková dost mlhavá vzpomínka a myslím, že to bylo spíš při nějaké aktualizaci Win než že by si to vyžádalo přímo Libre. Ale dobrý že vám to již víceméně funguje :-).


S vlastními funkcemi jsem zaznamenal problém v tom, když je uživatel vloží do sešitu jako vzorce, v těch funkcích k něčemu přistupuje přes ThisComponent - např. oList=ThisComponent.Sheets(0) -> avšak tuto vlastní funkci nemá uloženou v tom sešitě ale v modulu nějaké Libre knihovny, typicky např. ve Standard/Module1. To běží když má ten soubor načtený již v Calcu, ale když se soubor spustí a má dojít na načtení vzorců, tak to vypadá že vzorce to počítá ještě dřív než má načtené jiné knihovny než ty ze sešitu. Takže pak to hází chybu, např. BASIC - chyba při běhu. Vlastnost nebo metoda nenalezena: sheets. Ovšem po načtení souboru a přepočtení vzorců už to funguje normálně. Když jsou však ty vzorce uložené v tom sešitě, tak jsem problém nezaznamenal, byť jsem takhle nikdy nic rapidního nedělal, v podstatě to jen testnul.


Druhá věc je ta, že ve verzi 7 nějak blbne načítání knihoven. Třeba GlobalScope.DialogLibraries.LoadLibrary("Tools") knihovnu Tools z Makra a dialogová okna LibreOffice do paměti nenačte a makra z ní nefungují, dokud se ta knihovna nerozklikne ručně v katalogu objektů (to okýnko vlevo s moduly a názvy fcí) v Basic editoru.

Zkoušel jsem to však hlavně na Xrayi, tahle procedura měla xrayovat to co jsem měl zrovna označené ve Writeru.

Sub xrayOznacene
	dim oSel, oDoc, o
	oDoc=thisComponent
	GlobalScope.DialogLibraries.LoadLibrary("XrayTool")
	oSel=oDoc.currentSelection
	o=oSel.getByIndex(0)
	xray o
End Sub

Jenže napoprvé to při spuštění z Writeru zahlásí chybu BASIC - chyba při běhu. Podprocedura nebo funkční procedura není definována. a spustí Basic editor ve kterém označí to xray o. Ale druhé spuštění z Writeru už je v pořádku. No a v Basic editoru to xray nespustí dokud prostě jeho knihovnu nerozkliknu v katalogu objektů :-(. Někdy dříve mi to přitom chodilo. Avšak na nahlášení toho na bugzillu nějak nyní nemám, s anglinou jsem nějak poslední dobou víc nepřítel než alespoň nějaký kámoš.


Nicméně píšete že vám to již běží, tudíž GlobalScope.DialogLibraries.LoadLibrary(...) tam nejspíš nikde nepoužíváte.

Offline

#10 31. 10. 2020 15:38:02

ludviktrnka
Člen
Registrace: 9. 7. 2009
Příspěvků: 697

Re: přechod win7 > win10 - VYŘEŠENO

... načítám jen vlastní dialog na vyplnění kurzu ČNB

DialogLibraries.LoadLibrary("Standard")
dlg=createUnoDialog(DialogLibraries.Standard.kurz)

Ano s těmi funkcemi přistupujícími k listům je to asi blbost, funkce (coby vzorce v buňce) by měly pracovat pouze s vlastními argumenty, jinak nemohou být stabilní, to už je mi v podstatě jasné. To ovšem tedy nyní mé funkce splňují, jde pouze o složitější matematické úkony, který by zabraly moc sloupců.

Téma uzvavírám, děkuji pánové za podnětnou diskuzi, stabilita LO zejména na WIN10 není vůbec samozřejmostí.

Editoval ludviktrnka (31. 10. 2020 15:39:54)


LibreOffice 5.4.

Offline

Zápatí