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

#1 8. 3. 2016 14:14:32

FilipDavid
Člen
Registrace: 8. 3. 2016
Příspěvků: 3

Převod makra z Excelu do Calcu?

Dobrý den,

mám makro napsané v Excelu a chtěl bych se zeptat, zda je možné toto makro převést do Calcu v OpenOffice? Programovat vůbec nezvládám a tak se obracím s prosbou na Vás. Nemáte nějaké tipy jak na to? Předem děkuji za odpověď.

Sub ares()

Application.ScreenUpdating = False 'potlačí obnovování obrazovky
Application.DisplayAlerts = False 'potlačí varovné hlášky

'vloží nový list na konec se jménem ares
Sheets.Add(After:=Sheets(Sheets.Count)).Name = "ares"

Sheets("ares").Activate 'přesun na tento nový list
'XML dotaz do ARESU s tím, že ičo máme na první listu v buňce C2 a importovná data chceme vložit do buňky A1
ActiveWorkbook.XmlImport URL:="http://wwwinfo.mfcr.cz/cgi-bin/ares/darv_std.cgi?ico=" & Sheets(1).Range("C2").Value, ImportMap:=Nothing, Overwrite:=True, Destination:=Range("$A$1")

Sheets(1).Activate 'přesun zpět na první list

'přenesení údajů z pomocného listu do kolonek formuláře
Sheets(1).Range("C4") = Sheets("ares").Range("AJ3") 'přenesení názvu firmy
Sheets(1).Range("C6") = Sheets("ares").Range("DA3") 'přenesení ulice
Sheets(1).Range("C8") = Sheets("ares").Range("CW3") 'přenesení města
Sheets(1).Range("C10") = Sheets("ares").Range("DF3") 'přenesení PSč

Sheets("ares").Delete 'smazání pomocného listu

Application.ScreenUpdating = True 'zapne obnovování obrazovky
Application.DisplayAlerts = FaTruelse 'obnoví varovné hlášky

End Sub

Offline

#2 8. 3. 2016 15:47:17

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

Re: Převod makra z Excelu do Calcu?

Tohle přímo převést nejde. Je nutné vše z gruntu naprogramovat. Nemělo by to být nic extra složitého. Podobnou věc mám pro Google Maps odkud doluji zeměpisnou šířku a délku.
     Ale i když by se to zadařilo, tak se Calc v Tomhle Excelu nevyrovná. K těmto funkcím Calc přístup nemá : Application.ScreenUpdating, Application.DisplayAlerts. Je to ale jenom kvůli urychlení práce, takže to není podstatné.
     Pokud tomu rozumím tak se jedná o nějaký placený přístup? Jde o tohle : XML dotaz do ARESU s tím, že ičo máme na první listu v buňce C2 a importovná data chceme vložit do buňky A1. Podle mne je Aresu zcela jedno kde to máte. On Vám v počítači nic hledat nebude. To by šlo jen v případě specializovaného programu, ale i tak by Server u klienta nic nehledal. Specializovaný klinet by server zavolal a hned by mu poslal ověřovací údaje. Následně (nebo současně s tím) by odeslal požadavek.
     Pak by zřejmě mohlo dojít k čekání které by se teoreticky mohlo přerušit uvedené procesy - (proto by asi bylo nutné dočasně odstavit obnovovací frekvence a chybové hlášky). Ale z toho makra je vidět, že nic jako jiný podprogram nevolá. Totiž ActiveWorkbook.XmlImport URL říká, že sešit načte rozhraní Aresu. Potom se vše odehrává jinak :


     Vy musíte odeslat ověřovací údaje (zřejmě elektronický podpis, nebo klientské číslo ap.). Následně Vám rozhraní stránek otevře přístup k databázi XML a Váš stroj přímo načte data z databáze XML.Které si ale Váš stroj sám zkopíruje a sám vloží do sešitu. Je otázka zda to můžete dělat na jedno spojení vícenásobně, nebo se připojit na každé extra.
     Na takové připojení je potřeba jen XML filtr, ale pochybuji, že by se dal naimportovat do Calcu. Oč se jedná? Takovéhle připojení bývá realizováno jako tunelové - bezpečnostní. To znamená také asi šifrované proudovou šifrou - ale může to být například jen Base64.


     Takže se zaplacením přístupu (nebo v rámci pracovišť MVCR ap. "zdarma" - ale Excel pak bude asi podmíněn.) získáte také vše potřebné. Nedivil bych se, když by toto normální excel neuměl.


     Běžná praxe při dolování dat je taková, že se zavolají ovládací prvky, které může normálně menuálně ovládat každý občan. Zadá se do inputu(ů) normálně text a ten se vrátí do výstupu a odkud se načte. Tedy žádné XML, ale obyčejný HTTP protokol.
     Pak se samozřejmě nemusí zastavit obnovení obrazu a odstavení chybových hlášek, protže jde o připojení veřejné - úplně běžné.


     Před pár dny jsem dotěžil databázi všech adres v CR (ze stránky MVCR jsem si stáhnul XML 52 Mb adres včetně popisných čísel). Vůbec to není legrace, ale rozsekal jsem to na "střediskové obce" to je asi 6250 obcí. Takže jednotlivé části jdou číst bez jakékoliv úpravy v normálním prohlížeči - a v Calcu. je to sice jen "strom", ale už to jde. Já z toho dály budu vytvářet klasickou CSV databázi a také budu teprve dělat dokument s XML formulářem, který to bude umět zobrazit stejně - nebo lépe nežli vlastní vyhledávací stránky MVCR.
     Ale to je jiný případ. Data Aresu asi nejsou poskytovány takto veřejně protože budou obsahovat také neveřejné údaje o firmách a Ares také asi musí něco vydělat (nic o tom nevím - domnívám se).
Ale i tak by to byla jistě práce za trest. Adresy MVCR obsahují v XML souboru také znaky, které smažou předchozí znak. Musel jsem vyvinout dost složitý proces abych to obešel. Několikrát jsem musel začít od začátku. Původně jsem si bláhově myslel, že to nechám na netu převést do CSV. Z 10-ti portálů to uměl načíst jen jediný a to co vyšlo z Desktopových programů byla hrůza a děs - mimo chyb, které tam také byly. Ale většina programů i portálů po načtení zamrzla.


     Celkem nepochybuji o tom, že by se to mělo dát v Calcu udělat - ale myslím si že je to uděláno tak, aby to jiný program nežli zmermocněný Excel neuměl. Lze načítat data z veřejného přístupu, ale to bych asi musel naštudovat a netroufnu si říct zda bych to osobně vůbec zvládnul a ky by to bylo.
     Samozřejmě nejsem tu jen Já, ale to je můj názor. Tedy měl bych zájem to udělat pro státní správu (to co dělám s adresami by mělo sloužit zejména pro tvorbu záchranných plánů integrovaných záchranných sborů včetně systematiky užití dronů ap.) Ale mám své práce nad hlavu a tvrdě nestíhám, takže to ani zkoušet nyní nebudu - možná později, ale spíš vůbec.
     Jsem ochoten poradit, ale takovému člověku, který už něco o téhle problematice ví. Šikovných lidí je myslím dost. Ale začátečníkovi nechci vysvětlovat problém od základů.


     Chdí sem pár šikovných uživatelů. Když by se toho někdo ujmul - tak by to bylo něco jiného. Omlouvám se - ale z praktických důvodů to nepůjde.

Editoval neutr (8. 3. 2016 15:50:34)


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

#3 8. 3. 2016 16:16:09

lp.
Člen
Registrace: 24. 9. 2009
Příspěvků: 842

Re: Převod makra z Excelu do Calcu?

To makro zřejmě tahá jen 1 ico.

Zkuste to funkcema (WEBSERVICES a FILTERXML).

(LO, novější verze)

Offline

#4 8. 3. 2016 19:45:26

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

Re: Převod makra z Excelu do Calcu?

Tak se musím opravit vypínat obnovování obrazovky lze - tedy pouze z kancelářského balíku, ale pokud je spuštěný a napopředí, tak OS neobnovuje pokud nenačítá. (Tedy nevím jestli chdí například ty otravné reklamy, ale myslím že musí být browser na popředí.)
     Napadlo mne, že když to dělají v Excelu tak to má důvod - rychlost. A to by se mi také hodilo, takže jsem hledal a našel. Takže se ráno podívám - honím kde co abych zrychlil - proto dík za nápad.


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

