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

#1 Re: Calc » Jak upravit vzorec - VYŘEŠENO » 9. 7. 2020 20:34:02

Ano, myslel jsem že to je cílem. Pokud ve sloupci A nebude číslo, pak ve sloupci B bude prázdná textová hodnota čili "" (nic v uvozovkách :-). Jinou možností je výsldek 0 (nula) ale to se většinou zobrazuje (pokud nemáte nastaveno zákaz zobrazení nulových hodnot), v každém případě je to také možnost.

#2 Re: Calc » Jak upravit vzorec - VYŘEŠENO » 9. 7. 2020 12:05:45

takto =IF(A3<>0;if(A3<0;B2+A3;B2+A3);"") ačkoli vůbec nechápu co tou podmínkou A3<0 řešíte, když v obou případech se provádí stejná operace??????

#3 Re: Calc » Zalohovani dat-VYRESENO-nelze:( » 24. 5. 2020 12:09:24

Prostě mít pro každý případ vlastní zadání. Nebo nejěký přepínač. To řešení je hodně individuální, možná kdybyste svůj soubor zkusil poslat... Pomocí vzorců platí že pokud chcete mít (na papíře) více výsledků pak musíte mít k dispozici více zadání, pokud chcete mít pomocí jednoho zadávacího formuláře více výsledků musíte pouřít makro. V tomto případě bude velice jednoduché. Jistě vám jej tady někdo rád napíše.

#4 Re: Calc » Zalohovani dat-VYRESENO-nelze:( » 23. 5. 2020 21:10:39

Myslím že to nelze. Obecně záloha/archivace vzorci provádět nelze. Pokud se změní vstupní data změní se i výsledky, s tím se nedá nic dělat. To lze řešit pouze manuálně ctl+c a vložit jinak/pouze čísla. A nebo nějakým makrem.


Většinou je také dobré se zamyslet nad tím zda je ta archivace opravdu nutná, zda to nelze řešit jinak.

#5 Re: Calc » jazykova zmena » 13. 5. 2020 16:06:55

… jazyk můžete vybírat i sofistikovaněji pomocí rolovacího tlačítka "platnost dat" a na jeho základě se bude v oné buňce X1 měnit číslo asi pomocí vzorce typu: if(A1="česky";1;if(A1="anglicky";2;if(A1="německy";3;4)))) nebo nějak pomocí maker, ale myslím že to není potřeba.

#6 Re: Calc » jazykova zmena » 13. 5. 2020 15:52:52

Ano, dělám běžně. Na listu data mám jazykovou tabulku. Prostě ve sloupcích česky / anglicky / německy / francouzsky

pak v tabulce je vzorec např: =INDEX($data.$A$1:$D$100;3;X1) kde trojka znamená umístění na řádku (to je vždy pevné na příslušné buňce) a X1 je odkaz na buňku kde měním jazyk pomocí čísla.

#7 Re: Calc » Automatické doplnění hodnot v řádku - VYŘEŠENO » 28. 4. 2020 10:38:55

když zadáte do buňky E2 a roztáhnete dolů tak se hodnoty mění tak že v příslušném řádku se rovnaji a níže se pak opakují. Ovšem podmínkou je buňky ve sloupci B neobsahují vzorce tzn. jsou prázdné. Pokud obsahují vzorece pak místo isblank bych zkusi if(B2=0;E1;B2)


EDIT: mě to funguje perfektně :-)

#9 Re: Calc » dotaz na web xml +-VYŘEŠENO » 17. 4. 2020 20:14:55

Tak teď už docela použitelná verze. Čtení xml tam sice není, ale ten text už čtu krapet jednodušeji.

Sub NajdiFiremniUdaje

Dim xmlHtp  As Object
Dim sURL    As String
Dim XMLDOC  As Object
Dim strResponse As String
Dim dIco as double
dim ico as string
dim doc as object
dim list as object

Dim Pozice(4) as string
Dim Konec(4) as string
Dim Hodnota(4) as string

Pozice = Array("<D:OF zdroj=","<D:UC>","<D:PSC>","<D:N>","<D:DIC zdroj=")
Konec = Array("</D:OF>","</D:UC>","</D:PSC>","</D:N>","</D:DIC>")


