读取 XML 并在整个单元格范围内重复一个值

Reading XML and repeating a value across a cell range

我有以下 xml,我想使用 VBA

导入到 Excel
<rootElement xmlns:n0="http://www.w3.org/n0/" xmlns:n1="http://www.w3.org/n1/">
<n0:Partner>
    <n1:Identifier>EMH38</n1:Identifier>
    <n1:A>
        <n1:B>
            <n1:C>WZFR8</n1:C>
            <n1:D>Coll</n1:D>
            <n1:E>1</n1:E>
        </n1:B>
        <n1:B>
            <n1:C>X3HV7</n1:C>
            <n1:D>Coll</n1:D>
            <n1:E>2</n1:E>
        </n1:B>
        <n1:B>
            <n1:C>X5E86</n1:C>
            <n1:D>Coll</n1:D>
            <n1:E>3</n1:E>
        </n1:B>
        <n1:B>
            <n1:C>X5FC6</n1:C>
            <n1:D>Coll</n1:D>
        </n1:B>
        <n1:B>
            <n1:C>X5FL6</n1:C>
            <n1:D>Coll</n1:D>
            <n1:E>5</n1:E>
        </n1:B>
    </n1:A>
</n0:Partner>

读入文件后,Excel 工作表中的输出为

 Identifier C       D       E
 EMH38      WZFR8      Coll     1
            X3HV7      Coll     2
            X5E86      Coll     3
            X5FC6      Coll 
            X5FL6      Coll     5

读入文件后的首选输出必须如下所示。 如何使标识符出现在每一行上?

 Identifier C       D       E
 EMH38      WZFR8      Coll     1
 EMH38      X3HV7      Coll     2
 EMH38      X5E86      Coll     3
 EMH38      X5FC6      Coll 
 EMH38      X5FL6      Coll     5

这里是我解决你问题的方法。

Public Sub readXML()

    Dim xmlUrl As String
    Dim xmlDoc As New MSXML2.DOMDocument
    Dim partner, elements, bNode, child  As MSXML2.IXMLDOMNode
    Dim row As Integer

    'Get xml file path
    xmlUrl = ThisWorkbook.Path & "\test.xml"

    xmlDoc.async = False

    'If loading xml file has no error
    If xmlDoc.Load(xmlUrl) Then

        'Set start row of sheet
        row = 1

        'Get root element from xml document
        Set elements = xmlDoc.DocumentElement

        'Loop all child tags from "n0:Partner" tags
        For Each partner In elements.ChildNodes

            'Loop all child tags from 'n1:A' tags
            For Each bNode In partner.ChildNodes(1).ChildNodes

                Sheets("sheetname").Range("A" & row) = partner.ChildNodes(0).Text

                'Loop all child tags from from 'n1:B' tags
                For Each child In bNode.ChildNodes

                    'Check node name and set value to cell
                    Select Case child.nodeName

                        Case "n1:C"
                            Sheets("sheetname").Range("C" & row) = child.Text

                        Case "n1:D"
                            Sheets("sheetname").Range("D" & row) = child.Text

                        Case "n1:E"
                            Sheets("sheetname").Range("E" & row) = child.Text

                    End Select

                Next child

                'Increase row
                row = row + 1

           Next bNode

        Next partner

    End If

End Sub