将多个XML属性提取到Excel

时间:2017-01-05 00:36:12

标签: xml excel-vba vba excel

我有以下XML文件,我想从中提取特定的XML属性,然后将这些属性放入excel文件中。

以下是我的XML文件

<?xml version="1.0"?>
<RECIPE xmlns="x-schema:recipe_schema.xml" Format="1.0" Name="Table1>
<STEP ChLocation="CH1"/>
<ENDPOINT/><ENDP_DEVICE Type=""/>
<PARAMS_STEP>
<REGULAR>
<PARAM Alias="Offset1" Name="Offset_1" Value="0"/>
<PARAM Alias="Offset2" Name="Offset_2" Value="-3.59"/>
<PARAM Alias="Offset3" Name="Offset_3" Value="0" />
<PARAM Alias="Offset4" Name="Offset_4" Value="5.56"/>
<PARAM Alias="Offset5" Name="Offset_5" Value="0"/>
<PARAM Alias="Offset6" Name="Offset_6" Value="-3.25"/>
<PARAM Alias="Offset7" Name="Offset_7" Value="4.66"/>

下面的代码找到了所有节点属性(0)和(2) - 这很棒。我能够debug.print到即时窗口。

当我尝试将这些问题导出到excel时会出现问题。我没有提取Attribute(0)的问题,因为字符串名称是常量。但是,我不知道如何提取属性(2),因为值会定期更改,所以我不能直接引用该值。

我试图研究如何将Attribute(2)存储为变量然后调用该变量,但我能找到的只是关于XSLT变量的信息,而我不确定VBA语法是否可以使用它。我现在已经研究了几天,但是无法理解。我在网上看到的所有内容都涉及字面值。

我想将Attribute(0)和相关的Attribute(2)导出到excel表。 第1列=属性(0)= Offsetx    ,第2列=属性(0)= Valuex

将Attribute(2)提取并导出为ex​​cel的最佳方法是什么,因为我无法直接调用该值?

感谢您提前提供任何帮助 - 我真的很感激。

以下的VBA代码

Sub GetOffsetName_And_Values()

Dim GetOffsets As ThisWorkbook
Dim objXML As MSXML2.DOMDocument60
Set objXML = New MSXML2.DOMDocument60
Dim xmlNodeList As MSXML2.IXMLDOMNodeList
Dim xmlNode As MSXML2.IXMLDOMNode


Dim strXML As String
Dim x As IXMLDOMNode

objXML.validateOnParse = False
strXML = "L:\Recipe\File.xml"

objXML.Load (strXML)

Set xmlNodeList = objXML.getElementsByTagName("*")
On Error Resume Next
For Each xmlNode In xmlNodeList
    Debug.Print xmlNode.Attributes(0).Text
    Debug.Print xmlNode.Attributes(2).Text

Next xmlNode

If xmlNode.Attributes(0) = "Offset1" Then ThisWorkbook.Sheets("Sheet2").Range("A2") = "Offset1"
If xmlNode.Attributes(0) = "Offset2" Then ThisWorkbook.Sheets("Sheet2").Range("A3") = "Offset2"
If xmlNode.Attributes(0) = "Offset3" Then ThisWorkbook.Sheets("Sheet2").Range("A4") = "Offset3"
If xmlNode.Attributes(0) = "Offset4" Then ThisWorkbook.Sheets("Sheet2").Range("A5") = "Offset4"
If xmlNode.Attributes(0) = "Offset6" Then ThisWorkbook.Sheets("Sheet2").Range("A6") = "Offset6"
If xmlNode.Attributes(0) = "Offset7" Then ThisWorkbook.Sheets("Sheet2").Range("A7") = "Offset7"


Set objXML = Nothing

End Sub

1 个答案:

答案 0 :(得分:0)

所以我做了一些更多的研究,并且我能够获得我需要打印的所有属性,以便在两列中表现出色。代码仍然需要调整一些,但总的来说这是有效的。

Sub GetOffsetName_And_Values2()

Dim GetOffsets As ThisWorkbook
Dim objXML As MSXML2.DOMDocument60
Set objXML = New MSXML2.DOMDocument60
Dim xmlNodeList As MSXML2.IXMLDOMNodeList
Dim xmlNode As MSXML2.IXMLDOMNode
Dim i As Integer
Dim strXML As String

objXML.validateOnParse = False
strXML = "L:\Recipe\File.xml"

objXML.Load (strXML)


Set xmlNodeList = objXML.getElementsByTagName("*")
On Error Resume Next
For Each xmlNode In xmlNodeList

i = i + 1
       'Debug.Print xmlNode.Attributes(0).NodeValue
       'Debug.Print xmlNode.Attributes(2).NodeValue


       With ThisWorkbook.Sheets("Sheet2").Rows(i)
            .Cells(1).Value = xmlNode.Attributes(0).NodeValue
            .Cells(2).Value = xmlNode.Attributes(2).NodeValue
       End With

Next xmlNode
Set objXML = Nothing

End Sub