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

#1 10. 4. 2016 13:58:40

Marrtt
Člen
Registrace: 25. 2. 2015
Příspěvků: 115

funkce NETWORKDAYS - nefunkční vzorec v makru - vyřešeno

Dobrý den
v makru mám příkaz k vytvoření vzorce ke každému řádku seznamu(ověření stáří vložené položky - pracovní dny), datum ve sloupci "D" je zapsáno v textovém formátu, nakopírované ručně z externího textového souboru:

    for pos = 0 to funds_total_disp.value - 1 rem cyklus přes celý seznam položek
        m = pos + 1
        Strana_4.getcellbyposition(7,pos).formula ="=NETWORKDAYS(DATEVALUE(D"+m+");TODAY())-1"
    next pos

vzorec se vloží do sešitu přesně v požadované podobě, problém je v tom, že znaky klíčového slova funkce jsou zapsána malými písmeny ("networkdays") a funkce hlásí chybu #NAME?. Pokud soubor s takto vygenerovanými vzorci zavřu a znovu otevřu, vzorce normálně fungují a dávají požadované hodnoty. Stejně tak když do vzorce zasáhnu ručně (třeba jen vložím a zase vymažu mezeru v klíčovém slově "networkdays" popřípadě vymažu a zase vložím nějaké písmeno tohoto slova, vzorec se nastartuje a normálně funguje. Nikdy jsem se s něčím takovým nesetkal ani u žádné jiné funkce. Prosím o radu, jak se k takové anomálii postavit a co by za tím mohlo být.

Děkuji

Editoval Marrtt (12. 4. 2016 07:11:13)

Offline

#2 10. 4. 2016 14:25:22

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

Re: funkce NETWORKDAYS - nefunkční vzorec v makru - vyřešeno

už jsem se stkal s tím že vzorec načtený makrem je trochu něco jiného než vzorec zapsaný. Při zapsání vzorce a jeho "odentrování" nebo i při roztažení dojde k nějakým výpočtům, k nimiž při zadání makrem nedochází. Hádám že u vás bude problém určitá ne zcela jednoznačná kompatibilita s textovým zadáním data. Myslím že si to textové datum musí vzorec pořádně "přelouskat" :-)

A napište ještě verzi office. V LO 5.0.2.2. to funguje správně

Editoval ludviktrnka (10. 4. 2016 14:32:44)


LibreOffice 5.4.

Offline

#3 10. 4. 2016 14:51:52

Marrtt
Člen
Registrace: 25. 2. 2015
Příspěvků: 115

Re: funkce NETWORKDAYS - nefunkční vzorec v makru - vyřešeno

OpenOffice 4.1.2, aktualizaci jsem kontroloval dnes. Pokud vzorec zapíšu celý ručně, žádný problém nenastane. Zkusím vzorec v makru rozložit na dva kroky - v prvním kroku převod argumentu z textového formátu na datový (to už mi na jiném místě funguje bez obtíží) a v druhém vzorci vlastní funkci NETWORKDAYS.

marrtt

Offline

#4 10. 4. 2016 15:47:08

Marrtt
Člen
Registrace: 25. 2. 2015
Příspěvků: 115

Re: funkce NETWORKDAYS - nefunkční vzorec v makru - vyřešeno

Nefunguje nic, ani rozložení funkce na postupné kroky, ani načtení argumentu z jiného místa. Nejvíc mne mate to, že se text vzorce zapisuje malými písmeny, jakoby někde bylo definované nějaké vyhrazené slovo, které se tam načte a pak se to nechová jako funkce.

Offline

#5 10. 4. 2016 16:07:06

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

Re: funkce NETWORKDAYS - nefunkční vzorec v makru - vyřešeno

Pokuste se nejdříve se podívat jaký formát ukazuje originálně načtený vzorec (FORMÁT > BUŇKY > ČÍSLA). Ta malá písmena znamenají jednoznačně chybu syntaxe. Po uzavření sešitu se to automaticky přeformátuje a přepočítá.


     Datové funkce by měla být ve formátu "vše", nebo "datum" popřípadě "čísla".


     Po překopírování je to zřejmě ve formátu "text" = @. Zřejmě budete muset hned převádět formát na datum, respektevi změnit ten textový formát. Možná bude stačit příkaz "přepočítat".


PS ještě mne napadlo jedno řešení. Makrem, nebo ručně vyberte vše a zadejte dialogem "najít a nahradit" Najít "=" a Nahradit za "=". Tohle umí z textové formy (@) udělat vzorec (RTF). Makro si můřete snadno nahrát : Vybrat vše a najít .. nahradit. připojit to na konec Vašeho makra.

Editoval neutr (10. 4. 2016 16:27:19)


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

#6 10. 4. 2016 17:52:10

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

Re: funkce NETWORKDAYS - nefunkční vzorec v makru - vyřešeno

Zdravím,
zkusil jsem u sebe toto:

Sub Vzorec()
	Dim oSheet, oCell, i
	oSheet = ThisComponent.Sheets.getByName("List1")
	
	For i=1 To 20 
		oCell = oSheet.getCellByPosition(5,i)
		oCell.formula = "=DATEVALUE(D" & i+1 & ")"
		
		oCell = oSheet.getCellByPosition(6,i)
		oCell.formula = "=NETWORKDAYS(DATEVALUE(D" & i+1 & ");TODAY())-1"
	Next
