13. 8. 2014

Export XLSX do XML

Jako první si v Excelu vytvořte tabulku. Pokud ji už máte, tím lépe.


Dále si musíte vytvořit nějaké XML, či XSD. Já jsem zvolil variantu s XML schématem. Vezměte si poznámkový blok či jiný textový editor (může být i PSPad apod.) a text níže uvedený tam zkopírujte celý. Soubor si pojmenujte dle názvu listu v Excelu. Já mám „PDTACE.xml“.

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <PDTACEList>
     <PDTACE>
       <PDTFK></PDTFK>
       <PDTVFK></PDTVFK>
       <ValidFrom></ValidFrom>
       <ValidTo></ValidTo>
       <ACE></ACE>
       <ACEForAdvance></ACEForAdvance>
       <ACE_PT></ACE_PT>
       <ACE_HT></ACE_HT>
       <ACE_LT></ACE_LT>
     </PDTACE>
     <PDTACE>
       <PDTFK></PDTFK>
       <PDTVFK></PDTVFK>
       <ValidFrom></ValidFrom>
       <ValidTo></ValidTo>
       <ACE></ACE>
       <ACEForAdvance></ACEForAdvance>
       <ACE_PT></ACE_PT>
       <ACE_HT></ACE_HT>
       <ACE_LT></ACE_LT>
     </PDTACE>
    </PDTACEList>
</Root>
Proč jsou zde dvě identické větve, se mě neptejte. Pokud zůstane pouze jedna, Excel vyhodí chybu a XML nenaimportuje. Ale nebojte, duplikovaný zápis tam pak nebude.
Tímto zápisem dosáhnete exportu co řádek v Excelu to jedna větev v XML. Sloupce se exportují pouze v případě, že je zde nějaký záznam. Jestli jsou prázdné, v XML se neobjeví.

Vraťme se ale k exportu. V Excelu je nutné zapnout menu Vývojář (viz. zvýrazněná modrá linka). Stačí vybrat Soubor -> Možnosti -> Přizpůsobit pás karet -> na pravé straně zaškrtnout Vývojář a potvrdit.

Nyní v menu Vývojář klikněte na Zdroj.

Tím se vám objeví nabídka na mapování xml a sloupců.

Rozklikněte si vpravo dole Mapování XML. Dejte přidat a najděte si své XML schéma, které jste vytvářeli na začátku (moje je PDTACE.xml). Pokud Vám v tomto kroku Excel zahlásí informativní hlášku, pouze ji odklepněte.




Pokud máte více listů a schémat, je dobré si ihned importované schéma přejmenovat dle listu, abyste se potom v tom neztratili. Následně dejte OK.

Vpravo se zobrazí zdroj dat (schéma) už rozpadlé na jednotlivé elementy. Vašim úkolem je nyní vybrat správný list Excelu a správný zdroj dat vpravo.

Jakmile to máte všechno správně, můžete přistoupit k samotnému mapování. Vpravo vezměte první parametr a přetáhněte jej do prvního řádku prvního sloupce. Že jste to udělali správně, poznáte, že se Vám zabarví sloupec a vpravo se zobrazí název tučně. Toto proveďte pro všechny parametry.


Při mapování datumů či jiných specifických parametrů, se může stát, že Excel vyhodí hlášku.
Pokud vyberete shodu v datovém typu, změní se formát datumu. Jestli vyberete Použít existující formátování, zůstane v Excelů původní hodnota, ale v exportovaném XML se formát změní. Toto samozřejmě nechcete. A proto je nutné upravit formát buněk né na datum, ale na text. Po změně se sice změní hodnoty, ale když je znovu ručně přepíšete a namapujete konkrétní sloupec, tak to již projde v pořádku a výsledné XML bude taky v pořádku.

Výsledný Excel vypadá pak následovně.

Export do výsledného XML provedete stále na kartě Vývojář -> Export. Stačí zadat cestu a název souboru. Výsledné XML pak vypadá takto.

