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

#1 Re: Calc » vzorec "oddeliť číslo od textu" » 10. 1. 2021 19:27:44

ještě by šlo obecnějí pomocí regulárního výrazu (nutno povolit v možnostech) a pro případ kdy není mezera nebo jsou ještě jiné jednotky:
=VALUE(LEFT(A1;SEARCH("[:alpha:]|[:space:]";A1)-1))

#2 Re: Calc » vzorec "oddeliť číslo od textu" » 10. 1. 2021 19:06:14

možností je více:
=VALUE(LEFT(A1;LEN(A1)-9))
=VALUE(LEFT(A1;SEARCH(" ";A1)))
=VALUE(SUBSTITUTE(A1;" Milimetr";"")
a nebo příkaz Data -> Text do sloupců ... a zadat mezeru jako dělící znak.

dvojtečka se lehce odstraní vzorcem: =SUBSTITUTE(A1;":";"")
a nebo prostě Najít/Nahradit ...

#3 Re: Calc » rozhození formátování při přenosu tabulky přes schránku VYŘEŠENO » 3. 1. 2021 12:49:33

Zkuste to ještě jednou :-). Otevře se políčko s předmětem a pole s textem. Políčko s předmětem lze editovat.

#4 Re: Calc » rozhození formátování při přenosu tabulky přes schránku VYŘEŠENO » 2. 1. 2021 10:53:04

Lze kopírovat list - tím se přesune celý obsah listu včetně formátu sloupců, relativní odkazy většinou přestanou fungovat (přesunou se na list stejně relativně vzdálený). List lze kopírovat (vložit) i do jiného souboru se stejným efektem. Původní data je pak nutné vymazat, nebo si tímto způsobem přenášet jen "šablonu" bez dat.

Kopírování se provádí z kontextového menu kliknutím pravým tlačítkem na název listu.

#5 Re: Calc » Nahrazení konců řádky v buňce » 14. 12. 2020 17:37:49

nebo mnohem jednodušeji vzorcem: =LEFT(A1;SEARCH(CHAR(10);A1)-1)


ještě edit: =VALUE(LEFT(A1;SEARCH(CHAR(10);A1)-1))

#6 Re: Calc » Nahrazení konců řádky v buňce » 14. 12. 2020 17:30:06

Takto?

Sub Main

doc = thisComponent
list = doc.getCurrentController.getActiveSheet()
MyString = list.GetCellRangeByName("A1").String
StringToFind = chr(10)
Position = InStr(MyString, StringToFind)-1
MyString = Left(MyString, Position)
MyValue = Val(MyString)
list.GetCellRangeByName("B1").Value = MyValue

End Sub

#7 Re: Calc » vyhledávání/porovnávání více hodnot - VYŘEŠENO » 10. 12. 2020 15:11:14

Toto bych asi řešil rozšířeným filtrm. Bokem si napíšete název sloupce (rep. názvy sloupců) dle kterých se bude filtrovat a pod ně položky které mají být vyfiltrované, pak označíte všechna data a zadáte rozšířený filtr, vyberete svůj bokem definovaný filtr a v rozšířených možnostech zadáte že chcete kopírovat bokem (nejlépe na nějaký čistý list), tam můžete mít nahoře nachystané sumy nebo jiné vyhodnocení. No a když filtr odklepnete tak se na tom čistém listě objeví vaše tabulka pouze s údaji, které tam chcete mít. Nachystané vzorce vám hned řeknou kolik těch dat je a případně další statistické výstupy dle zadání.

Případně lze takto použít kontingenční tabulku ale tam to zadání filtru není tak pohodlné.

Pokud si oblast filtru pojmenujete, nabídne se Vám a nebudete muste fitr pokaždé označovat. A stejně tak cílové místo.

#8 Re: Calc » Změna záporné částky na kaldnou » 9. 12. 2020 15:33:51

Tomu nerozumím. Základem je že v některém sloupečku musíte mít hodnotu faktury která se nijak nemění. Pak s tím můžete dělat cokoli. Tzn. v jiných sloupcích máte vyhodnocování - například dlužné faktury reagující na vyplnění data úhrady.

#9 Re: Calc » Změna záporné částky na kaldnou » 9. 12. 2020 15:13:01

Taková funkce neexistuje. Resp. funkce by musela čerpat hodnotu z jiné buňky, kde bude fakturovaná částka dejmo tomu X28 a pak bude vzorec v A28 vypadat =IF(D28;X28;-X28)

#10 Re: Calc » Načtení webové stránky z URL do Stringu (v Calcu) » 3. 12. 2020 23:56:40

webservice by vám měl vrátit kód stránky např.: webservice("https://forum.openoffice.cz/viewtopic.php?id=5880") většinou je to v této podobě nepoužitelné. Použije se to spíše na nějaké webové dotazy jako např. takto: webservice("http://www.cnb.cz/cs/financni_trhy/devizovy_trh/kurzy_devizoveho_trhu/denni_kurz.txt?date=10.06.2016") vrátí slušně strukturovaný text (nikoli html) s devizovými kurzy z 10.6.2016.

#11 Re: Calc » přechod win7 > win10 - VYŘEŠENO » 31. 10. 2020 15:38:02

... 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í.

#12 Re: Calc » přechod win7 > win10 - VYŘEŠENO » 31. 10. 2020 13:37:13

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.

#13 Re: Calc » přechod win7 > win10 - VYŘEŠENO » 31. 10. 2020 00:04:47

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.

#14 Calc » přechod win7 > win10 - VYŘEŠENO » 30. 10. 2020 11:33:41

ludviktrnka
Odpovědí: 9

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? :-)

#15 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.

#16 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??????

#17 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.

#18 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.

#19 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.

#20 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.

#21 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ě :-)

#23 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

#24 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

#25 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.

Zápatí

Používáme FluxBB