End Sub

a vypadá to, že to funguje bez chyby

moje verze LO 5.1.0.3, běží na Ubuntu 14.04.4


Ubuntu 22.04.1 LTS, LibreOffice Verze: 7.4.6.2, wxMaxima 20.12.1, Maxima 5.47.0 (SBCL)

Offline

#7 11. 4. 2016 06:29:37

Marrtt
Člen
Registrace: 25. 2. 2015
Příspěvků: 115

Re: funkce NETWORKDAYS - nefunkční vzorec v makru - vyřešeno

Obávám se, že je to nějaká chyba přímo v OO - jakoby neuměl rozeznat klíčové slovo funkce a nahrazoval ho jen textem. Kontroloval jsem všechny formáty, argumenty pro funkci jsou v pořádku (všude je "číslo", nikde není "@"), sám vzorec je ve formátu "číslo". Navíc jsem zkusil rezignovat na "pracovní dny" a zadal jsem místo toho vzorec DAYS(.;.) jako prostý rozdíl dní. V tomto případě to normálně funguje na stejných argumentech. Tak jsem z toho jelen...Nemohl by to někdo vyzkoušet na stejné verzi OO OpenOffice 4.1.2? Ještě jsem neudělal to nahrazující makro podle NEUTR, ale i to mi přijde nějaké ne zcela korektní řešení, spíše nouzovka.
Každopádně děkuju všem

Offline

#8 12. 4. 2016 01:23:58

Marrtt
Člen
Registrace: 25. 2. 2015
Příspěvků: 115

Re: funkce NETWORKDAYS - nefunkční vzorec v makru - vyřešeno

To NEUTR: Vaše řešení funguje - děkuju. Přesto mi vrtá hlavou, kde je skutečná příčina problému. Udělal jsem totiž pokus a makrem jsem nahradil místo "=" za "=" znak "s" za "s"(popřípadě libovolný znak slova "networkdays"). Výsledek byl stejný, vzorce se nastartovaly a začaly fungovat.

Offline

#9 12. 4. 2016 06:34:22

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

Re: funkce NETWORKDAYS - nefunkční vzorec v makru - vyřešeno

Podstata problému je v nastartování vzorců. Poměrně často se k podobnému problému dá dostat tak, že vzorce sestrojíme pomocí textových funkcí - například právě podobným slučováním jaké jste udělal Vy. Já jsem vědeckým postupem pokus - omyl zjistil, že nejlepší cestou jak to udělat "najednou" je sestrojit nejprve proměnnou "string" (například "Str"). Tam vypsat vzorec, vložit jako string a teprve nakonec udělat vzorec do buňky :
Cell.string = Str
Cell.Formula = "=" & Cell.String
     Nejprve ale otestujte vložení Vzorce přímo :
Cell.Formula = "=" & Str
     Problém je zřejmě v tom kolik sloučení v řetězci existuje. S jedním sloučením s poradí právě jednoduché (přímé) vložení. Když jich tam je více musí se ASI nejprve výraz sjednotit předem. Přesnou podstatu problému ale neznám.


     Ovšem ne vždy to jde. Pokud například dělám sloupce vzorců s několika proměnnými přímo v sešitě, musím sloučit výrazy pomocí CONCATENATE (nebo jen pomocí xz & xy & yz & ...&). Po sloučení je nutné výraz načíst a vložit zpět jen jako hodnoty a text (dialog vložit jinak). Teoreticky by mělo fungovat vložit jinak "vzorce", to ale nefungovalo (nevím jestli to už funguje - nespoléhám se na jiné dříve vyhodnocené nefunkční postupy).
     Právě při tom vkládání nastane "patová situace" - vzorce je nutno aktivovat. To jde prakticky jen po jednom tak že se například na konec vzorce v příkazovém řádku vloží korzor a stiskne se DEL, nebo Insert. Stejně to lze udělat na začátku, ale tam je nutně udělat "delete" šipkou doleva aby se nesmazalo rovnítko.
     Insert je vhodný vždy na jakékoliv pozici ale přepíná se "z čárky" na "plochu pozice". To je dost nepříjemné. Nicméně je to velice otravné a při takové aktivaci uděláte snadno chybu. Respektive nám z toho může "fouknout pod tašky" : -)


     Úplně původně jsem takové sloupce vzorců načítal a vkládal do dokumentů typu RTF a pak je znovu načetl z RTF a vložil zpět do Calcu. Pak se objevilo Go-OO které mělo možnost vložit jinak - RTF a bylo po problémech. GoOO ale také odešlo do věčných lovišť.
     Náhodou jsem objevil tuto vlastnost dialogu "najít a nahradit" když jsem hledal chybu ve slučovaných tvarech. Od té doby funguje tento postup a nic jiného v případě manuální konstrukce vzorců nedělám.

Editoval neutr (12. 4. 2016 06:43:13)


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

#10 12. 4. 2016 07:09:31

Marrtt
Člen
Registrace: 25. 2. 2015
Příspěvků: 115

Re: funkce NETWORKDAYS - nefunkční vzorec v makru - vyřešeno

Zkoušel jsem to i přes vložený "string", dal jsem si i pozor, abych nespojoval funkce do složitých řetězců. No řešení je na světě a pojďme od toho, máme všichni určitě i jinou práci. Hezký den

Offline

Zápatí