Upozornění: Prázdné elementy se neexportují.

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <PDTACEList>
        <PDTACE>
            <VId>1</VId>
            <PDTFK>1</PDTFK>
            <ValidFrom>1.1.2014</ValidFrom>
            <ValidTo>31.12.2014</ValidTo>
            <ACE>854.12345</ACE>
            <ACEForAdvance>854.12345</ACEForAdvance>
            <ACE_PT>854.12345</ACE_PT>
            <ACE_HT>854.12345</ACE_HT>
            <ACE_LT>854.12345</ACE_LT>
        </PDTACE>
        <PDTACE>
            <VId>2</VId>
            <PDTFK>2</PDTFK>
            <ValidFrom>1.1.2014</ValidFrom>
            <ValidTo>31.12.2014</ValidTo>
            <ACE>825.19195</ACE>
            <ACEForAdvance>825.19195</ACEForAdvance>
            <ACE_PT>825.19195</ACE_PT>
            <ACE_HT>825.19195</ACE_HT>
            <ACE_LT>825.19195</ACE_LT>
        </PDTACE>
        <PDTACE>
            <VId>3</VId>
            <PDTFK>3</PDTFK>
            <ValidFrom>1.1.2014</ValidFrom>
            <ValidTo>31.12.2014</ValidTo>
            <ACE>18032.569</ACE>
            <ACEForAdvance>18032.569</ACEForAdvance>
            <ACE_PT>18032.569</ACE_PT>
            <ACE_HT>18032.569</ACE_HT>
            <ACE_LT>18032.569</ACE_LT>
        </PDTACE>
        <PDTACE>
            <VId>4</VId>
            <PDTFK>4</PDTFK>
            <ValidFrom>1.1.2014</ValidFrom>
            <ValidTo>31.12.2014</ValidTo>
            <ACE>3.4706221</ACE>
            <ACEForAdvance>3.4706221</ACEForAdvance>
            <ACE_PT>3.4706221</ACE_PT>
            <ACE_HT>3.4706221</ACE_HT>
            <ACE_LT>3.4706221</ACE_LT>
        </PDTACE>
        <PDTACE>
            <VId>5</VId>
            <PDTFK>5</PDTFK>
            <ValidFrom>1.1.2014</ValidFrom>
            <ValidTo>31.12.2014</ValidTo>
            <ACE>924497.47</ACE>
            <ACEForAdvance>924497.47</ACEForAdvance>
            <ACE_PT>924497.47</ACE_PT>
            <ACE_HT>924497.47</ACE_HT>
            <ACE_LT>924497.47</ACE_LT>
        </PDTACE>
        <PDTACE>
            <VId>6</VId>
            <PDTFK>6</PDTFK>
            <ValidFrom>1.1.2014</ValidFrom>
            <ValidTo>31.12.2014</ValidTo>
            <ACE>7461.1361</ACE>
            <ACEForAdvance>7461.1361</ACEForAdvance>
            <ACE_PT>7461.1361</ACE_PT>
            <ACE_HT>7461.1361</ACE_HT>
            <ACE_LT>7461.1361</ACE_LT>
        </PDTACE>
        <PDTACE>
            <VId>7</VId>
            <PDTFK>7</PDTFK>
            <ValidFrom>1.1.2014</ValidFrom>
            <ValidTo>31.12.2014</ValidTo>
            <ACE>488.66503</ACE>
            <ACEForAdvance>488.66503</ACEForAdvance>
            <ACE_PT>488.66503</ACE_PT>
            <ACE_HT>488.66503</ACE_HT>
            <ACE_LT>488.66503</ACE_LT>
        </PDTACE>
        <PDTACE>
            <VId>8</VId>
            <PDTFK>8</PDTFK>
            <ValidFrom>1.1.2014</ValidFrom>
            <ValidTo>31.12.2014</ValidTo>
            <ACE>6.1247777</ACE>
            <ACEForAdvance>6.1247777</ACEForAdvance>
            <ACE_PT>6.1247777</ACE_PT>
            <ACE_HT>6.1247777</ACE_HT>
            <ACE_LT>6.1247777</ACE_LT>
        </PDTACE>
        <PDTACE>
            <VId>9</VId>
            <PDTFK>9</PDTFK>
            <ValidFrom>1.1.2014</ValidFrom>
            <ValidTo>31.12.2014</ValidTo>
            <ACE>2756.6038</ACE>
            <ACEForAdvance>2756.6038</ACEForAdvance>
            <ACE_PT>2756.6038</ACE_PT>
            <ACE_HT>2756.6038</ACE_HT>
            <ACE_LT>2756.6038</ACE_LT>
        </PDTACE>
        <PDTACE>
            <VId>10</VId>
            <PDTFK>10</PDTFK>
            <ValidFrom>1.1.2014</ValidFrom>
            <ValidTo>31.12.2014</ValidTo>
            <ACE>228355.63</ACE>
            <ACEForAdvance>228355.63</ACEForAdvance>
            <ACE_PT>228355.63</ACE_PT>
            <ACE_HT>228355.63</ACE_HT>
            <ACE_LT>228355.63</ACE_LT>
        </PDTACE>
        <PDTACE>
            <VId>11</VId>
            <PDTFK>11</PDTFK>
            <ValidFrom>1.1.2014</ValidFrom>
            <ValidTo>31.12.2014</ValidTo>
            <ACE>404.84385</ACE>
            <ACEForAdvance>404.84385</ACEForAdvance>
            <ACE_PT>404.84385</ACE_PT>
            <ACE_HT>404.84385</ACE_HT>
            <ACE_LT>404.84385</ACE_LT>
        </PDTACE>
        <PDTACE>
            <VId>12</VId>
            <PDTFK>12</PDTFK>
            <ValidFrom>1.1.2014</ValidFrom>
            <ValidTo>31.12.2014</ValidTo>
            <ACE>87.22594</ACE>
            <ACEForAdvance>87.22594</ACEForAdvance>
            <ACE_PT>87.22594</ACE_PT>
            <ACE_HT>87.22594</ACE_HT>
            <ACE_LT>87.22594</ACE_LT>
        </PDTACE>
        <PDTACE>
            <VId>13</VId>
            <PDTFK>13</PDTFK>
            <ValidFrom>1.1.2014</ValidFrom>
            <ValidTo>31.12.2014</ValidTo>
            <ACE>619.41834</ACE>
            <ACEForAdvance>619.41834</ACEForAdvance>
            <ACE_PT>619.41834</ACE_PT>
            <ACE_HT>619.41834</ACE_HT>
            <ACE_LT>619.41834</ACE_LT>
        </PDTACE>
        <PDTACE>
            <VId>14</VId>
            <PDTFK>14</PDTFK>
            <ValidFrom>1.1.2014</ValidFrom>
            <ValidTo>31.12.2014</ValidTo>
            <ACE>5665.1628</ACE>
            <ACEForAdvance>5665.1628</ACEForAdvance>
            <ACE_PT>5665.1628</ACE_PT>
            <ACE_HT>5665.1628</ACE_HT>
            <ACE_LT>5665.1628</ACE_LT>
        </PDTACE>
        <PDTACE>
            <VId>15</VId>
            <PDTFK>15</PDTFK>
            <ValidFrom>1.1.2014</ValidFrom>
            <ValidTo>31.12.2014</ValidTo>
            <ACE>1253175.3</ACE>
            <ACEForAdvance>1253175.3</ACEForAdvance>
            <ACE_PT>1253175.3</ACE_PT>
            <ACE_HT>1253175.3</ACE_HT>
            <ACE_LT>1253175.3</ACE_LT>
        </PDTACE>
    </PDTACEList>
