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

#3476 Re: Calc » Makra v Calcu VYŘEŠENO » 6. 10. 2011 14:22:09

Pro Ip : Teď mne ještě napadlo, že myslíš název iCount v Cyklu For..Next. To by asi fungovalo i s koncem cyklu "E3". Jenže tenhle "iCount" je jen můj blbej zvyk psát stejné pojmenování pro počítadlo. Funkce For je nepodstatná - stejně tam bude Do..Loop - pokud cyklus nevnořím do makra Main. Potřebuju aby makro zastavilo jen kvůli podmínce If.

#3477 Re: Calc » Makra v Calcu VYŘEŠENO » 6. 10. 2011 14:09:39

Pro Ip : Zkusil jsem to na každý způsob, který mne napadl a nic. Deklaroval jsem duplicitně E3 = E3+1 spolu s původní deklarací. Pak jsem zadeklaroval E3=oSheet.getCellbyPosition(4,2).Value+1. Zmátlo mne také to, že uvádíš funkci count(), když já mám ve vzorci counta() - aby to zastavilo i při textu. Původně tam ta funkce count() byla, a tak jsem si znovu stáhl vlastní soubor jestli je to pravda. Pokud se Ti to povedlo, tak mi to upravené makro Main_2 prosím Tebe pošli. Bylo by to asi to správný ořechový. Je to ten problém, který popisuji jako rozdíl mezi makry "Vzorec1 a Vzorec2". Jsou právě na tom samém rozdílu postavena - ale na rozdíl od Main_1 a Main_2 fungují. Předem dík

#3478 Re: Calc » Makra v Calcu VYŘEŠENO » 6. 10. 2011 10:57:02

Pro Ip : To máš plnou pravdu. Makra o kterých jsem psal nebudou mít vždy úplně takovou podobu, jakou jsem zadal. Používám systémy, které zapisují přímo na konec registru, skok (makra Zápisu) vůbec nepotřebují. Je ale potřeba navázat při přerušení - a nevím jak jinak, nežli typem makra "krok". Také ne všechny generátory potřebují právě tohle. Například mám makro, které vyhodnocuje počet výher z rozpisu (souhrn za všechny tipy) a to má jen zápis určitého počtu druhů kombinací výher. Zapisuji jen počet stejných kombinací určitého druhu. Když ale narazí makro na kombinaci, která by byla vhodná k rozšíření vlastního rozpisu, tak ji zapíšu jinam. Bývá to velká výjimka, pokud tedy naleznu takový tip, řeším to právě takhle. Několik výjimek (pokud vůbec jsou) už výkon systému neovlivní. Věř mi, že hledám optimalizaci všemi způsoby. Chtěl bych ty generátory dát k dispozici, ale osobně mi jde o úplně jiný typ generátoru. Nejsem sázkový maniak jak by se mohlo zdát s toho co píšu. Nejsem ani hacker, který by chtěl lámat hesla smile Ale stejně dík

#3479 Re: Calc » Makra v Calcu VYŘEŠENO » 6. 10. 2011 10:26:31

Pro IP : Zřejmě máš na mysli pořadí Call Vzorec následně Call Zapis. Když to přehodíš, tak je to stejné. Na pořadí nezáleží. V cyklu For je otestována podmínka, která buď zastaví, nebo nezastaví na počtu výsledků. Je jedno jestli nejdříve zapíše hodnotu, a pak v následujícím cyklu vyhodnotí konec, nebo jestli to zastaví hned. Dokonce si myslím, že snadno postavím iteraci a Zápis před podmínku IF a půjde to stejně. Hrálo by to úlohu, když bych startoval jinak, než z prázdného registru. Tam by se mohlo stát, že pokud se provede nejprve Zápis, tak překoná limitu. To by se ale dalo ošetřit operátorem >=. Přepiš si to tak, aby sled příkazů byl shodný jak u Main_1, tak u Main_2 a uvidíš.

#3480 Re: Calc » Makra v Calcu VYŘEŠENO » 6. 10. 2011 09:33:23