#5 8. 3. 2016 20:53:15

FilipDavid
Člen
Registrace: 8. 3. 2016
Příspěvků: 3

Re: Převod makra z Excelu do Calcu?

Já jsem zkoušel konvertor, ale neúspěšně. Studoval jsem také syntaxi OpenOffice, ale nešlo mi toto makro přeprogramovat. Měl bych v rámci školního projektu vytvořit makro pracující s ODF či XML formátem, ale nic mě nenapadlo, kromě tohoto. Bohužel to i přes svou snahu neovládám.

Offline

#6 9. 3. 2016 10:16:27

lp.
Člen
Registrace: 24. 9. 2009
Příspěvků: 842

Re: Převod makra z Excelu do Calcu?

Pokud máš problém s kopírováním obsahu buněk, tak si najdi jiné téma. Parsování xml v calcu je o něco složitější. Pokud se tomu nedá vyhnout, tak doporučuji to nejprve vyřešit funkcemi listu a pak to převést do makra, třeba voláním funkcí.

Offline

#7 9. 3. 2016 14:45:43

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

Re: Převod makra z Excelu do Calcu?

Musím říci že tato problematika by mě též docela zajímala. Pokud zadám adresu s nějakým ičem do vyhledavače např.: http://wwwinfo.mfcr.cz/cgi-bin/ares/dar … o=24302171 objeví se xml soubor (docela slušně čitelný :-). Vzhledem k tomu že LO obsahuje XML filtr "StarOffice XML (Calc)" mělo by jít nějak ten soubor dostat do buněk. Snad by to neměla být žádná excelovská specialita ... Ale sám tedy nevím jak na to. Vyhledávání je Free, takže je to jen otázka nastavení xml filtru a správného volání.


LibreOffice 5.4.

Offline

#8 9. 3. 2016 16:47:12

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

Re: Převod makra z Excelu do Calcu?

Já na tom nyní ludvíku pracuju. Sice ne úplně dohloubky, zatím jen tak aby šlo číst tak jako když se to děje manuálním kliknutím - tedy zadáním vstupů a načtení výstupu makrem. Takže nevím za jak dlouho s tím budu hotov, ale myslím že by to mohlo být brzo.


     Pro Vás a ostatní úživatele postup těžby z netu přes uživatelské rozhraní :


1. Je nutné mít dobrý browser a i připojení (ale stačí aby bylo stabilní - nemusí to být extra rychlé.)
     - to dobrý znamená aby měl ve výbavě nástroje pro vývojáře. Já používám Firefox - ten je asi nejlepší. Proto popíšu postup s Firefoxem - ale možná že to bude fungovat i pro jiné prohlížeče.


2. Otevřu stránky které chci těžit. Samozřejmě se musíte zorientovat co se musí vyplnit a kde se odečte výsledek. Často to bývá v jediném prvku (bývá iznačen IO "io" jako Input - Output). To je ale jedno.


3. Klepnu myší na okénko vstupu a pravým myšítkem zavolám "prozkoumat prvek". Je hned vybraný (vymodřený) a tak stačí Ctrl+C a vložit do sešitu.


4. U výstupů to bývá někdy (zrovna jako v Aresu) tak, že se to dává do nové stránky, respektive se vygeneruje do té doby neviditelný prvek (rámec). Pak máme více možností, ale zase když je od počátku výstupní okno vidět, tak je to stejné jako se vstupy a tím pádem velmi jednoduché.
(například Google translator).


5. Mezi vstupem a výstupem bývá různě dlouhá prodleva. Tady na Aresu je v řádech sekund. To znamená, že se musí výstup iterovat po časových intervelech. Při tom se pro jistotu musí vždy znovu načíst makrem výstupní prvek - to když by došlo k přerušení, nebo pádu na cestě.
     To znamená načítat výstup cyklem (nejlépe For ..Next) který obsahuje prodlevu například 5 sekund protože se nesmí stát, aby na server šlo za sebou více dotazů na které by musel server odpovídat úplně stejně.
     (Z toho důvodu makro tazatele Filipa obsahuje vypínání obnovování obrazovky). Prostě odbavení na serveru i bez problémů nějaký čas trvá a obávám se, že 1 vteřina je málo - je to ale jistě individuální podle typu serveru, rychlosti připojení a doby zpracování na Vaší (klientské) straně. V neposlední řadě jde o denní či noční hodinu - tedy podle zatížení serveru.)


6. Načtený výsledek ukládáme nejlépe tak, aby šlo cyklem také opakovat hledání ze seznamu, proto výstup nestačí na jeden řádek ale musí se strukturovat podle Vás do různých buněk. To vše aby se daly výsledku ukládat pod sebe - jedno volání na samostatný list jak popisuje Filip je nepraktické.
     Postupů se nabízí jak jsem uváděl více a většinou jde o mnohem složitější volání. Ares ale nabízí jedno naopak "hezké" a snadnější.
     Je to například přímo tisk. To se mi moc nelíbí, protože pak pomocí JavaSriptu (nebo JS) leze na porty mého počítače, zavolá mojí tiskárnu a zřejmě také spustí tisk (tohle jsem už netestoval, ale stejně bych to asi vytiskl do souboru a raději vykuchal bytovými operacemi.)
     Další cestou je dávkové zpracování přes XML - dále ještě nabízí Basic makra (odtud asi Filip to makro vybral). Tedy potvrdilo se jak jsem se domníval - podpora MSO - kolik a kdo dostal za takovéhle upřednostnění? Ale je to v podstate možnost přejinačit to do našeho StarBasicu - Takže lepší než nic.
     Nyní se zabývám obecnější cestou - přes uživatelské rozhraní zejména kvůli Filipovi který mne inspiroval k vypínání obrazovky, ale je to univerzální přístup takže je prakticky nepostradatelný - například pro stránky, které takový servis jako je MVCR, respektive MFCR nenabízí.


7. Dále posílám 2 makra. Která sice občas použiju, ale momentálně nevím zda nedělají nějakou rotyku. Čas od času se něco změní a některé makro na příklad na Libre Office napracuje - kvůli změnám. Prakticky jsem je získal na zahraničních fórech a při vyhledávání OpenOfficeBasic, nebo podobně OpenOfficeMacro a snad i jinak. Po hříchu už nevím odkud a kdo je udělal. Snad se na mne autoři nebudou hněvat když by to zjistili (že jsem jejch jména neuvedl).


Makro obecně :

Sub Tezit_NetURL()
	Dim oFunc as Object
	Dim obsah as String 
	Dim oUrl as String, oXML as String
	Dim oFirma as String, oMesto as String, oAddr as String, oICO as String
	Dim oDisp as String
		oICO = "203860294"
		obsah = oICO
		oUrl = "http://wwwinfo.mfcr.cz/cgi-bin/ares/darv_std.cgi?ico=" & obsah
		oFunc = createUnoService( "com.sun.star.sheet.FunctionAccess" )
		oXML = oFunc.callFunction("WEBSERVICE",array(oUrl))
		print oXML
		'oFirma = oFunc.callFunction("FILTERXML", array(oXML, "" ))
		'oMesto = oFunc.callFunction("FILTERXML", array(oXML, "" ))
		'oAddr = oFunc.callFunction("FILTERXML", array(oXML, "" ))
		'oICO = oFunc.callFunction("FILTERXML", array(oXML, "" ))
End Sub 

     Je to jen na rychlo upravené abyste viděli že to ARES načítá, ale musí se to dotáhnout. Dejte pozor - hlásí to že můžete být serverem zakázáni - je to kvůli vadným zadáním. Tak pozor ať nejste bloknuti. Podívejte se na portál - podmínky provozu a podobné informace.
     Původní makro načítalo ZIP a pak se to samo rozbalilo, ale kde mám původní verzi ví bůh. Zajímavé je to tím, že využívá WEBSERVICE - tedy funkci, která je implementovaná do sešitu jako vzorec.
