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

#1 19. 1. 2018 16:12:57

LADER
Člen
Registrace: 3. 4. 2013
Příspěvků: 91

Adresa buňky ve které je funkce

Zdravím,
ještě dotaz. Dá se zjistit adresa (řádek, sloupec) buňky ze které je spuštěno makro? Kurzor je samozřejmě někde mimo (třeba na pozici "A1").

Offline

#2 19. 1. 2018 17:00:58

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

Re: Adresa buňky ve které je funkce

To je otázka do pranice. Makra mohou být volána různě. Nebudu vyjadřovat možnosti spuštění. Buňka sama o sobě tedy jako kousek paměti makro spustit neumí.
     Umí to ale některé události na buňku navedené. Je to zejména obecná změna obsahu, respektive stavu buňky. To ovšem musí být spuštěná služba která na takový stav čeká. Bohu žel ne vždy se to chová podle předpokladu. Dost běžné je spuštění akce při změně jakékoliv buňky v listu. Lze definovat oblast která službu aktivuje ale mám otestováno, že někdy to sedí tam kde to má fungovet, ale také se objeví spuštění mimo danou oblast. Pak to má nevýhidu ještě v tom, že se služba musí někdy vypínat a bohu žel se někdy stane, že je zapnutá i po zavření dokumentu který obsluhovala.


     Jiným typem buňky je klikačka která přímo spouští makro. Jinak lze nastavit nepřímo událost. Například událost listu - ale jen LO - AOO toto neumožňuje (dnes jsem se s tím pral - a neuspěl).
     Takže makro se přímo buňkou spustit nedá, ale může se spustit díky nějaké inciaci se kterou buňka souvisí, nebo přímo řídí. Nejčastěji se to dělá pomocí objektů. Tedy například ovládacích prvků - ListBox, ComboBox, ... ale i v jednom případě "konsolidace dat".


     Já jsem dnes trošku zkoumal tu Vaši práci a celkem je zajímavá ale některé věci mi nějak nedošly. Čím (jak) porovnáváte správnost výsledku - Matlabem? Proč výstupy náhodně bomabardujete do do listu? Nebo proč máte pro JS_integrate a N_integrate jinou přesnost? Nebo další možná zdroj chyby - proč neuděláte pro stejná zadání jednu společnou opravu řetězce? Tam všude bych asi viděl možnost chyby. Je mi jasné že testujete něco konkrétního a tohle je jen orientační. Jde také o zaplnění paměti takže to ovlivní výsledek ve smyslu času.
     Uvádíte, že má Basic chybovost ačkoliv je 3x rychlejší - ale podle výsledků je tam jenom 1 chyba na posledním řádku a poslední číslici. Ta chyba může být dána možná i náhodným souběhem okolností. Vím - je to první varianta a budete dál hledat. Další věcí je, že Javascript skriptuje do sešitu a musí se navigovat - jinak by to bylo rychlejší. Já potřebují jen editor ale pak pustím Javasript "na volno" z html do adresáře - a vím že by to mělo být rychlejší.

     Samozřejbě webmástr bere JavaSript jako poslední možnost (berličku) když to jinak nejde, ale i to, že je v sešitě 3x pomalejší se mi asi nechce věřit. Já tam ani nevidím měření procesů - nejlépe GetSystemTick, nebo alesponň pomocí TIMER(). Dá se tak najít kde to vázne.
     Za hodku pojedu pryč a tam se dostanu jen na desku. Takže se na to podívám aý se svrátím. Teda nevím kdy - mám restů až hanba.

