从excel表中读取数据并使用vba宏将其输出到xml?

时间:2016-08-23 20:49:31

标签: xml excel vba excel-vba

我在excel表中有一些数据,格式类似于下面的格式。

    Colum1_Heading       Column2_Heading
          a                   1
          b                   2
          c                   3

我正在尝试将此表中的数据转换为XML,我将始终具有相同数量的列但行数不确定。

XML格式是这样的

<?xml version="1.0" encoding="utf-8"?>
<root> 
    <tag1>
         <tag2>
              a - 1,
              b - 2,
              c - 3
         </tag2>
    </tag1>
</root>

所以我认为它应该相当简单。到目前为止,我已经开始编写一些代码来创建一个可写字符串,然后我将其写入一个新的XML文件,但我对VBA很新,所以我还在网上研究一堆。我输入了标题以及开头和结尾标记,因为它们总是一样的。我的问题是如何读取表的行并以上面显示的格式将它们写入XML。任何帮助,将不胜感激。如果您需要任何其他信息,请与我们联系。

1 个答案:

答案 0 :(得分:0)

这应该让你开始。添加对MSXML2的引用:

Sub Test()
    With New MSXML2.DOMDocument60

        Dim root As IXMLDOMNode
        Set root = .createElement("root")

        Dim tag1 As IXMLDOMNode
        Set tag1 = .createElement("tag1")

        Dim tag2 As IXMLDOMNode
        Set tag2 = .createElement("tag2")

        tag2.Text = ReadXmlContentFromWorksheet '"a - 1,b - 2,c - 3"

        tag1.appendChild tag2
        root.appendChild tag1

        .appendChild .createProcessingInstruction("xml", "version=""1.0"" encoding=""utf-8""")
        Set .DocumentElement = root
        '.Save "test.xml"
        Debug.Print .XML

    End With
End Sub

输出:

<?xml version="1.0"?>
<root><tag1><tag2>a - 1,b - 2,c - 3</tag2></tag1></root>

请注意,垂直空白是无关紧要的

ReadXmlContentFromWorksheet函数看起来像这样:

Private Function ReadXmlContentFromWorksheet() As String
    Dim result As String

    Dim lastRow As Long
    lastRow = MyDataSheet.Range("A" & MyDataSheet.Rows.Count).End(xlUp).Row

    Dim currentRow As Long
    For currentRow = 1 To lastRow
        result = result & MyDataSheet.Cells(currentRow, 1).Value & " - " _
                        & MyDataSheet.Cells(currentRow, 2).Value
        result = IIf(currentRow = lastRow, vbNullString, ",")
    Next

    ReadXmlContentFromWorksheet = result
End Function