[code]Function GetGeoData(sSearch as String) as String '
   If Len(sSearch) = 0 Then Exit Function 'we dont need empty cells <img src="http://s.w.org/images/core/emoji/72x72/1f609.png" alt="

Editoval neutr (9. 3. 2016 17:08:32)


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

#9 9. 3. 2016 17:34:19

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

Re: Převod makra z Excelu do Calcu?

Už potřetí se mi stalo, že mi to nenahlásí chybu, zprávu to roztrhne a je tam jen něco. Raději tu další část dám sem tedy do jiného okna - počtvrté už to testovat nebudu. Že si to nevymýšlím je vidět, protože předposlední řádek ukazuje tag "code" a když bych ho nechal v příspěvku neuzavřený, tak mi to server nevezme. Když to znovu načtu, tak to na mne vyžaduje koncový tag - ten jak můžete vidět v první části příspěvku není. Počtvrté to testovat nebudu - kód druhého makra obsahuje nechtíc tagy v poznámkách které webserver také akceptuje. Proto jsem nucen poznámky smazat - jinak to vyhodí chybu.


     Takže to druhé makro je těžba zeměpisné šířky a délky z Google. Bohu žel asi vrací výsledky ve stopách (originálně to lze v Google navolit). To jsem sice už dělal, ale nevím jestli je tohle ta správná verze s metry. Viděl jsem návody na přepočítávání takže někdy přepočítávám a jindy předělám dotaz. Nyní chystám verzi pro stavby databází, ale tahat Longitude, Latitude a Altitude budu ze Seznamu a tohle mám jen tak jako vzor.

Function GetGeoData(sSearch as String) as String '
   If Len(sSearch) = 0 Then Exit Function 
   URL = "http://maps.googleapis.com/maps/api/geocode/xml?sensor=true&address=" 
   URL = URL & sSearch          'create the searchstring
   oSimpleFileAccess = createUnoService( "com.sun.star.ucb.SimpleFileAccess" ) 
   On Error GoTo ErrorResponse
   oInputStream = oSimpleFileAccess.openFileRead(URL) 'use the URL
   oTextStream = createUnoService("com.sun.star.io.TextInputStream") 'get the data from the web
   oTextStream.InputStream = oInputStream 'this is the data
   aDelimiters = Array(ASC(">"),ASC("<")) 'as the stream is segmented with ">" and "<"
   sLastString = ""
   Do While NOT oTextStream.isEOF 'go through the google output
      sThisString = oTextStream.readString(aDelimiters,True) 
      Select Case sLastString 'now search for the entries
         Case "lat": 'latitudes
            sLat = sThisString  
            Case "lng": 'longitude
            sLon = sThisString
      End Select
      sLastString = sThisString
   Loop
   GetGeoData =  " Longitude: " & sLon & " Latitude: " &sLat 'this is our output in  the new cell
   oInputStream.closeInput()
   Exit Function
   ErrorResponse:
   GetGeoData = "no values found!!!"
End Function

     Jedná se o funkci, která se volá jako vzorec ze sešitu například :
=GETGEODATA("Praha") nebo :
=GETGEODATA("Praha , Václavské náměstí 19")

Editoval neutr (9. 3. 2016 17:53:40)


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 10. 3. 2016 01:03:33

lp.
Člen
Registrace: 24. 9. 2009
Příspěvků: 842

Re: Převod makra z Excelu do Calcu?

ludviktrnka napsal(a)

Musím říci že tato problematika by mě též docela zajímala.

LO 5.0.?

V A1 je ico
V A2 je:

=WEBSERVICE("http://wwwinfo.mfcr.cz/cgi-bin/ares/darv_std.cgi?ico=" & $A$1)

Jméno firmy:

=FILTERXML(SUBSTITUTE(SUBSTITUTE($A$2;"are:";"");"dtt:";"");"//Odpoved/Zaznam/Obchodni_firma")

Ulice:

=FILTERXML(SUBSTITUTE(SUBSTITUTE($A$2;"are:";"");"dtt:";"");"//Odpoved/Zaznam/Identifikace/Adresa_ARES/Nazev_ulice")

Obec:

=FILTERXML(SUBSTITUTE(SUBSTITUTE($A$2;"are:";"");"dtt:";"");"//Odpoved/Zaznam/Identifikace/Adresa_ARES/Nazev_obce")

PSC:

=FILTERXML(SUBSTITUTE(SUBSTITUTE($A$2;"are:";"");"dtt:";"");"//Odpoved/Zaznam/Identifikace/Adresa_ARES/PSC")

atd.

Ty substituce tam jsou proto, že FILTERXML má problémy se jmennými prostory, tak je mažu.

Do konkurence to má daleko, ale jde to.

Offline

#11 10. 3. 2016 09:03:20

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

Re: Převod makra z Excelu do Calcu?

díky - toto funguje perfektně. Akorát v buňce A2 se krásně vyjede to xml ale chybí tam ta "odsazená" struktura, která je vidět v prohlížeči, takže výroba toho dotazu je docela komplikovaná - nicméně jde to. Super - určitě se bude hodit.

Zkoušel jsem to makrem, ale nějak se vůbec nedaří to xml načíst. Když jsem to stejné zkoušel s html tak to funguje perfektně.

sub Tezit_xml
Dim adresa As String
dim osoubor as object
dim bunka as string
dim s1 as object

	adresa = convertToURL("http://wwwinfo.mfcr.cz/cgi-bin/ares/darv_std.cgi?ico=24302171")
    dim arg(1) as new com.sun.star.beans.PropertyValue
	arg(0).Name = "FilterName"
	arg(0).Value = "StarOffice XML (Calc)"
	arg(1).Name = "Hidden"
    arg(1).Value = TRUE
	osoubor = starDeskTop.LoadComponentFromURL(adresa,"_blanc",0,arg())
	s1 = osoubor.Sheets(0)
    bunka = s1.GetCellRangeByName("A1").String
    print bunka
		
end sub

LibreOffice 5.4.

Offline

#12 10. 3. 2016 10:38:07

lp.
Člen
Registrace: 24. 9. 2009
Příspěvků: 842

Re: Převod makra z Excelu do Calcu?

To co se natahne co calcu je to co je posláno. Prohlížeče v nějaké podobě xml parsují a formátují.

Offline

#13 10. 3. 2016 11:52:06

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

Re: Převod makra z Excelu do Calcu?

to neutr: do příkladu jste zadal neexistující IČO, takže to nemůže fungovat, pokud tam dáte nějaké existující tak už to jede (po drobné úpravě s tou substitucí), vlastně tedy je to ale jen přepis ze sešitu. Ale možná je to odpověď pro tazatele, pro mě to je určitě velice přínosné.

Sub Tezit_NetURL()
	Dim oFunc as Object
	Dim obsah as String 
	Dim oUrl as String, oXML as String
	Dim oFirma as String, oMesto as String, oAddr as String, oICO as String
	Dim oDisp as String
		oICO = "24302171"
		obsah = oICO
		oUrl = "http://wwwinfo.mfcr.cz/cgi-bin/ares/darv_std.cgi?ico=" & obsah
		oFunc = createUnoService( "com.sun.star.sheet.FunctionAccess" )
		oXML = oFunc.callFunction("WEBSERVICE",array(oUrl))
		oXML = oFunc.callFunction("SUBSTITUTE",array(oXML,"are:",""))
		oXML = oFunc.callFunction("SUBSTITUTE",array(oXML,"dtt:",""))
		'print oXML
		oFirma = oFunc.callFunction("FILTERXML", array(oXML,"//Odpoved/Zaznam/Obchodni_firma"))
		'oMesto = oFunc.callFunction("FILTERXML", array(oXML, "" ))
		'oAddr = oFunc.callFunction("FILTERXML", array(oXML, "" ))
		'oICO = oFunc.callFunction("FILTERXML", array(oXML, "" ))
		print oFirma
End Sub 

Editoval ludviktrnka (10. 3. 2016 11:54:14)


LibreOffice 5.4.

Offline

#14 10. 3. 2016 13:05:22

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

Re: Převod makra z Excelu do Calcu?

