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á…