Pro Ip: Ne není to makrem krok_0. krok_0 jen zavádí hodnotu mezi výsledky. To co jsem uvedl na začátku platí - jde o vývoj generátorů variací a variací s opakováním. Všechna makra jsou jen ve vývojové verzi - a jsou dislokovaná. Na konci by mělo být jen jedno makro Instalační (instaluje pracovní prostředí podle výběru). Vybrané pracovní prostředí bude obsluhováno jediným makrem, které však bude vždy obsahovat nějakou formu makra krok. To proto, že generátory budou generovat fyzické tvary variací - tedy databáze s mnohdy obrovským počtem řádků, a to i do více listů, které by se měly ukládat nejspíš jako csv. Tyto databáze už mají statickou povahu a budou obsluhovány jinými programy podle volby uživatele. Mimo to bych chtěl ještě postavit generátory, které budou umět posoudit obsah určité databáze - například rozpis loterie, který bude otestován všemi různými kombinacemi ze všech možných C(n,k), nebo generátory výběrů (v podstatě rozpisů). Je toho hodně. Já to dělám poměrně často, ale mojí limitou (a limitou obecně)je výkon HW a SW. Úprava makra je jedinou možností jak zrychlit takovéhle procesy. Funkčních generátorů jsem už postavil skutečně mnoho, ale po testu času jsem zjistil, že potřebuji například desítky pracovních dnů - a makro šlo slušně řečeno "do archivu".

#3481 Re: Calc » Makra v Calcu VYŘEŠENO » 6. 10. 2011 08:55:07

Děkuji za náměty bez nadsázky nestorů, či klasiků pánů Pastirika a Hanuse. Půjdu to zkusit. Pro ostatní, kteří úplně nechápou oč jde jsem vytvořil sešit s popisem problematiky a s makry, která problém vykreslují. Je to jednoúčelové, tak tam nehledejte žádný jiný smysl, nežli popis problémů. Jsou tam makra Main_0, Main_1, Main_2, Vzorec1, Vzorec2 a Zápis. Je zde popis testu, který jsem provedl a můžete si jej zopakovat. Spouštíme jednotlivá makra Main, která obsahují odkaz (Call) na makro Vzorec1(2) - to číslo se musí ručně přepsat, když testujeme podle druhého vzorce. Problémy jsou zde popsány dva, i když v důsledku to asi bude jen jediný. Stáhnout se to může z adresy Dotaz wiki.ods

#3482 Re: Calc » Makra v Calcu VYŘEŠENO » 4. 10. 2011 15:53:42

Přišel jsem na příčinu, ale závadu jsem nedokázal odstranit. Je to trochu speciálnější téma, a je potřeba vložit soubor, aby si to mohl zájemce ověřit. Proto otevřu nový příspěvek. Řeknu jen na závěr, že při iteraci vznikne místo čísla text. Stává se to jen v případě, že jde o jiný typ, než Integer a Long Integer (chybu hází nejen vzorce, ale i čísla s desetinným místem. Celá čísla fungují normálně). Zatím to neumím přetypovat, ale zjistil jsem, že jde zřejmě o neduh OOo.

#3483 Re: Calc » Makra v Calcu VYŘEŠENO » 2. 10. 2011 21:49:36

Dane pořád to není ono. Prostě jsem zase vyzkoušel všechny obměny a to IF mi podmínku nečte, nezastaví. Makro Vykonny maká perfektně i podle Tvého návodu. Tak jsem zkoušel kombinace deklaracemi bez proměnných - tak jak to máš v makru Vykonny plus val(H2) = val(H6). Zkoušel jsem i H2 = val(H6) s s proměnou v deklaraci H2 a H6 s deklarací i bez deklarace, ale stejně nic. Prošel jsem i možnosti jiného názvu listu, protože tem původní měl jméno textem. Zítra to budu zkoumat znova. Ale děkuji. Možná by bylo lepší, abych Ti poslal kompletní sešit. Mám tam ještě instalační makro pro instalaci pracovního prostředí, do kterého se pak Main pouští. Pak také potřebuješ makro krok_0. Takže emailem bych Ti to mohl poslat? Zatím dík

#3484 Re: Calc » Makra v Calcu VYŘEŠENO » 2. 10. 2011 09:01:42

Tak jsem to udělal znovu a nic. "String" se mi vybarví modře. "Str" to nezná.

#3485 Re: Calc » Makra v Calcu VYŘEŠENO » 2. 10. 2011 08:29:48