Ludvíku vydržte - už to ladím. Bude to vzorový sešit. Podle zadání je tam toho mnohem víc. Například to vypínání obrazovky - oni to možná kontrolují. Další věc - vyhrožují, že chybné zadání budou blokovat - což se také už možná stalo. Je dost možné, že zablokují všechny koho s tímto přístupem nachytali.
     Včera jsem se také večer nemohl připojit a ráno to šlo i když měli evidentně omezený provoz nejméně do 6.30. To číslo je namátkou vybrané z existující firmy. Zadejte si to manuálně do vyhledavače ARESU a uvidíte.
     Dál je tam požadavek na to, aby výstup šel do jediného řádku, ale zato do různých sloupců. To jste avizoval že je to pro Vás problematické. Nic na tom není. Jen stačí zadat jako separátory tabulátory, respektive něco vhodného. Na to se musí dělat testy a když by to nečlo jinak, tak se musí přechroupat řetšzec bytovými operacemi.


     K tomu co napsal "lp." - má pravdu ten Váš kód nechodí - ani nemůže i kdyby byl volaný jako sekundární, respektive funkce. Ale já využívám podobný jen jako filtr - sešit do Temporay - načtu výstup - zničím ho pomocí Kill.
     Samozřejmě je to funkce volaná z úplně jiného makra - mimochdem toho co kritizujete, ale bez těch filtrů které jsem bloknul poznámkou - ty uvedené filtry jsou pro obecný popis v podstatě stejně jako když vybíráte pomocí Webservice ze sešitu.
     Pokud byste se úpodíval do stránek ARESU našel byste vzorová volání :

'-------------------------------------------------------------
'Základní volání je "všeobecné" - jako informace na adrese :
'http://wwwinfo.mfcr.cz/ares/ - vybrat 1. položku ze seznamu "3. Přístup pomocí metody GET"
'http://wwwinfo.mfcr.cz/cgi-bin/ares/darv_std.cgi?ico=27074358
'http://wwwinfo.mfcr.cz/cgi-bin/ares/darv_std.cgi?obchodni_firma=ASSECO a.s.
'http://wwwinfo.mfcr.cz/cgi-bin/ares/darv_std.cgi?obchodni_firma=ASSECO+a.s.
'http://wwwinfo.mfcr.cz/cgi-bin/ares/darv_std.cgi?ico=00216151&jazyk=cz&xml=1&aktivni=false
'-------------------------------------------------------------
'Rozšířené volání je výpis z více registrů: Basic.... :
'http://wwwinfo.mfcr.cz/ares/ - vybrat 3. položku ze seznamu "3. Přístup pomocí metody GET"
'vstup + povinný parametr: = ico
'Příklad volání:
'http://wwwinfo.mfcr.cz/cgi-bin/ares/darv_bas.cgi?ico=27074358
'http://wwwinfo.mfcr.cz/cgi-bin/ares/darv_bas.cgi?ico=27074358&adr_puv=true
'http://wwwinfo.mfcr.cz/cgi-bin/ares/darv_bas.cgi?ico=00216151&jazyk=cz&xml=1&aktivni=false 
'-------------------------------------------------------------
'Obchodní rejstřík
'vstup : povinný parametr: = ico
'Příklad volání:
'http://wwwinfo.mfcr.cz/cgi-bin/ares/darv_or.cgi?ico=27074358&xml=0&ver=1.0.2
'http://wwwinfo.mfcr.cz/cgi-bin/ares/darv_or.cgi?ico=27074358&xml=1&rozsah=2&datum_platnosti=31.12.2009
'http://wwwinfo.mfcr.cz/cgi-bin/ares/darv_or.cgi?ico=27074358&xml=0&ver=1.0.2&stdadr=true
'-------------------------------------------------------------
'Registr živnostenského podnikání
'vstup : povinný parametr: = ico
'Příklad volání:
'http://wwwinfo.mfcr.cz/cgi-bin/ares/darv_rzp.cgi?ico=27074358&xml=0&ver=1.0.4
'http://wwwinfo.mfcr.cz/cgi-bin/ares/darv_rzp.cgi?ico=27074358&xml=1&rozsah=2
'http://wwwinfo.mfcr.cz/cgi-bin/ares/darv_rzp.cgi?ico=27074358&xml=0&stdadr=true
'-------------------------------------------------------------
'dotaz na standardizovanou adresu a mapu:
'vstup - Poznámka: nevyplněné parametry není nutné uvádět.
'Příklad URL: http://wwwinfo.mfcr.cz/cgi-bin/ares/darv_adr.cgi?obec=Praha&ulice=Podvinný+mlýn&cislo_do_adresy=2178&xml=2
'https://mapy.cz/zakladni?x=14.4869921&y=50.1074925&z=17&source=addr&id=9019430 

     Když by mne napadlo, že to budete kritizovat - nedal bych tam nic - ale já jsem to tam popsal a vysvětlil, že je to jen ukázka kterou máte použít jen 1x!!! k tomu abyste viděli že se výstup dá volat.


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

#15 11. 3. 2016 13:52:45

FilipDavid
Člen
Registrace: 8. 3. 2016
Příspěvků: 3

Re: Převod makra z Excelu do Calcu?

A nemohl by to někdo napsat do fungujícího dokumentu a uploadnout sem prosím? Mně to neustále hlásí chybu totiž.

Offline

#16 11. 3. 2016 14:56:01

lp.
Člen
Registrace: 24. 9. 2009
Příspěvků: 842

Re: Převod makra z Excelu do Calcu?

Už jsem to psal. Nejde o převedení vzorce ale o napsání samostatného makra.

Pokud na tomto makru trváš, nechápu, proč to nekonzultuješ ve škole.

Nebo je to projekt na téma najdi někoho, kdo to za tebe udělá?

Offline

#17 11. 3. 2016 19:39:14

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

Re: Převod makra z Excelu do Calcu?

For lp. - Filip si opradu neví rady a protřebeje pomoc. Tedy do jaké míry je otázka. Testuji celý den kofigiraci filtrů a popravdě neumím si poradit ani já. Technickyky spránný postup je výstup uložit jako soubor .xml a zpětně načíst jako ".csv", nebo .txt.
     Udělám test na schema (celou strukturu) a schema nesestavím i když je koncepčně popasané na začátku. Umím to rozebrat podle ASC znaků, ale řešení alá trnka je sice funkční ale neopakoatelé.
     Upřednostňuji řešení těžby řetězcem - tedy algoritmus kladivo - ale zpětně k filtru alespoň prozatím se dopracovat neumím.


     A tak musím trošku oponovat. Řešení je jistě úplně jednoduché, ale pochybuji že by to mohl zvládnou každý středoškolský učitel mezi oběděm a poslední dopolední přestávkou.


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

#18 12. 3. 2016 14:51:36

lp.
Člen
Registrace: 24. 9. 2009
Příspěvků: 842

Re: Převod makra z Excelu do Calcu?

neutr napsal(a)

Technickyky spránný postup je výstup uložit jako soubor .xml a zpětně načíst jako ".csv", nebo .txt.

Nesouhlasím. Pokud to má být obecnější řešení, považuji za vhodnější vytvořit šablonu, přidat ji do calcu a potom přes nový filtr načíst soubor.

neutr napsal(a)

Řešení je jistě úplně jednoduché, ale pochybuji že by to mohl zvládnou každý středoškolský učitel mezi oběděm a poslední dopolední přestávkou.

Řešení je poměrně jednoduché, viz předchozí příspěvek nebo příspěvek od ludviktrnka. Ani obecnější řešení makrem není složité pro toho, kdo kdo zná interface fitrů v calcu, kdo zná xslt a pár dalších drobností. Dokumentace calcu je i v tomto ohledu extrémně mizerná. Dále je také třeba čas a motivace. 

Po každém učiteli bych ani řešení nechtěl. V případě učitů informatiky bych ale jejich schopnosti nepodceňoval. Ovšem toto není úloha pro člověka, který zřejmě nezná základy programování v oo. V každém případě může učitel vhodně upravit zadání.

Offline

#19 13. 3. 2016 12:48:21

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

Re: Převod makra z Excelu do Calcu?