Editoval neutr (19. 1. 2018 17:03: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 19. 1. 2018 19:25:39

LADER
Člen
Registrace: 3. 4. 2013
Příspěvků: 91

Re: Adresa buňky ve které je funkce

Proč náhodnost:
Protože, když budu zapisovat do jedné buňky, pak při stisknutí tlačítka [CNTR]+[SHIFT]+[F9] (přepočet celého listu) se spustí všechny makra na listě. Pak se stane toto: Jedna funkce, zapíše hodnotu do pracovní buňky a než ji přečte, tak druhá funkce tam zapíše hodnotu také, ale pro úplně jiný  výpočet! Tím pádem jsou všechny výsledky špatně - liší se od skutečnosti, ne o malý kousek, ale o obrovskou hodnotu (desítky procent i více). Pokud zapisuji náhodně, pak je malá pravděpodobnost, že to stane (výsledky, které jste viděl jsou asi v pořádku - bez chyby).
Proto potřebuji, aby každé spuštění funkce (na listu jich může být několik) vždy pracovalo s jedinečnou buňkou. Javascript nepoužívá žádnou buňku pro vyhodnocení, dělá to někde uvnitř, tak je bez chyby.


Porovnávám výsledky s Maximou, kterou mám nainstalovanou na svém počítači. Calc, narozdíl od Maximy, která počítá algebraicky, počítá numericky - takže neumí počítat přesně. Jedná se pouhé přibližování k přesné hodnotě, kterou si nastavím posledním parametrem na přesnost, která mi postačuje. Zvýšením přesnosti se výpočet dost prodlužuje, takže se jedná o kompromis.
Například tento integrál musí vyjít přesně 2. Na listu si můžete zkusit, jak hodnota posledního parametru ovlivňuje výsledek (na kolikátém místě se začíná výsledek lišit).


Jak jsem měřil rychlost: Zvolil jsem stejný výraz (složitý) pro integraci a přesnost jsem nastavil na nějakou vysokou hodnotu, třeba 1000. A pak jsem stopkama změřil čas a porovnal, nejprve jednu funkci a pak druhou. Rozdíl byl při opakovaném měření ve vteřinách asi čtyřnásobný.


Pokud tedy říkáte, že Javascript je rychlejší, mohl bych hodit celou integraci do něj a pak by se to volalo jen jednou. Ale moc se mi do toho nechce - byla by rozdílná syntaxe, tím by to použití bylo pro úzký okruh lidí. Takhle je to mnohem použitelnější.

Škoda, že Calc nemá obdobnou funkci, tím by tohle vše odpadlo.

Offline

#4 19. 1. 2018 20:18:38

LADER
Člen
Registrace: 3. 4. 2013
Příspěvků: 91

Re: Adresa buňky ve které je funkce

Tak jsem zavedl dvě funkce.
První funkce "Nová instance" najde první volné políčko na listu "Temp", obsadí jej a předá číslo řádku funkci která jej zavolala a ta jej používá jako svoje soukromé. Každé další volání téže funkce dostane nové políčko. Například pokud je v listu použito osm buněk obsahujících tuto funkci, je pak obsazeno osm řádků.

Po ukončení programu je volaná druhá funkce "Smazat instanci", která políčko (řádek) opět uvolní. Buňky jsou smazány a mohou být zase použity.

Zatím to pracuje bez kolize. Byl přidán další vnitřní parametr, který uživatel nevidí.

Offline

#5 21. 1. 2018 00:52:09

LADER
Člen
Registrace: 3. 4. 2013
Příspěvků: 91

Re: Adresa buňky ve které je funkce

Taj jsem to přepsal kompletně do javascriptu. Byl jsem překvapen, je to minimálně 15x rychlejší než Basic. smile

Offline

#6 21. 1. 2018 12:34:59

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

Re: Adresa buňky ve které je funkce

Tedy klobouk dolů. Teprve dnes jsem se dostal domů a podíval se co že je to Maxima. Poměrně rychle jen z nakouknutí do manuálu jsem pochopil řadu věcí, kterým jsem před tím nerozuměl. Nepročetl jsem toho moc, ale zajímal mne export/import a zejména funkce v položce teorie čísel (nenašel jsem funkci Partition Numerorum - celkem zklamání) Ale kdo ten problém zná tak ví proč je to důležité. Při tom existuje jak teoretické tak praktické řešení od Ken Ono.
     Podle všeho by mělo jít vytvořit export/import filter. Tedy je jasné že se používá příkazová řádka do které se pustí parsovaný plain text ze sešitu LO (a zřejmě i AOO), ale podle všeho wxMaxima používá vlastní WorkSheet (nevím jestli to platí obecně pro Maximu, ale myslím že ano).


     Našel jsem odkaz na LibreOffice - od verze 5.1 podle všeho si Maxima poradí s Texem a MathML. Viz 1.2.7 MathML output WxMaxima manual. Údajně lze zkopírovat schránkou výraz z editoru rovnic a vložit do WxMaxima. Ale je to zřejmě jen jednosměrné zpracování.
     Maxima si poradí zřejmě jen s číselným zpracováním výrazů s jedním parametrem. Takže to vypadá, že LO (AOO) je pomocný prostředek pro výpočty k Maximě, což je dobré, ale šlo by to i obráceně jako rozšíření pro LO (AOO). Problém je tam jenom s kompatibilitou licencí. Ale Maxima je také OpenSource - pod licencí Creative Commons. Dle všeho by stačil souhlas autora.
     Takové rozšíření by s velkou pravděpodobností překonalo funkcionality tabulkového procesoru GNUMERIC. Což je tabulkový procesor který byl původně zaměřen zejména na statistiku. Ale dnes na tento tabulkový procesor asi žádný jiný - včetně Calcu nemá v mnoha aspektech. Například volba rozsahu listu až 16000 sloupců a 16 milionů řádků (konkrétně 16,777.216 řádků a 16.384 sloupců). Sice také prochází prudkým vývojem a některé funkcionality tam jsou uvedené, ale nefungují dobře, nebo vůbec. Ale celkově velmi příjemné a jednoduché rozhraní, přístupy pro skupiny a jednotlivce, například konsolidace dat lepší nežli naše aj....

Editoval neutr (21. 1. 2018 12:45:38)


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 21. 1. 2018 16:05:49

LADER
Člen
Registrace: 3. 4. 2013
Příspěvků: 91

Re: Adresa buňky ve které je funkce

Funkci Partition Numerorum by měla odpovídat funkce: integer_partitions(n);

Tedy pokud jsem to pochopil dobře. smile

Offline

#8 22. 1. 2018 19:33:28

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

Re: Adresa buňky ve které je funkce

Je to tak. Dokonce to vypadá, že umí od 1. do x - té třídy (partition má až třídu "n"). Ale mám problémy se syntaxí. Je to postaveno na Lispu a anoncovanému kopírování příkladů nějak nerozumím. Ale dám tomu hodku když bude čas. Díky za tip.


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

Zápatí