Ano máš pravdu. Test H2 ku H6 je poměr skutečného stavu položek registru výsledků daný vzorcem COUNTA(J2:J1000000). Potřebuji, aby makro zastavilo například na počtu 100 tisíc, nebo tolik, kolik comp uveze. Cyklus For .. Next sice dělá zadaný počet, ale zapíše jen málo (nakro Vykonny vybírá jen variace bez opakování, přičemž generátor dává variace s opakováním). Takže například po 1000 cyklech mám jen 260 zapsaných výsledků. Navíc For ..Next užívám ve spojení se záznamem času - zapíšu čas spuštění a skončení při určitém počtu cyklů a vzniklých výsledků. Následně For..Next nahrazuji samozřejmě jiným cyklem - nejčastěji Do..Loop, a pak už to visí jen na přednastaveném počtu výsledků. Znám při tom i přibližný čas generování - takže jdu třeba nakoupit a nechám ho makat.
Další věc je, že jsem zkoušel zadeklarovat místo value "string" ale také mi to nechodilo. Ale pro jistotu se podívám ještě jednou. H2 je skutečně jen číslo (nastavená limita výsledků), ale H6 je vzorec - to bylo úprvní co jsem zkoušel. Je možné, že jsem zazmatkoval někde jinde. Ale děkuju za snahu i námět.

#3486 Calc » Makra v Calcu VYŘEŠENO » 1. 10. 2011 20:06:19

neutr
Odpovědí: 27

Zdravím. Mám určitý problém s makrem. Používán několik způsobů pro stejný účel. Funkce If mi při prvním způsobu (Main1) funguje, ale je pomalejší a i méně přehledná. To druhé makro (Main2) zase nečte funkci If. Jde sice o jiné deklarace, ale ten druhý způsob (zřejmě z Excelu, nebo jiného Basicu - už nevím jak jsem na to přišel) Funguje v jiném makru přímo skvěle. Ty první makra jsou řídící pro makro "Vykonny" a to funguje bezvadně přestože je deklarována druhým stylem. Chtěl jsem to dát jako návod a s touhle ptákovinou si nevím rady - ani ryba ani rak. Zajímá mne, jestli někdo ví proč to je. Ukázka Main1, Main2, a Výkonny.

Sub Main1
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")

Dim H2
Sheet = thisComponent.Sheets(0)
H2 = Sheet.getCellRangeByName("H2")
Dim H6
H6 = Sheet.getCellRangeByName("H6")

For iCount = 1 To 10000

IF H2.Value = H6.Value Then
Print "Překopíruj a smaž výsledky"
Stop REM (Exit Sub)
End If

Call Vykonny

Next iCount

End Sub

_____________________________________________________

Sub Main2
oDoc = ThisComponent
    oSheets = oDoc.Sheets
    oSheet = oSheets.getByIndex(0)
H2 = oSheet.getCellbyPosition(7,1).Value
H6 = oSheet.getCellbyPosition(7,5).Value

For iCount = 1 To 10000

REM tahle funkce nefunguje PROČ?
IF H2 = H6 Then
Print "Překopíruj a smaž výsledky"
Stop REM (Exit Sub)
End If

Call Vykonny

Next iCount

End Sub

_______________________________________________________


Sub Vykonny
oDoc = ThisComponent
    oSheets = oDoc.Sheets
    oSheet = oSheets.getByIndex(0)
A1 = oSheet.getCellbyPosition(0,0).Value
B1 = oSheet.getCellbyPosition(1,0).Value
C1 = oSheet.getCellbyPosition(2,0).Value
D1 = oSheet.getCellbyPosition(3,0).Value
E1 = oSheet.getCellbyPosition(4,0).Value

A2 = oSheet.getCellbyPosition(0,1).Value
B2 = oSheet.getCellbyPosition(1,1).Value
C2 = oSheet.getCellbyPosition(2,1).Value
D2 = oSheet.getCellbyPosition(3,1).Value
E2 = oSheet.getCellbyPosition(4,1).Value