1/3 OMLUVA PRO pana Trnku a Vás a každého kdo testoval moje makro z článku #8.
________________________________________________________________________________
pro lp.
     Celkem s Vámi souhlasím. Snad bude na vysvětlenou stačit když se podíváte na link schema. Jak jsem na ten odkaz přišel? Celkem docela jednoduše. V každém validním XML kódu musí být odkaz :
________________________________________________________________________________



745 = řádek XML <are:Ares_odpovedi xmlns:are="http://wwwinfo.mfcr.cz/ares/xml_doc/schemas/ares/ares_answer/v_1.0.1" xmlns:dtt="http://wwwinfo.mfcr.cz/ares/xml_doc/schemas/ares/ares_datatypes/v_1.0.4" xmlns:udt="http://wwwinfo.mfcr.cz/ares/xml_doc/schemas/uvis_datatypes/v_1.0.1" odpoved_datum_cas="2016-03-13T00:01:09" odpoved_pocet="1" odpoved_typ="Standard" vystup_format="XML" xslt="klient" validation_XSLT="/ares/xml_doc/schemas/ares/ares_answer/v_1.0.0/ares_answer.xsl" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://wwwinfo.mfcr.cz/ares/xml_doc/schemas/ares/ares_answer/v_1.0.1 http://wwwinfo.mfcr.cz/ares/xml_doc/schemas/ares/ares_answer/v_1.0.1/ares_answer_v_1.0.1.xsd" Id="ares">


     Takže jsem na odkázanou adresu klik nul a zde můžete vidět jak jsem pochodil.
Snímek obrazovky


     Snad to stačí spolu s vysvětlením proč jsem reagoval tak jak jsem reagoval. Samozřejmě na vině jsem já. Vím že není problém seknout jednu, nebo i více chyb a nic se stát nemusí. Jenomže Ares na to upozorňuje i když z pochopitelných důvodů ne úplně přesně Podmínky používání Ares.
     Zejména nepříjemný je poslední řádek kde je toto : ......Obnovení přístupu k údajům aplikace ARES po jeho případném zákazu bude řešeno zásadně na základě dostatečných písemných záruk, které uživatel dohodne s Ministerstvem financí.


     Nedošlo mi, že i když varuji před opakováním testu, tak prvním použitím chyby se chyba zaregistruje a následně se s tímto porovnávají další chyby odkudkoliv přijdou. Zřejmě je pak už jen otázkou času až tam přibude jakákoliv další IP adresa, která má stejné příznaky.
     Tedy jak dlouho se chyby registrují? Teoreticky až do konce světa, ale zde se jedná o ochranu proti napadání serveru mnoha dotazy ve stejný okamžik, nebo v krátkém časovém úseku. Takhle totiž usoudí, že by mohlo jít o přípravu útoku jedním hekrem, nebo celou skupinou někdy v budoucnu. A to i za hodně dlouhou dobu.
     Takže když to udělají takto jsou schopni rozeznat útok i za 10 let a najdou původce - to budou právě Ti, kdož to testovali podle mého vzoru.


     Moje zkušenost je taková, že i když jsem se dostal do blokace, tak někdy po půlnoci se zákaz smaže. Takhle se to dělával téměř všude (před nějakou dobou). Bylo to nutné předělat tak, aby se našli původce kteří napadají státní instituce a podobně.
     Takhle jsem to testoval samozřejmě přes manuální rozhraní, ale po dost dlouhé době. Mezi tím se to změnilo. Proto jsem nepojal žádné podezření, a předpokládal že to při nejhorším bude jako dřív když jsem tyhle věci "osahával". No je to asi chabá výmluva, ale je pravdivá.


     Tehdy mi to šlo, ale také je pravda, že jsem to měl poznamenané jako hyperlink vedle kterého jsem načítal to IČO.
     Pak jsem to smazal - nebyl důvod to dál ověřovat. Teprve když sem napsal Ludvík Trnka v článku #13 to neutr: do příkladu jste zadal neexistující IČO, takže to nemůže fungovat, pokud tam dáte nějaké existující tak už to jede (po drobné úpravě s tou substitucí), vlastně tedy je to ale jen přepis ze sešitu. Ale možná je to odpověď pro tazatele, pro mě to je určitě velice přínosné.


     Tak jsem tomu nepřikládal příliš velkou váhu. Byl jsem přesvědčený, že číslo existuje. Ovšem Když jsem psal to makro, tak jsem jen sáh nul do archivu a našel na ukázku jak taková makra mohou vypadat. Zadal jsem dvě, ale spokojil jsem se s Chybou. Šlo jen o to, aby server reagoval.


     Našel jsem manuálně ulici v náhodném městě, kterou mi to vzalo, protože oni i pro manuální provoz limitují počet vět a když tam zadáte "Václavské náměstí" tak dostane návrat, že je to moc velký dotaz. Takže jsem postupně klikal na města podle jména jedné ulice. Nakonec jsem to vzdal a zadal jsem vyhledávání ve firmách kde se objeví více existujících čísel.
     Takže takhle jsem našel z jednoho odkazu 3 a ta jsem si poznamenal (IČa mohou mít různý počet číslic - tuším od 7 do 9). Proto jsem hledal příklady s různým počtem číslic. Nakonec hned to první mi vrátilo nějaký výsledek a ostatní jsem smazal. Tím pádem se mohlo stát to co se stalo. Odeslal jsem možná skutečně neexistující IČO, ale až do smazání i toho odkazu v sešitě jsem byl přesvědčen, že je vše ok. Chybovou hlášku jsem přikládal neupravenému filtru.
     Byl jsem si vědom, že mohou testovat validitu i například na to zda je vyřazen screen a nejen na to, zda dotaz má správný filtr. Takhle jsem to také okomentoval.

Editoval neutr (13. 3. 2016 13:05:44)


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

#20 13. 3. 2016 12:54:05

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

Re: Převod makra z Excelu do Calcu?

2/3 OMLUVA PRO pana Trnku a Vás a každého kdo testoval moje makro z článku #8.



     Takže nakonec jsem panu Trnkovi odpověděl asi opravdu příkře tak jak to nemám ve zvyku dělat, a tímto se také jmenovanému omlouvám. Samozřejmě že jsem nejdřív střílel a pak jsem testoval. A hopla - číslo nejde ani z manuálního rozhraní.
     Ovšem důvod může být obojí. Mohla to být moje chyba v zadání, ale také je to možná důsledek blokace. To by ovšem znamenalo, že můj postup zahájil hon na hackery který mi se mohl stát každý kdo to otestoval v původní verzi.


     Pokusím se z toho dostat ven všechny naše uživatele, ale na to musím jednat nejprve s Lukášem Jelínkem a následně s oddělením informatiky MFCR. Důsledkem v tom lepším případě bude, že se budou muset smazat všechny příspěvky, které obsahují nějaký kód který má základ v mých makrech.
     Navíc budu muset jít "s kůží na trh". Vím úplně přesně že by mohl zabrat jeden můj důkaz, ale v té chvíli už na mne bude nadosmrti padat podezření, že vše co se týká internetu bych uměl zcela vypreparovat. Ono je pravděpodobné, že už v takové databázi jsem. Proto když budu mít úspěch bude to jen pro Vás ostatní.


     Řešení jak popisuji v článku #17 je správné, ale právě proto, že se snažím proniknout více do hloubky používám jeden svůj nástroj kterým rozeberu každý XML, nebo HTML soubor. Najdu všechny tagy a sestrojím své schema. XSLT - to je v našem případě filtr je vlastně popisem jak najít registrovaný odkaz. To je cesta která je ale nejméně pro mne zavřená.
     Tam se dají najít přístupy - tedy to co se povedlo panu Trnkovi i když nevím jak ho to napadlo. Možná zná ještě jiný způsob jak najít konfiguraci dotazů.


     Problém je v tom, že ASI každé vyhledávání jednotlivého hesla musí být unikátní - to zajistí právě schema. Vyhledání více hesel musí mít zřejmě individuální příznaky. Také si povšimněte že každý výraz má jiné volání příklad ze stránek Aresu je dán v mém článku #14. Ve standardním režimu se dá volat : -
