dnes je 6.7.2022

Input:

Excel 2010: Makra - VBA - XML - 17. část

8.11.2013, , Zdroj: Verlag Dashöfer

V tomto dílu zakončíme seriál o použití XML pro potřeby Excelu. V předchozím dílu jsme načetli XML soubor do DOM a ukázali jsme si, že umíme jednotlivé položky vypsat do okna Immediate. Dnes bude naším úkolem je rozeznat a jejich obsah zapsat do buněk v Excelovém listě.

Podkladová úloha: I v posledním dílu ponecháváme příklad  s Klubem Franze Kafky z minulých dílů. Stáhněte si sešit 2013-17 XML.xlsm z odkazu na konci článku a sešit otevřete. Heslo k projektu jsme nastavili „1234“, předsedovo heslo „4321“.

Předseda se zamiloval do myšlenky, že bude k jednotlivým členům ukládat jen XML export, který zabere jen 2 kB. Kdykoli se předseda bude chtít vrátit k dotazníku některého uchazeče, postačí, aby si naimportoval jeho XML, který si v minulosti uložil.

Založili jsme si k tomu modul MD_XML_parse a použili dříve vytvořený XML export. (Pokud jste si jej nevytvořili, můžete si jej vytvořit stiskem tlačítka XML Export nyní. Soubor se uloží do C:tempKFK_Pokus3.xml. Samozřejmě v ostré verzi bychom doplnili vyhledávání souboru např. přes objekt FileDialog).

V objektu typu MSXML2.DOMDocument60 máme načten celý XML soubor. Díky jeho strukturovanosti můžeme najít a použít jednotlivé položky struktury.

Na převedení všech položek není v tomto dílu už dostatek prostoru, takže si předvedeme jen některé. Na nich pochopíte, jak byste doplnili zbytek, a uvědomíte si případná úskalí.

Nejprve převedeme „Diagnoza_od_psychologa“. Protože známe jméno položky, stačí v kódu testovat, kdy se objeví:

    Select Case currSubNode.nodeName

'Jednotlivé položky budeme rozlišovat v bloku Select Case

    Case "Diagnoza_od_psychologa"

        If IxDiag = 0 Then

            Worksheets("Formulář").Range("B3").Value = currSubNode.Text

        Else    'Kdyby bylo položek více, než 2, zapíše se jen 1. a poslední

            Worksheets("Formulář").Range("B4").Value = currSubNode.Text

        End If

        IxDiag = IxDiag + 1

    Case ……

    End Select

Všimněte si, že musíme nějak ošetřit násobný výskyt položky, k tomu účelu jsme zavedli proměnnou IxDiag, která je na začátku zpracování 0, a při výskytu jako druhá nebo další se zvyšuje. To nám umožňuje přiřadit stejně pojmenované položky do různých buněk v našem formuláři. Podobně bychom postupovali u položek Kniha, kde bychom si zavedli proměnnou IxKn a její pomocí rozlišovali, kam se má

Nahrávám...
Nahrávám...