

Excel: kopírování vybraných dat do *xml souboru
Vlastně to tak trochu navazuje na mé dřívější dotazy/pokusy. Tohle je finále :)
Mám v *xlsm sešitu list s výsledky, které jsou výhradně ve sloupci A, v řádcích 1-x, bez vynechání. Počet řádků je proměnlivý, od cca 5 klidně po 500.
Makro pro označení oblasti je jednoduché
Sub Oblast_XML()
Cells(300, 1).End(xlUp).Offset(0, 0).Select
Range(Selection, Selection.End(xlUp)).Select
Selection.Copy
End Sub
Tuto vybranou oblast (pokaždé různě velkou) potřebuji nakopírovat do (makrem vytvořeného *xml souboru).
Ten název souboru mám pořešen, viz https://pc.poradna.net/questions/2962434-excel-jak-dostat-promennou-do-makra-pro-nazev-exportovaneho-souboru
Zbývá mi nějak vyřešit to samotné kopírování. V příkladu z předchozího odkazu (viz dále) jsem kopíroval vždy obsah buňky C17. Teď to bude A1 až A??, prostě ta vybraná pokaždé jinak "dlouhá" oblast. Název *xml souboru je v buňce C21.
Nástřel (řádek Data = ... pochopitelně nefunguje!):
Sub Tisk_XML()
Dim Data As String
Dim i As Integer
Data = Join(Application(List1.Range("A1:A??").Value))
i = FreeFile
Open ThisWorkbook.Path & "\" & Range("c21") & ".csv" For Output As #i
Print #i, Data,
Close #i
End Sub
Potřebuji nějak upravit tu oblast dat. Něco jako (vím, je to blbě) jsem tam naznačil, Data = Join(Application(List1.Range("A1:A??").Value))
Mohl bych tam možná nějak zapojit "pojmenovanou oblast", kdyby to první makro pokračovalo (v konkrétním případě bylo vybráno 13 řádků)
ActiveWorkbook.Names.Add Name:="oblast", RefersToR1C1:="=List1!R1C1:R13C1"
ActiveWorkbook.Names("oblast").Comment = ""
Ale neporadím si právě s tím proměnlivým počtem řádků. Ale tohle je možná zbytečný mezikrok, klíčové bude specifikovat (proměnlivou velikost oblasti) Data v tom druhém makru.
Jak na to?
Díky za tipy.
...já vím, poněkud přeexcelováno z mé strany...
Tak pánové, tady sem skončil. Se.u se tu s tím od 10:00 a výsledek 0![]:(](https://static.poradna.net/images/smiley/evilworry.gif)
Cesta jakési šablony, do které by se vkládala data nikam nevede. Výsledný soubor není validní.
Pokud xml vytvořím jako nový soubor v Notepad++ a nakopíruji do něj data z excelu má výslednou velikost 1,3 kB a je funkční !
Pokud xml vytvořím makrem se stejným obsahem je výsledná velikost 1,2 kB a soubor není validní.
Pokud xml soubor vytvořený makrem otevřu v náhledu pomoci TC (F3) má zmršenou interpunkci (Č, Ř ...), ale pokud jej otevřu pro úpravy (F4) vše je v pořádku kua !!!
VBA má na práci s xml knihovny, ale sem v (_!_) jak Baťa s dřevákama, netuším jak s tím pracovat.
Bohuzel jsem na Macu, tak nemoho vyzkouset, ale tohle by melo pomoct vyresit to kodovani...
https://www.mrexcel.com/board/threads/how-to-save-xml-file-in-utf-8-encoding.842452/
Tento řádek tam mám jako první, je to "povinná" součást toho souboru, který se nahrává na www stránky.
Problém je ale v tom, že já celou dobu v Excelu s tím nepracuji jako s xml, ale jako s textem. Akorát to mám nakopírované do souboru něco.xml (mohlo to být něco.abc, něco.cokoliv) - a to jen proto, že sobor s takovou příponou se na ty stránky dá nahrát.
Když to z Excelu do *xml nakopíruju ručně, je to OK. Když xml soubor nechám vytvořit Excelem, kopírování do něj už OK není.
Nevim, o kterem radku mluvis, ja se bavim o poslednim postu v tom vlakne (tedy o zpuobu, jakym Excel zapisuje ten soubor)...
Chci tim rict, ze bych rozhodne nepouzival kopirovani pres schranku, ale prochazel list a rovnou zapisoval ten soubor, s uz spravne nastavenym kodovanim...
Myslel jsem řádek
<?xml version="1.0" encoding="UTF-8"?>
To bych musel vše komplet předělat, protože s xml to vůbec neumím. To určitě dělat nebudu, to by mi zabralo spoustu hodin a ještě mnohem více hodin studia. Budu se muset spokojit s tím polořešením, ke kterému jsem se nakonec nějak dobral.
Cely problem je v tom, ze ten web vyzaduje tzv. XML v UTF8 s BOM (byte order mark)... pokud to spravne zapises musi to fungovat...
Otázkou je, zda v Excelu to jde, nějak z nuly takový soubor vytvořit. Protože to vyhazovalo chybu, viz výše, používám na to ten existující prázdný soubor, který kontrolou projde, je tedy asi s BOM.
Tohle všechno je už ale na mě moc, nejsem programátor, jen poučený uživatel Excelu.
Urcite to pujde pres ten ADODB.Stream, jen to nemam jak vyzkouset...
Pro zacatek bych zkusil podhodit Excelu prazdne .xml jen s BOM a upravit radek, takto:
Open ThisWorkbook.Path & "\" & Range("c21") & ".xml" For Append As #i
Slozena cesta musi ukazovat na jiz existujici .xml, kde bude jen BOM tedy soubor jen se znaky: 0xEF,0xBB,0xBF. Mozna to pojede...
Bohužel tudy cesta nevede, testováno. Jakmile se do souboru hrábne přes excel je po ...
Na konci TÉTO STRÁNKY je tvorba xml, bohužel nemám páru jak s tím potom pracovat dále.
Chlape, Ty bys zasloužil pořádnýho
!!!
Máš pravdu přes ten ADODB.Stream to funguje !!!
Pro L-Core: V referencích si zaškrtni příslušnou knihovnu!
Koukám na to jako blázen. Není to pro mě španělská, ale mnohem cizokrajnější vesnice.
Převelice děkuji. Tobě i ostatním zúčastněným.
Označuji vyřešeno.
Muselo!
Problém byl fakt jen ve způsobu ukládání, to že L-Core skládá to xml, takovým exotickým způsobem nemá vliv. Xml je normální textový soubor. Samozřejmě skládat to xml přes DOM by bylo lepší...