2017-05-13 62 views
-1

:更新时间:导入复杂的XML到Excel 2016

我试图导入从在线源XML文件到Excel 2016,其工作正常,但响应被限制为200条记录,我想创建一个表,并用多个请求填充数据。我工作的响应数据示例如下: -

<?xml version="1.0" encoding="UTF-8"?> 
<response uri="/crm/private/xml/Products/getRecords"> 
<result> 
<Products> 
<row no="1"> 
<FL val="PRODUCTID">1250447000004184129</FL> 
<FL val="Product Code"> 
<![CDATA[ 
1321321321321321 
]]> 
</FL> 
</row> 

我现在有以下VB代码(与其他线程的帮助不大),但我在一个小区获得所有的值一起,我似乎不能将产品代码记录分成单独的行?

Sub XMLfromPPTExample2() 

Dim XDoc As MSXML2.DOMDocument60 
Dim xProducts As MSXML2.IXMLDOMNode 
Dim xrow As MSXML2.IXMLDOMNode 
Dim xChild As MSXML2.IXMLDOMNode 

Dim wb As Workbook 
Dim Col As Integer 
Dim Row As Integer 

Set XDoc = New MSXML2.DOMDocument60 
XDoc.async = False 
XDoc.validateOnParse = False 
XDoc.Load ("xml") 
LoadOption = xlXmlLoadImportToList 

Set xProducts = XDoc.DocumentElement 
Set xrow = 
xProducts.SelectSingleNode("/response/result/Products/row/FL[val='Product 
Code']") 

Col = 1 
Row = 1 

For Each xrow In xProducts.ChildNodes 
Row = 1 

For Each xChild In xrow.ChildNodes 
    Worksheets("Sheet2").Cells(Col, Row).Value = xChild.Text 
    Row = Row + 1 
Next xChild 

Next xrow 

End Sub 
+0

它看起来像你有一个杰森你xml。杰森的反序列化可能会更好。 – jdweng

+0

@jdweng - 那不是json,它是一个CDATA XML部分。 –

+0

是的,它是我试图加载在一个列中的xml,但此时我将FL PRODUCTID和单价与导入时创建的默认模式列在同一列中似乎无法识别差异阅读一些其他职位,这听起来像一个循环的VBA代码会做的伎俩。 –

回答

0

嗯,我已经得到了VBA代码和运行在第一个200点的记录带上,现在我只需要在建立一个循环,让他们的休息!

Sub Tester() 
Dim xDoc As MSXML2.DOMDocument60 
Set xDoc = New MSXML2.DOMDocument60 

xDoc.async = False 
xDoc.validateOnParse = False 

If xDoc.Load("xml") Then 
' The document loaded successfully. 
Else 
' The document failed to load. 
End If 

Dim i As Integer 
Dim list As IXMLDOMNodeList 
Set list = xDoc.SelectNodes("//response/result/Products/row") 

Dim node As IXMLDOMNode 

i = 1 
For Each node In list 
    i = i + 1 

    With Sheet1.Rows(i) 
     .Cells(1).Value = GetNodeValue(node, "FL[@val=""Product Code""]") 
     .Cells(2).Value = GetNodeValue(node, "FL[@val=""PRODUCTID""]") 
    End With 

Next node 

End Sub