Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno 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... :-p

Řešení:

Jsou zobrazeny jen nové odpovědi. Zobrazit všechny
Předmět Autor Datum
Tak pánové, tady sem skončil. Se.u se tu s tím od 10:00 a výsledek 0 ]:( Cesta jakési šablony, do kt…
Siki83 08.12.2019 15:50
Siki83
Bohuzel jsem na Macu, tak nemoho vyzkouset, ale tohle by melo pomoct vyresit to kodovani... https:/… nový
MaSo 09.12.2019 08:12
MaSo
Tento řádek tam mám jako první, je to "povinná" součást toho souboru, který se nahrává na www stránk… nový
L-Core 09.12.2019 11:31
L-Core
Nevim, o kterem radku mluvis, ja se bavim o poslednim postu v tom vlakne (tedy o zpuobu, jakym Excel… nový
MaSo 09.12.2019 11:37
MaSo
Myslel jsem řádek <?xml version="1.0" encoding="UTF-8"?> To bych musel vše komplet předělat, protož… nový
L-Core 09.12.2019 11:57
L-Core
Cely problem je v tom, ze ten web vyzaduje tzv. XML v UTF8 s BOM (byte order mark)... pokud to sprav… nový
MaSo 09.12.2019 12:00
MaSo
Otázkou je, zda v Excelu to jde, nějak z nuly takový soubor vytvořit. Protože to vyhazovalo chybu, v… nový
L-Core 09.12.2019 13:12
L-Core
Urcite to pujde pres ten ADODB.Stream, jen to nemam jak vyzkouset... Pro zacatek bych zkusil podhod… nový
MaSo 09.12.2019 13:26
MaSo
Open ThisWorkbook.Path & "\" & Range("c21") & ".xml" For Append As #i Bohužel tudy cesta nevede, te… nový
Siki83 09.12.2019 13:44
Siki83
Chlape, Ty bys zasloužil pořádnýho :beer: !!! Máš pravdu přes ten ADODB.Stream to funguje !!! Pro L… nový
Siki83 09.12.2019 23:20
Siki83
::) Koukám na to jako blázen. Není to pro mě španělská, ale mnohem cizokrajnější vesnice. Převelice… nový
L-Core 10.12.2019 07:13
L-Core
Muselo! :-D Problém byl fakt jen ve způsobu ukládání, to že L-Core skládá to xml, takovým exotickým… poslední
MaSo 10.12.2019 08:59
MaSo

Tak pánové, tady sem skončil. Se.u se tu s tím od 10:00 a výsledek 0 ]:(
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.

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.

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

Zpět do poradny Odpovědět na původní otázku Nahoru