REM Funkce vylučující zápis variace s opakováním prvků
REM bez této funkce generátor generuje variace s opakováním
IF A1 <> B1 AND A1 <> C1 AND A1 <> D1 AND A1 <> E1 AND B1 <> C1 AND B1 <> D1 AND B1 <> E1 And C1 <> D1 AND C1 <> E1 And D1 <> E1 Then
Call krok_0 REM Rídí zápis do registru výsledků 
End IF

REM Vlastní krok podmínečné iterace
IF A1 = A2 AND B1 = B2 AND C1 = C2 And D1 = D2 And E1 = E2 Then
Exit Sub
Else IF A1 < A2 AND B1 = B2 AND C1 = C2 And D1 = D2 And E1 = E2 Then
oSheet(0).getCellByPosition(0,0).SetFormula(A1+1)
oSheet(0).getCellByPosition(1,0).SetFormula(1)
oSheet(0).getCellByPosition(2,0).SetFormula(1)
oSheet(0).getCellByPosition(3,0).SetFormula(1)
oSheet(0).getCellByPosition(4,0).SetFormula(1)
Else IF B1 < B2 AND C1 = C2 And D1 = D2 And E1 = E2 Then
oSheet(0).getCellByPosition(1,0).SetFormula(B1+1)
oSheet(0).getCellByPosition(2,0).SetFormula(1)
oSheet(0).getCellByPosition(3,0).SetFormula(1)
oSheet(0).getCellByPosition(4,0).SetFormula(1)
Else IF C1 < C2 And D1 = D2 And E1 = E2 Then
oSheet(0).getCellByPosition(2,0).SetFormula(C1+1)
oSheet(0).getCellByPosition(3,0).SetFormula(1)
oSheet(0).getCellByPosition(4,0).SetFormula(1)
Else IF D1 < D2 And E1 = E2 Then
oSheet(0).getCellByPosition(3,0).SetFormula(D1+1)
oSheet(0).getCellByPosition(4,0).SetFormula(1)
Else IF E1 < E2 Then
oSheet(0).getCellByPosition(4,0).SetFormula(E1+1)
End IF
End IF
End IF
End IF
End IF
End IF

End Sub 

Poznámka - toto makro je plně funkčním generátorem - 1 krok libovolné variace 5. třídy bez opakování z libovolného základu. Po úpravě (ta je poznamenána) můžeme generovat variace 5. třídy libovolného základu s opakováním. Je však třeba nastavit pracovní prostředí a to se dělá "velkým" makrem. Zájemcům to pošlu, ale chtěl bych to dát do návodů. Děkuji za náměty
Petr

#3487 Calc » Zafixovat ukotvení ovládacích prvků » 17. 10. 2010 08:13:22

neutr
Odpovědí: 4

Zdravím. Mám takový podivný problém s ukotvením a zafixováním ovládacích prvků. Ovládací prvky - tedy tlačítka, zaškrtávací boxy, přepínače a podobně - umístím a zafixuji. Přes to se mi po znovuotevření o kousek hnou. Včera jsem vytvořil sadu ovládacích prvků a dnes tam vůbec nebyla. nakonec jsem ji samozřejmě našel, ale posunutou o 22 řádků nahoru - bylo vše zamčené - jak velikost, tak umístění. Také se mi rozjelo tlačítko na 99 sloupců.
      Nepříjemný je i ten malý posun, zejména, když nelze rozpoznat v jakém řádku má prvek být. Ukotvení provádím k buňce. nevíte náhodou jak tuhle záludnost vyřešit a skutečně fixovat ovládací prvky?

Děkuji :

#3488 Re: Calc » Calc - zápis do externího sešitu nebo databáze » 17. 10. 2010 07:36:16

Jestli jsem správně rozuměl, tak Ti běhají aktualizace, ale nepřidávají se Ti nové záznamy. Jestli je to tak, potom musíš jako propojení zadat více řádků (sloupců). Například máš záznamy na řádcích A1 až A12. Ty zadáš jako propojení například A1 až A1000. Pak se ti budou až do řádku A1000 aktualizovat nové zápisy při spuštění sešitu do kterého jsi propojil.

#3489 Calc » OLE do OLE a inkontinentní formátování? » 3. 10. 2010 19:01:40

neutr
Odpovědí: 0