http://wwwinfo.mfcr.cz/cgi-bin/ares/darv_std.cgi? = základ
ico=27074358
http://wwwinfo.mfcr.cz/cgi-bin/ares/darv_std.cgi? = základ
obchodni_firma=ASSECO a.s.
http://wwwinfo.mfcr.cz/cgi-bin/ares/darv_std.cgi? = základ
obchodni_firma=ASSECO+a.s.
http://wwwinfo.mfcr.cz/cgi-bin/ares/darv_std.cgi? = základ
ico=00216151&jazyk=cz&xml=1&aktivni=false
     U ostatních režimů je základem volání  = základ a nejprve IČO + něco navíc. Takže teoreticky lze problém nalezení všech požadovaných docílit jediným dotazem, který který stačí specifikovat jako IČO.
     Původně jsem si myslel, že stačí použít na jedno volání několik filtrů a problém je vyřešen. To nešlo a tak jsem se chtěl podívat na shora uvedený odkaz jestli náhodou neexistuje "legální" postup. Samozřejmě - už jsem byl v klatbě. Ale mohu v ní být jen já sám, ačkoliv pan Trnka potvrzuje že asi nikoliv :-(

     Jenomže já ten výstup umím rozebrat nejen na jednotlivé tagy, ale i na jednotlivé znaky UTF8, respektive UTF16. Osobně testují nejen výstupy z IO, ale celé soubory. Například si zkopírují zdrojový kód stránky a pak ji umím volat a těžit i když nemá žádný IO. Takhle ale umím rozebrat kde co. Nyní se zabývám tvorbou filtru který otevře Calc jako by to byl přímo strojený účelový program.
     To ještě nezvládám dobře, ale (jestli) až uspěji tak se objeví okno, které= bude mít jenom jediné tlačítko v místě kde můžete vidět název souboru a název aplikace (ta tam musí zůstat, ale nebude tam slovo "Calc", nebo "Writer" ap.) nebude tam žádná další nabídka, kterou z aplikací znáte. Jen křížek a tlačítko které by mělo fungovat jako z hlavní nabídky "soubor", ale s namixovanými různými příkazy - v podstatě volání maker.


     To možná bude někomu připadat jako bláznivý sen - ale není. Já už dělám testy na všech možných souborech - zejména XML - a filtry jsou pro naše Aplikace dostupné. Podívejte se například do Calcu NÁSTROJE > NASTAVENÍ XML FILTRU, nebo MOŽNOSTI > AOO (LO) > CESTY. Jednoduše je máme v instalaci.
     Například jsem našel 2 návody viz například Parsing a XML File with SAX. Z toho půjde hlava kolem každému když se na to poprvé podívá. Autorem je můj oblíbenec Danny Brewer který už ale nemusí být mezi námi. whitepages Danny Brewer.

     Většina odkazů je na lidi v mém věku. Je podepsán pod mnoha makry a udělátky ale pokud vím tak nejmladší asi tak v roce 2007.
     Existují ale také jiné návody na parsery. Já když píšu o svém nástroji, tak je to také nástroj, který nahrazuje parser, ale dá se sním dělat asi víc věcí. Například projedu Xml nejprve od hora dolů a pak vedle z dola nahoru. Důvod to má dobrý. Pokud je zabudována ochrana zdroje tak se vsouvají bity na smazání předchozího, nebo možná následného bytu. Takže když se použije nestandardní přístup předdefinovaným xslt tak já to zjistím tak, že porovnám obě cesty (musí to být uloženo na stroji). Stane se, že některá cesta má jiný počet znaků, nebo i stejný, ale jiné znaky na stejných místech. Binární zápis převedu do čitelného a najdu asi všechny zádrhely.
     Ovšem některé operace - například šifrování pomocí Base64 mohou takovéto věci smazat nebo naopak přidat (zapisuje dlouhé varianty ASC a pomocí osmičkové soustavy ale na šifru je převede tak že načte pomocí méně bytové osmičkové soustavy. Toto zmenšení reprezentuje nárůst znaků o 33%)


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

#21 13. 3. 2016 12:55:53

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

Re: Převod makra z Excelu do Calcu?

3/3 OMLUVA PRO pana Trnku a Vás a každého kdo testoval moje makro z článku #8.



     Abych to nějak uzavřel :
     Filipovi jsem vděčný za nechtěné nakopnutí, a tak mu to udělám, ale nebude to mým nástrojem. Jsem schopen ho celý zašifrovat tak aby měl zašifrovaný nejen přístup ke knihovně, ale i celý obsah knihovny. Je to totiž něco z čeho mám už strach.
     Šifrování obecně je slabinou ODF formátu. S těmi zamčenými knihovnami maker je to tak, že se jen zašifrují tagy ale nikoliv obsah (většinou jen přepíší) xslt přístupy. Postupy se ale měnily. Takže to nemusí být stejné. LO mívá například problém vůbec knihovnu zamknout. Vše proběhne ok, ale po uložení a novém otevření je knihovna odemčená. Takže když to potřebuji, nezkouším ani zamykat v LO, ale udělám to hned v AOO a pak testuji.
     Prozradím Vám další slabinu - tu mají obě aplikace. Udělejte si dokument a skryjte s uzamčením třeba nějakou sekci nebo rámec. Jak se to dá obejít - snadno a nikdo to asi neví - a proto asi nehlásil. Dokument nejlépe ODT uložíme jako TXT a znovu načteme jako ODT - co myslíte bude to skryté a "zamčené" vidět? Otestujte - ale po novém otevření je vše vidět jako by tam žádná ochrana nikdy nebyla, ani skrývání.
     Takže já chystám verze které opravdu nikdo při ochraně neobejde. právě pro úřady chystám dávkovou konverzi dokumentů na specializovaný filtr. Očekávám, že se někomu ve státní správě otevřou oči. Současně s tím ale se stále více zabývá paranoickými úvahami co bude potom. Jenže nyní to asi prasklo. Slíbil jsem už asi přede dvěma roky, že takové dokumenty vytvořím. To umím, ale neuměl jsem šifrovat přímo do XML, takže když jsem si to otestoval, přišel jsem na to, že ochrana knihoven, respektive všeho v ODF (ale MSO ač si tohle je také asi vědomo) na tom není lépe.
     Nástroje pro svou potřebu vyvýjim pro možnost migrace každého typu dokumentu, který využívá XML tak aby šel dávkově načíst do ODF - že je to šifrované - detail který mohu zachovat i pro nově vzniklý dokument, ale s tím, že po prvním otevření se heslo převede na nový typ šifry.
     Mám funkční vzory šifer které nazývám spíš podle účelu - například odstavcová, která funguje podobně jako zamykání rámců a sekcí. Šifruje se přímo do aplikace a po převodu ODT-TXT-ODT se objeví - ale je nečitelná - šifrování a dešifrování chvilku trvá a tak jsem dík Filipovi přišel na způsob jak zrychlit. Asi bych to věděl, když bych měl IT vzdělání, ale nemám - jsem samouk.
     Jsem starší ročník a když jsem chodil do školy tak IT bylo v plenkách. I když jsem studoval příbuzné obory - také automatizaci tak nás zajímala jen kontaktová logika - ale co to je - to už vědí snad jen někteří elektrikáři nejspíš jen projektanti, nebo ti dříve narození.


     Takže slibuji, že se to pokusím napravit a Filipovi to udělám. Nyní jsem ale frustrovaný až na půdu, tak musí Filip počkat. Pro "lp." - Správný postup je tak jak jsem uváděl. Takové řešení, tedy uložit hned výstup jako XML (stačí přidat název třeba vyhledávaný výraz "IČO" a koncovku - to není obtížné) a načíst filtrem pro Calc (dost běžná operace) která se z principu nemusí programovat, ale pro automatizaci trošku programovat musíme. Samozřejmě načíst Calc a skrytě ho vydolovat. Jednotlivé výrazy pak dát na místo podle požadavku.
     Proč je to správný postup? ARES dovoluje pouze 1 výraz na 1 připojení. Při tom ale posílá XML, které všechny atributy obsahuje. Například jeho možnosti Free filtrů nedovolují hledat PSČ. Při tom v každém připojení je všechno. Ale pro xslt je tam znak pro načítání jediného výrazu. Ovšem tohle předělat už je na hraně zákona. Takže když se to udělá "správně" filtrem, tak je to porušování pravidel pro přístup.
     Jenže náš Calc je vynikajícím konverzním nástrojem, ale zdroj XML nesmí překročit počet řádků v sešitě pak usne a je vymalováno. Ono stačí mít slabší operační paměť a ani plný sloupec nepobere.
     Takže podle mne se v takovém případě žádné extra nástroje nepoužívají a takový postup bez zlého úmyslu nevede k žalobě která by jinak asi padla. Při tom by nezáleželo na tom, jestli jsem si udělal vlastní filtr, nebo jsem použil kladivo na XML.
     Ovšem zcela legální je požít Free volání extra na každý filtr a najít k tomu volací sekvenci, ale ona bude asi stejná.

oXML = oFunc.callFunction("SUBSTITUTE",array(oXML,"are:",""))
		oXML = oFunc.callFunction("SUBSTITUTE",array(oXML,"dtt:",""))
		'print oXML
		oFirma = oFunc.callFunction("FILTERXML", array(oXML,"//Odpoved/Zaznam/Obchodni_firma")) 

     Ty filtry jenom ukazují kde se má začít číst. Co se má číst musí být uvedeno v povolením volání. Tím se vytvoří znak pro viditelnost příslušné proměnné. Když jsem to studoval, tak jsem zjistil, že leží těsně vedle sebe. to are: je tag který zahrnuje ostatní pod sebou. příznak dtt: mají všechny výrazy stejně, a jsou to řekněme řádky tabulky (sloupce). Z nich se vybírá právě jenom ten, který je v tom kterém povoleném přístupu.
     Když byste uložili a otevřeli nějakým XML editorem, tak to uvidíte stejně jako při otevírání calcem, ale existují i postupy kdy se vše smaže - je potřeba nechat jen první řádek a (ani ten někdy nemusí být) a vše až k tagu are: který obsahuje tagy dtt: (Are: prostorů je tam více). Taktéž se vše smaže za ukončovacím tagem are:. Najednou nám vlastně vznikne jmenný prostor (are), který by mělo být možné načít pomocí upraveného Writeru s xml dokumentem. Je možné, že to vezme i bez jakéhokoliv mazání. Chce jmenný prostor </are:Ares_odpovedi>. Já ale nejsem to ochotný ani zkoušet. A musíte si uvědomit že možná stačí aby někdo podnikl útok na nějaký státní orgán a přijde si pro Vás brzo ráno zásahovka. :-)


     Takže se všem moc omlouvám.


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

