我有以下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)提取并导出为excel的最佳方法是什么,因为我无法直接调用该值?
感谢您提前提供任何帮助 - 我真的很感激。
以下的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
答案 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