'<D:OF zdroj="OR">Název Firmy s.r.o.</D:OF>
'<D:UC>Uličníkova 12345</D:UC>
'<D:PSC>11000</D:PSC>
'<D:N>Vejprty</D:N>
'<D:DIC zdroj="DPH">CZ00123456</D:DIC>

	doc = thisComponent
	
	vyber = doc.currentselection
	list = doc.sheets(vyber.rangeaddress.sheet)
	
	with vyber.rangeaddress
      radek = .startrow
      sloupec = .startcolumn
	end with
	
	dIco = list.getCellByPosition(sloupec, radek).value 'Prostě se nechá kurzor na políčku s IČem a zmáčkne se tlačítko, ičo musí být jako číslo!
		
	xmlHtp = CreateObject("MSXML2.XMLHTTP")
	oleService = createUnoService("com.sun.star.bridge.OleObjectFactory") 
	XMLDOC = oleService.createInstance("Msxml.DOMDocument")

	if dIco <> 0 Then

		dic = ""
	
		ico = Format(dIco,"00000000")

		sURL = "http://wwwinfo.mfcr.cz/cgi-bin/ares/darv_bas.cgi?ico=" & ico

		xmlHtp.Open "GET", sURL, False  
		xmlHtp.Send
		XMLDOC.loadXML xmlHtp.responseText
		strResponse = xmlHtp.responseText
	
		For i = 0 to 4
		
			StartPozice = InStr(strResponse, Pozice(i))   
	  			If StartPozice <> 0 then
	  				izacatek = InStr(StartPozice, strResponse, ">") + 1' + len(Zacatek(i)) + 1
	  				ikonec =  InStr(izacatek, strResponse,Konec(i))
					Hodnota(i) = MID(strResponse, izacatek, ikonec - izacatek)
				end if
					
			list.GetCellByPosition(sloupec + 5 + i , radek).string = Hodnota(i)'Tohle je výstup, nutno upravit dle lokálních požadavků 
				
		Next i
	
	else
		msgbox ("Je zapotřebí nechat kurzor na ič",0,"Repete")

	end if

End sub

#10 Re: Calc » dotaz na web xml +-VYŘEŠENO » 16. 4. 2020 19:39:14

Zde makro, kdyby to někoho zajímalo. Není to nic moc, ale posloužilo. Ten systém načtení xml z webu tady v diskuzi myslím ještě nezazněl.

Sub xmlAresII

Dim xmlHtp  As Object
Dim sURL    As String
Dim XMLDOC  As Object
Dim strResponse As String
Dim dIco as double
dim ico as string
dim dic as string
dim doc as object
dim list as object
Dim FileNo As Integer
Dim CurrentLine As String
Dim Filename As String


xmlHtp = CreateObject("MSXML2.XMLHTTP")
oleService = createUnoService("com.sun.star.bridge.OleObjectFactory") 
XMLDOC = oleService.createInstance("Msxml.DOMDocument")

doc = thisComponent
list = doc.Sheets.GetByName("List2")

for i = 1 to 1210

	dIco = list.GetCellByPosition(13 , i ).value
	
	if dIco <> 0 Then

		dic = ""
	
		ico = Format(dIco,"00000000")

		sURL = "http://wwwinfo.mfcr.cz/cgi-bin/ares/darv_bas.cgi?ico=" & ico

		xmlHtp.Open "GET", sURL, False  
		xmlHtp.Send
		XMLDOC.loadXML xmlHtp.responseText
		strResponse = xmlHtp.responseText
rem celé to ukládání souboru by se dalo vynechat a použít přímo vyhledávání pomocí InStr v proměnné
rem strResponse podobně jako je to uvedeno níže po řádcích v souboru

		cesta = "C:\Temp_ares\"

		Filename = ConvertToURL(cesta & ico & ".txt")

