2017-02-05 10 views
0

я следующий XML-данные, которые исходит от REST вызова,VBA-Excel: Чтение данных из XML-файла

<?xml version="1.0" encoding="UTF-8"?> 
<response> 
    <result> 
     <cs>1</cs>        
     <cs>2</cs> 
     <cs>3</cs> 
     <cs>4</cs> 
    </result> 
    <result> 
     <br>A</br>        
     <br>B</br> 
    </result> 
</response> 

Я хочу, чтобы прочитать эти данные в Excel, как, Excel Format

, и здесь длина тегов cs и br не фиксирована, для каждой информации они будут разными.

+0

большой, то, что вы пробовали до сих пор, любой код? –

+0

Dim objHTTP As New WinHttp.WinHttpRequest Dim Респ Как Новый DOMDocument Dim Result Как IXMLDOMNode URL = https://example.abc.com objHTTP.Open "получить", URL, Ложные objHTTP.SetRequestHeader "Принять" , "приложение/XML" objHTTP.SetRequestHeader "Content-Type", "приложение/XML" 'Авторизация "Код авторизации objHTTP.SetRequestHeader, AuthorizationCode objHTTP.Send ' дает 200 Debug.Print objHTTP.Status 'предоставление xml Debug.Print objHTTP.ResponseText Resp.LoadXML o bjHTTP.ResponseText –

+0

@ S.R.KHAN Почему вы не отправляете свой код в качестве ответа? –

ответ

0

Что-то вроде этого должно работать на вас. Обратите внимание, что я не беспокоюсь о форматировании каждой из ячеек: Сначала сделайте это Нажмите «Сервис»> «Ссылки». Проверьте эти библиотеки - Microsoft WinHttp Services, версия 5.1 - Microsoft XML v6.0

Sub TestXML() 
    URL = "https://example.abc.com" 'Your URL 
    AuthorizationCode = "Basic <Password>" 'Please put only encrypted password 

    Dim ws As Worksheet 
    Dim objHTTP As New WinHttp.WinHttpRequest 
    Dim jsonString As String 
    Dim Resp As New DOMDocument 
    Dim Result As IXMLDOMNode 
    Dim i As Integer, j As Integer 

    objHTTP.Open "get", URL, False 
    objHTTP.SetRequestHeader "Accept", "application/xml" 
    objHTTP.SetRequestHeader "Content-Type", "application/xml" 
    objHTTP.SetRequestHeader "Authorization", AuthorizationCode 
    objHTTP.Send 

    Debug.Print objHTTP.Status 
    Debug.Print objHTTP.ResponseText 

    Set ws = Sheets("sheet1") 
    ws.Select 
    Range("A1").Select 
    Cells.Clear 
    Resp.LoadXML objHTTP.ResponseText 
    Set lists = Resp.DocumentElement 

    x = 2 
    y = 1 
    For Each listNode In lists.ChildNodes 
     x = 2 
     Cells(1, y).Value = lists.ChildNodes(y - 1).ChildNodes(0).BaseName 
     For Each fieldNode In listNode.ChildNodes 
      Cells(x, y).Value = fieldNode.Text 
      x = x + 1 
     Next fieldNode 
     y = y + 1 
    Next listNode 
End Sub 
+0

«Это мой пример кода Dim objHTTP As New WinHttp.WinHttpRequest Dim Респ Как Новый DOMDocument Dim Result Как IXMLDOMNode URL = https://example.abc.com objHTTP.Open "получить", URL, Ложные objHTTP.SetRequestHeader "Принять", "приложение/XML" objHTTP.SetRequestHeader "Content-Type", "приложение/XML" ' "Авторизация" Код авторизации objHTTP.SetRequestHeader, AuthorizationCode objHTTP.Send ' дает 200 Debug.Print objHTTP.Status 'предоставление xml Debug.Print objHTTP.ResponseText Resp.LoadXML objHTTP.ResponseText –

+0

Ваш код дает ошибку «Ошибка 91» для строки «Для каждого спискаNode В списках.ChildNodes» –

+0

Поскольку вы обновили данные, вам не нужен подзаголовок, который преобразует #s в буквы - поэтому я удалил его. Он работает для меня с помощью Office 365 ProPlus v 15. Все, что я могу предложить, это копирование кода и вашего xml-файла в новый вопрос, и, возможно, кто-то еще узнает. – Amorpheuses

Смежные вопросы