#22 13. 3. 2016 23:39:09

lp.
Člen
Registrace: 24. 9. 2009
Příspěvků: 842

Re: Převod makra z Excelu do Calcu?

Varianta s vytvořením šablony.

Jednoduchá šablona, která souboru z aresu vyseparuje uvedené údaje vypadá takto:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
		xmlns:are="http://wwwinfo.mfcr.cz/ares/xml_doc/schemas/ares/ares_answer/v_1.0.1" 
		xmlns:dtt="http://wwwinfo.mfcr.cz/ares/xml_doc/schemas/ares/ares_datatypes/v_1.0.4" 
		xmlns:udt="http://wwwinfo.mfcr.cz/ares/xml_doc/schemas/uvis_datatypes/v_1.0.1">  

<xsl:template match="/">
  <office:document-content xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0"
		xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0"
		xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0"
		xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0"
		xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0"
		xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0"
		xmlns:xlink="http://www.w3.org/1999/xlink"
		xmlns:dc="http://purl.org/dc/elements/1.1/"
		xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0"
		xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0"
		xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0"
		xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0"
		xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0"
		xmlns:math="http://www.w3.org/1998/Math/MathML"
		xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0"
		xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0"
		xmlns:ooo="http://openoffice.org/2004/office"
		xmlns:ooow="http://openoffice.org/2004/writer"
		xmlns:oooc="http://openoffice.org/2004/calc"
		xmlns:dom="http://www.w3.org/2001/xml-events"
		xmlns:xforms="http://www.w3.org/2002/xforms"
		xmlns:xsd="http://www.w3.org/2001/XMLSchema"
		xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
			   office:version="1.0"> 

   <office:body>
    <office:spreadsheet>
     <table:table table:name="Ares">

      <!-- Formátujeme sloupce -->
      <table:table-row>
	<table:table-cell office:value-type="string"><text:p>ICO</text:p></table:table-cell>
	<table:table-cell office:value-type="string"><text:p>Firma</text:p></table:table-cell>
	<table:table-cell office:value-type="string"><text:p>Město</text:p></table:table-cell>
	<table:table-cell office:value-type="string"><text:p>Ulice</text:p></table:table-cell>
	<table:table-cell office:value-type="string"><text:p>PSČ</text:p></table:table-cell>
      </table:table-row>

      <!-- Process XML input: Insert one row for each payment -->
      <xsl:for-each select="are:Ares_odpovedi/are:Odpoved/are:Zaznam">
	<table:table-row>
          <!-- IČO -->
          <table:table-cell office:value-type="string">
	    <text:p><xsl:value-of select="are:ICO"/></text:p>
          </table:table-cell>
          <!-- Firma -->
          <table:table-cell office:value-type="string">
            <text:p><xsl:value-of select="are:Obchodni_firma"/></text:p>
          </table:table-cell>
          <!-- Město -->
          <table:table-cell office:value-type="string">
            <text:p><xsl:value-of select="are:Identifikace/are:Adresa_ARES/dtt:Nazev_obce"/></text:p>
          </table:table-cell>
          <!-- Ulice -->
          <table:table-cell office:value-type="string">
            <text:p><xsl:value-of select="are:Identifikace/are:Adresa_ARES/dtt:Nazev_ulice"/></text:p>
          </table:table-cell>
          <!-- PSČ -->
          <table:table-cell office:value-type="string">
            <text:p><xsl:value-of select="are:Identifikace/are:Adresa_ARES/dtt:PSC"/></text:p>
          </table:table-cell>

       </table:table-row>
      </xsl:for-each>
     </table:table>
    </office:spreadsheet>
   </office:body>
  </office:document-content>
</xsl:template>
</xsl:stylesheet>

Uloží se do souboru, třeba "ares.xsl".

Šablona se zadá do calcu:

Nástroje, nastavení xml filtru...

Záložka obecné:

Název filtru: Např. Ares_data
Aplikace: Vybere se calc (ods)
Jméno typu souboru: Např. Ares   (Bude v seznamu při otevírání souborů)
Přípona souboru : ponecháme xml

Záložka transformace:

XSLT pro import: Vybereme naši šablonu.

ok, zavřít.


Pro testování můžeme v prohlížeči otevřít známou adresu:

http://wwwinfo.mfcr.cz/cgi-bin/ares/dar … o=24302171

Stažený soubor uložíme.

v calcu soubor, otevřít, ve filtru souborů vybereme ares, najdeme uložený soubor a načteme.

Funguje v aoo i lo.