rem nabízelo by se uložit jako xml a pak použít FILTERXML, ale to se mi nepodařilo

		FileNo = FreeFile
 
		Open Filename For Output As #FileNo
		Print #FileNo, strResponse
		Close #FileNo

		Open Filename For Input As FileNo

		Do While not eof(FileNo)
			Line Input #FileNo, CurrentLine
			StartPozice = InStr(CurrentLine, "D:DIC")   
	  		If StartPozice <> 0 then
	  			zacatek = InStr(CurrentLine, "CZ")
	  			konec =  InStr(CurrentLine,"</D:DIC>")
				dic = MID(CurrentLine, zacatek, konec - zacatek)
			end if
		Loop

		Close #FileNo

		list.GetCellByPosition(15 , i ).string = dic

	end if
	
	wait 500
	
next i

print "hotovo"

End sub

#11 Re: Calc » dotaz na web xml +-VYŘEŠENO » 16. 4. 2020 16:30:54

Hm chápu, dič je většinou CZ+ič, ale není to vůbec stoprocentní: "Daňové identifikační číslo (DIČ) je jedinečnou a jednoznačnou identifikací každého daňového subjektu, právnické nebo fyzické osoby, která je plátcem daně (daňovým poplatníkem). DIČ se sestává z kódu země a z číselné kmenové části - identifikátoru. U poplatníka fyzické osoby je identifikátorem obvykle jeho rodné číslo, u právnické osoby je to většinou jeho identifikační číslo (IČO). Výjimečně je u fyzické nebo právnické osoby použité vlastní číslo plátce (VČP), které je jednoznačné pro působnost v České republice."

Navíc pokud subjekt není plátce, tak bych dič nezadával.



Edit: tak stáhnout už to umím, heuréka. Pomocí tohoto odkazu: https://codingislove.com/http-requests-excel-vba/. Teď už jen přečíst.


EDIT2: nakonec to dělám primitivně. Stáhnu a uložím jako txt a hledám řetězec D:DIC a pokud najdu tak si příslušnou sekvenci přečtu a vložím do buňky. Mám to jako více méně jednorázovou akci, takže to dostačuje. Cyklus na databázi 1200 řádků už je easy.

#12 Re: Calc » dotaz na web xml +-VYŘEŠENO » 16. 4. 2020 15:58:59

pardon - špatně formulovaný dotaz. Jde mi systémové vyhledávání: zadám do buňky ič, ve vedlejší buňce se mi objeví dič. Mám databázi asi 500 IČ a potřebuji doplnit/ověřit DIČ, případně (ne nutně) i fakturační adresu.

#13 Calc » dotaz na web xml +-VYŘEŠENO » 16. 4. 2020 14:50:33

ludviktrnka
Odpovědí: 6