Narazil jsem na problém s kopírováním textu - jde o to, že vložím do tabulky libovolný texťák jako OlE, nebo jak plovoucí rámec, a může to být i odkazem. Já bych potřeboval přímo vytvořit OLE z writeru. Dá se tam vložit jen "OLE" - tedy data (a stačí mi prostý text). Takže vzniká paradox OLE v OLE objektu. Ale pracovat se s tím vůbec nedá - nechodí to ani jako "první OLE". Když vložím neformátovaný text (pro plovoucí rámec to jde jen pomocí CTRL+ALT+SHIFT+V - místní nabídku nelze upravit), tak je deformovaný do výšky - navíc jsou tam také písma nikoliv černá (šedá - která jsou zřejmě nějak diskriminovaná). Nelze to vyřešit natahováním OLE okna, nebo buňky, ke které to vážu. Tohle se děje právě u OLE vytvořeného z writeru OOo. Relativně nejlépe je na tom použití plovoucího okna - ale také žádný zázrak.
     Navíc jsem našel chybu v běžném i podmíněném formátování. Buňky upravím ve smyslu "formát". Formátů mám v listě víc a právě ochrana buněk se ztratí po zamčení a následném odemčení listu. Podmíněný formát neudrží vzorce pokud jsou složené z více nežli 1 podmínky. Naformátuji několik buňek - každá má malinko jiný vzorec a po nějaké chvíli se mi objeví vzorec z buňky Xx v buňce Yy. Nepomůže ani absolutní adresování, ani ukládání po každém zadání vzorce. Prostě tahle funkce je inkontinentní jako stará Vachtlová.

#3490 Re: Instalace » Instalace verze 3.2.1 » 13. 9. 2010 20:35:29

Tak jsem na to přišel. Problém byl v tom, že jsem měl také čerstvě nainstalovaný server MySQL 5.1 plus doplňky. Po odinstalování běhá vše dobře. Jen ta instalace OOo 3.2.1 (a taktéž GO OO) ne a ne doběhnout do konce. Dá se na to zapomenout a i přes otevřené okénko s upozorněním, že mám pár minut počkat, nežli se dokončí registrace komponent, se dá otevřít organizér normálně.
Jo a když už jsem měl zkusmo nainstalované GO OO, našel jsem fintu, kterou jsem hledal několik let. Když je nutno aktivovat vzorec z textu (například po sloučení řetězců), bylo nutno položit například kurzor na konec editační řádky a "delete-m" aktivovat vzorec - to šlo jen po jediné buňce. Když se ale u normální verze OOo použije trik převodu na RTF formát, aktivujete celé pole vzorců naráz. GO OO na to má přímo kolonku vložit "jako" - víc možností a jedna z nich je RTF. Normální OOo tohle má jen při převodu z jiných formátů. Tak jsem to vzal přes windovs RTF (vytvořit nový - dokument RTF...například na ploše). Tam vlepím pole vzorců, vzápětí to zpětně načtu - a máme hotovo - při zpětném vložení do formátu OOo už není třeba nic volit - jen "obyčejně" vložit.

#3491 Instalace » Instalace verze 3.2.1 » 12. 9. 2010 08:09:27

neutr
Odpovědí: 1

Zdravím.
Přišel jsem na dost velký problém. První instalace (Win XP home) přes původní verzi OOo 3.2.0 proběhla relativně dobře - asi za 5 minut. Při práci se mi začalo projevovat zpoždění úměrné době (počtu) práce.
Domníval jsem se, že to mohou způsobit rozšíření. Tak jsem je zakázal. Nebylo to ono. Když mi Windows už asi hodinu "cukaly", tak jsem se rozhodl pro opravu. Zadal jsem opravit a čekal 3 hodiny - ukazatel byl ve 100%, ale procesor jel na plný výkon. Nevydržel jsem a ráno jsem důkladně odinstaloval. Spustil jsem novou instalaci a opět je to víc, nežli 2 hodiny, procesor jede na 100% - a nic. Navíc jsem zjistil, že nová instalace diskriminuje dialogy starší práce - prostě se načtou makra, ale bez dialogu - tím pádem jsou nefunkční. Poradí někdo? Zatím hodlám vydržet asi hodku, a pak to vzdám - nainstaluji verzi 3.2.0. Děkuji

Zápatí

Používáme FluxBB