Вы можете рассматривать это как xml и использовать xpath. Здесь я читаю из файла, но вы загружаете ответ в xmldocument. Это действительно, чтобы показать, что вы можете выбрать по xpath. Я выбираю с помощью SelectSingleNode
, но вы можете видеть, как можно добавить цикл для SelectNodes
.
Это выровняет строку только в том случае, если наборы узлов из каждого xpath имеют одинаковую длину. Если нет, необходимо использовать общий родительский узел, а затем доступ к дочерним узлам. Счетчик строк будет увеличиваться в цикле по общему родительскому узлу.
Если используется несколько запросов, для запросов потребуется еще один цикл For Loop, а затем в верхней части этого цикла должна быть найдена следующая свободная строка, чтобы определить, с чего начать запись.
Option Explicit
Public Sub test()
Dim xmlDoc As Object, ws As Worksheet
Set ws = ThisWorkbook.Worksheets("Sheet1")
Set xmlDoc = CreateObject("MSXML2.DOMDocument")
With xmlDoc
.validateOnParse = True
.setProperty "SelectionLanguage", "XPath"
.async = False
If Not .Load("C:\Users\User\Desktop\Test.xml") Then
Err.Raise .parseError.ErrorCode, , .parseError.reason
End If
End With
Dim node As Object, i As Long, xpath As Variant, j As Long
j = 1
For Each xpath In Array("TASK_ID", "TASK_NUMBER", "TASK_RESUME", "TASK_GROUP_NAME")
ws.Cells(9, j) = xmlDoc.SelectSingleNode("//" & xpath).Text
j = j + 1
Next
End Sub
В вашем случае загрузите функцию, возвращающую строку. Редактировать: обновлено для нескольких узлов
Option Explicit
Public Sub test()
Dim xmlDoc As Object, ws As Worksheet
Set ws = ThisWorkbook.Worksheets("Sheet1")
Set xmlDoc = CreateObject("MSXML2.DOMDocument")
With xmlDoc
.validateOnParse = True
.setProperty "SelectionLanguage", "XPath"
.async = False
If Not .LoadXML(GetHTTP(url)) Then
Err.Raise .parseError.ErrorCode, , .parseError.reason
End If
End With
Dim node As Object, i As Long, xpath As Variant, j As Long, errorNode As Object, k As Long
Set errorNode = xmlDoc.SelectSingleNode("//ErrorDescription")
If Not errorNode Is Nothing Then
MsgBox errorNode.Text
Exit Sub
End If
j = 1
For Each xpath In Array("TASK_ID", "TASK_NUMBER", "TASK_RESUME", "TASK_GROUP_NAME")
k = 0
For Each node In xmlDoc.SelectNodes("//" & xpath)
ws.Cells(9 + k, j) = node.Text
k = k + 1
Next
j = j + 1
Next
End Sub