Ahoj, zkoušeli jste tahat data z Aresu? Nějak to nemohu vypátrat. Vlastně jsem za 3 hodiny zkoumání neudělal vůbec nic :-( Adresa dotazu je např tato "http://wwwinfo.mfcr.cz/cgi-bin/ares/dar … o=26185610" (ič míří na agrofert, ale ten není cílem :-).
Zkoušel jsem systém filterxml(webservice();xpath) ale už ten webservice() mi dává neustále chybu #value, takže k ladění cesty xpath jsem se vůbce nedostal. Na systém pomocí makra jsem také nedošel. Umím tahat z webu soubory, ale toto není soubor - resp. svým způsobem je ale je to výsledek dotazu, nejde to jednoduše stáhnout jako soubor s koncovkou .xml - nebo aspoň nevím jak. Nějaký nápad, zkušenost?
Konečným cílem je získat na základě iča zejména Dič (pokud existuje) a případně adresu, ale to není nezbytné.

#14 Re: Calc » Hodnoty z dvou řádku do jednoho » 1. 4. 2020 15:56:36

a nebo kontingenční tabulka:
pole řádku ID, jméno
pole sloupce stav
datová pole čas (součet)

vznikne stejná tabulka s trochu jiným uspořádáním: ID / jméno / off / on

EDIT: tabulku lze pak překopírovat a přetáhnout sloupce jak je potřeba a přejmenovat hlavičku


EDIT2: výhoda je že zdrojová tabulka může obsahovat chyby v uspořádání a nic se neděje. ID musí být ale vždy pouze 2x, pak už se nesmí opakovat, jinak vzniknou nesmyslné součty časů. Pokud by se ID opakovala je potřeba před zdrojová data předřadit sloupec se vzorcem = ROUNDDOWN(ROW()/2) a tento sloupec s názvem třeba ID_pom pak umístit na začátek do pole řádku v kontingenční tabulce

#15 Re: Calc » Hodnoty z dvou řádku do jednoho » 1. 4. 2020 15:40:16

Ahoj. Pokud by to bylo zcela pravidelně, tak by to šlo přeindexovat. (hlavička v řádku 1, data od řádku 2)
ID =INDEX($A$2:$D$10000;2*ROW()-3;1)
stavon = =INDEX($A$2:$D$10000;2*ROW()-3;3)
stavoff = =INDEX($A$2:$D$10000;2*ROW()-2;3)
jméno = =INDEX($A$2:$D$10000;2*ROW()-3;4)

#16 Re: Calc » Funkce MIN s prázdnou buňkou VYŘEŠENO » 23. 3. 2020 19:51:20

Je to tak že MIN prostě ignoruje prázdné buňky. Blbý je že v nápovědě o tom není ani slovo, přitom je to fakt důležitá funkcionalita.

#17 Calc » Funkce MIN s prázdnou buňkou VYŘEŠENO » 22. 3. 2020 16:09:47

ludviktrnka
Odpovědí: 2

Ahoj všem. Zadal jsem funkci =MIN(A1;200), buňka A1 je prázdná ale výsledek funkce je 200. Očekával bych výsledek 0 - nula. Buňka A1 je formátována jako číslo a navíc mám standardně zadanou funkcionalitu zpracování textu jako nulu. Nevíte v čem by mohla být chyba? Je to standardní?
(vím že podobně se chová PRODUCT který prázdnou buňku ignoruje, což je výhodná funkce, ale u MIN bych to nějak nečekal)

#19 Re: Calc » VYŘEŠENÝ - Zaokrouhlení na 1000 » 4. 3. 2020 18:30:44

buňku formátujte jako číslo s uživatelským formátem "# ##0 " bez těch uvozovek, ale na konci je důležitá mezera.
V buňce bude stále číslo skutečné ale zobrazí se jen tisíce tzn 286 376 => 286
a 286 873 => 287

#21 Re: Calc » Sdílení tabulky Calc - VYŘEŠENO » 14. 11. 2019 10:09:08

Je to v menu nástroje > sdílet sešit ... Ale osobně s tím nemám dobré zkušenosti. Je potřebo to otestovat na konkrétním případě. U mě to nezvládalo příliš velký s složitý soubor - prostě to padalo.

#23 Re: Calc » Vynechání určitých řádků při opisu do dalšího listu - VYŘEŠENO » 10. 10. 2019 21:56:32

Myslel jsem že jde o celé řádky a nikoliv o jednotlivá data. Já nabízím řešení pro celé řádky. Jestli jde tazateli o úplnou "kompresi" dat pak je to vaše řešení samozřejmě správné.

#24 Re: Calc » Vynechání určitých řádků při opisu do dalšího listu - VYŘEŠENO » 10. 10. 2019 17:01:11

Nebo takto?

Dim PodminkaSplnena As Boolean
PodminkaSplnena = True

For j = 1 To iVar
    If PodminkaSplnena = True Then
	k = k + 1
    End If    
    PodminkaSplnena = False
    For i = 0 To 9
	If InStr(oSheet2.getCellByPosition(8,j).String, "d") > 0 OR _
   	InStr(oSheet2.getCellByPosition(8,j).String, "o") > 0 OR _
    	InStr(oSheet2.getCellByPosition(8,j).String, "a") > 0 Then
        	PodminkaSplnena = True
		Select Case i
	       		'vkládáme do řádku k
		end Select
	End if
    Next i
Next j

#25 Re: Calc » Vynechání určitých řádků při opisu do dalšího listu - VYŘEŠENO » 8. 10. 2019 15:06:23

Já to většinou dělám vnořeným "cyklem" k=k+1, který se spustí jen při splnění podmínky. U vás běží cyklus "i" a "j" v každém případě, pokud byste uvnitř IF měl k=k+1 a řádek pak vázaný na "k" místo na "j", tak by to řádky vynechávat nemělo.

Zápatí

Používáme FluxBB