</Root>

Zde je ještě další zápis XML schématu, který umí přidat různé atributy (VId="" a VFK="") rovnou k elementům (PDTACE atd).

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <PDTACEList>
     <PDTACE VId="">
       <Id></Id>
       <PDTFK></PDTFK>
       <PDT VFK=""></PDT>
       <ValidFrom></ValidFrom>
       <ValidTo></ValidTo>
       <ACE></ACE>
       <ACEForAdvance></ACEForAdvance>
       <ACE_PT></ACE_PT>
       <ACE_HT></ACE_HT>
       <ACE_LT></ACE_LT>
       <ACETariffShareTypeFK></ACETariffShareTypeFK>
       <ACETariffShareType VFK=""></ACETariffShareType>
     </PDTACE>
     <PDTACE VId="">
       <Id></Id>
       <PDTFK></PDTFK>
       <PDT VFK=""></PDT>
       <ValidFrom></ValidFrom>
       <ValidTo></ValidTo>
       <ACE></ACE>
       <ACEForAdvance></ACEForAdvance>
       <ACE_PT></ACE_PT>
       <ACE_HT></ACE_HT>
       <ACE_LT></ACE_LT>
       <ACETariffShareTypeFK></ACETariffShareTypeFK>
       <ACETariffShareType VFK=""></ACETariffShareType>
     </PDTACE>
    </PDTACEList>
</Root>
Zdroj dat v Excelu pak vypadá přibližně takto. Vše ostatní se dělá jako v předchozím příkladu, akorát výsledné XML má navíc některé atributy.

Upozornění: Pokud použijete druhou variantu, budou se exportovat všechny elementy i když nemají žádný atribut. Prázdné elementy bez atributů se neexportují nikdy.
 

Žádné komentáře:

Okomentovat