Trochu složitější šablona:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
		xmlns:are="http://wwwinfo.mfcr.cz/ares/xml_doc/schemas/ares/ares_answer/v_1.0.1" 
		xmlns:dtt="http://wwwinfo.mfcr.cz/ares/xml_doc/schemas/ares/ares_datatypes/v_1.0.4" 
		xmlns:udt="http://wwwinfo.mfcr.cz/ares/xml_doc/schemas/uvis_datatypes/v_1.0.1"> 

  <xsl:template match="/">
    <office:document-content xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0"
			   xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0"
			   xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0"
			   xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0"
			   xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0"
			   xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0"
			   xmlns:xlink="http://www.w3.org/1999/xlink"
			   xmlns:dc="http://purl.org/dc/elements/1.1/"
			   xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0"
			   xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0"
			   xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0"
			   xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0"
			   xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0"
			   xmlns:math="http://www.w3.org/1998/Math/MathML"
			   xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0"
			   xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0"
			   xmlns:ooo="http://openoffice.org/2004/office"
			   xmlns:ooow="http://openoffice.org/2004/writer"
			   xmlns:oooc="http://openoffice.org/2004/calc"
			   xmlns:dom="http://www.w3.org/2001/xml-events"
			   xmlns:xforms="http://www.w3.org/2002/xforms"
			   xmlns:xsd="http://www.w3.org/2001/XMLSchema"
			   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
			   office:version="1.0">
    
      <office:automatic-styles>

	<style:style style:name="co1" style:family="table-column">
	  <style:table-column-properties fo:break-before="auto" style:column-width="0.8cm"/>
	</style:style>
	<style:style style:name="co2" style:family="table-column">
	  <style:table-column-properties fo:break-before="auto" style:column-width="4.0cm"/>
	</style:style>
	<style:style style:name="co3" style:family="table-column">
	  <style:table-column-properties fo:break-before="auto" style:column-width="2.5cm"
					 style:use-optimal-column-width="true"/>
	</style:style>

	<!-- Styly čísel (N36: datum DD.MM.YYYY, N0: celé číslo, N106: psc ) -->
	<number:date-style style:name="N36" number:automatic-order="true">
	  <number:day number:style="long"/>
	  <number:text>.</number:text>
	  <number:month number:style="long"/>
	  <number:text>.</number:text>
	  <number:year number:style="long"/>
	</number:date-style>
	<number:number-style style:name="N0">
	  <number:number number:min-integer-digits="1"/>
	</number:number-style>
	<number:number-style style:name="N106">
	  <number:number number:decimal-places="0" number:min-integer-digits="5">
	    <number:embedded-text number:position="2"><xsl:text> </xsl:text></number:embedded-text>
	  </number:number>
	</number:number-style>
    
	<style:style style:name="ce1" style:family="table-cell" style:parent-style-name="Default">
	  <style:text-properties fo:font-weight="bold" style:font-weight-asian="bold" style:font-weight-complex="bold"/>
	</style:style>

	<style:style style:name="ce2" style:family="table-cell" style:parent-style-name="Default">
	  <style:table-cell-properties fo:border-bottom="0.035cm solid #000080"
				   fo:border-left="none" fo:border-right="none" fo:border-top="none"/>
	  <style:text-properties fo:font-weight="bold" style:font-weight-asian="bold" style:font-weight-complex="bold"/>
	</style:style>
	<style:style style:name="ce3" style:family="table-cell"
		     style:parent-style-name="Default" style:data-style-name="N106"/> 
	<style:style style:name="ce4" style:family="table-cell"
		     style:parent-style-name="Default"
		     style:data-style-name="N36"/> 
      </office:automatic-styles>

      <office:body>
	<office:spreadsheet>
	  <table:table table:name="Ares">

	    <!-- Formát pro 5 sloupců --> 
	    <table:table-column table:style-name="co1" table:default-cell-style-name="Default"/>
	    <table:table-column table:style-name="co2" table:default-cell-style-name="Default"/>
	    <table:table-column table:style-name="co3"
				table:number-columns-repeated="3"
				table:default-cell-style-name="Default"/> 

	    <!-- Vynecháme 1. řádek -->
	    <table:table-row>
	      <table:table-cell table:number-columns-repeated="5"/>
	    </table:table-row>

	    <!-- Zpracujeme XML vstup  -->
	    <xsl:for-each select="are:Ares_odpovedi/are:Odpoved/are:Zaznam">

	      <!-- Zpracujeme XML vstup: ICO, Firma, platnost  -->
	      <table:table-row>
		<table:table-cell/>
		<table:table-cell table:style-name="ce1" office:value-type="string">
		  <text:p>IČO</text:p>
		</table:table-cell>
		<table:table-cell office:value-type="string">
		  <text:p><xsl:value-of select="are:ICO"/></text:p>
		</table:table-cell>
		<table:table-cell table:number-columns-repeated="2"/>
	      </table:table-row>
	
	      <table:table-row>
		<table:table-cell/>
		<table:table-cell table:style-name="ce1"
				  office:value-type="string"><text:p>Firma</text:p></table:table-cell> 
		<table:table-cell table:style-name="ce1" office:value-type="string">
		  <text:p><xsl:value-of select="are:Obchodni_firma"/></text:p>
		</table:table-cell>
		<table:table-cell table:number-columns-repeated="2"/>
	      </table:table-row>
	
	      <table:table-row>
		<table:table-cell/>
		<table:table-cell office:value-type="string"><text:p>Založena</text:p></table:table-cell>
		<table:table-cell table:style-name="Datum" office:value-type="string">
		  <text:p><xsl:value-of select="are:Datum_vzniku"/></text:p>
		</table:table-cell>
		<table:table-cell table:number-columns-repeated="2"/>
	      </table:table-row>
	
	      <table:table-row><table:table-cell table:number-columns-repeated="5"/></table:table-row>
	
	      <table:table-row>
		<table:table-cell/>
		<table:table-cell table:style-name="Default" office:value-type="string">
		  <text:p>Platnost</text:p></table:table-cell> 
		<table:table-cell table:style-name="Datum" office:value-type="string">
		  <text:p><xsl:value-of select="are:Datum_platnosti"/></text:p>
		</table:table-cell>
		<table:table-cell table:number-columns-repeated="2"/>
	      </table:table-row>
	      <table:table-row><table:table-cell table:number-columns-repeated="5"/></table:table-row>
	
	      <!-- Adresa, hlavička -->
	      <table:table-row>
		<table:table-cell/>
		<table:table-cell office:value-type="string">
		  <text:p>Adresa</text:p></table:table-cell> 
		<table:table-cell table:number-columns-repeated="3"/>
	      </table:table-row>
	      
	      <table:table-row>
		<table:table-cell/>
		<table:table-cell table:style-name="ce2" office:value-type="string">
		  <text:p>Město</text:p></table:table-cell>
		<table:table-cell table:style-name="ce2" office:value-type="string">
		  <text:p>Ulice</text:p></table:table-cell> 
		<table:table-cell table:style-name="ce2"/>
		<table:table-cell table:style-name="ce2" office:value-type="string">
		  <text:p>PSČ</text:p></table:table-cell>
	      </table:table-row>
	
	      <table:table-row>
		<table:table-cell/>
	  
		<!-- Město -->
		<table:table-cell table:style-name="Default" office:value-type="string">
		  <text:p><xsl:value-of select="are:Identifikace/are:Adresa_ARES/dtt:Nazev_obce"/></text:p>
		</table:table-cell>
	  
		<!-- Ulice -->
		<table:table-cell office:value-type="string">
		  <text:p><xsl:value-of select="are:Identifikace/are:Adresa_ARES/dtt:Nazev_ulice"/></text:p>
		</table:table-cell>
		<table:table-cell office:value-type="string">
		  <text:p><xsl:value-of select="are:Identifikace/are:Adresa_ARES/dtt:Cislo_domovni"/>/<xsl:value-of select="are:Identifikace/are:Adresa_ARES/dtt:Cislo_orientacni"/></text:p>
		</table:table-cell>
	  
		<!-- PSČ -->
		<table:table-cell table:style-name="ce3" office:value-type="float">
		  <xsl:attribute name="office:value">
		    <xsl:value-of select="are:Identifikace/are:Adresa_ARES/dtt:PSC"/>
		  </xsl:attribute>
		  <text:p><xsl:value-of select="are:Identifikace/are:Adresa_ARES/dtt:PSC"/></text:p>
		</table:table-cell>
	      </table:table-row>
	    </xsl:for-each>
	  </table:table>
	</office:spreadsheet>
      </office:body>
    </office:document-content>
  </xsl:template>
</xsl:stylesheet>

Lze s ní přepsat předchozí.

Filtr lze použít i při otevírání souboru z webu, případně to celé spustit makrem:

Sub Main

    dim doc As Object
    dim sUrl as string
    oICO = "24302171"
	sUrl = "http://wwwinfo.mfcr.cz/cgi-bin/ares/darv_std.cgi?ico=" & oICO

    dim properties(0) as new com.sun.star.beans.PropertyValue
    properties(0).Name = "FilterName"
    properties(0).Value = "Ares_data"

    doc = StarDesktop.loadComponentFromURL(sURL, "_blank", 0, properties())
End Sub

(V LO funguje)

Jistě lze napsat šablonu, která načte a zobrazí celý soubor xml podobně, jako to dělají prohlížeče.

Offline

Zápatí