Разбор XML-ответа в VBA и извлечение только последних данных - PullRequest
0 голосов
/ 27 сентября 2018

Я пытаюсь сделать XML-запрос через Excel VBA для одной из внутренних ссылок (в нашей компании).когда я отправляю запрос и получаю ответ, используя код ниже, я получаю следующий в качестве текста ответа :

[{"CPN":"700-42887-01","ExtractDt":"2018-04-02 
00:00:00","Demand":"8645"},"CPN":"700-42887-01","ExtractDt":"2018-04-09 
00:00:00","Demand":"8985"},{"CPN":"700-42887-01","ExtractDt":"2018-04-16 
00:00:00","Demand":"9341"},{"CPN":"700-42887-01","ExtractDt":"2018-04-23 
00:00:00","Demand":"9589"},{"CPN":"700-42887-01","ExtractDt":"2018-04-30 
00:00:00","Demand":"9210"},{"CPN":"700-42887-01","ExtractDt":"2018-05-07 
00:00:00","Demand":"9698"},{"CPN":"700-42887-01","ExtractDt":"2018-05-14 
00:00:00","Demand":"9542"},{"CPN":"700-42887-01","ExtractDt":"2018-05-21 
00:00:00","Demand":"9692"},{"CPN":"700-42887-01","ExtractDt":"2018-05-28 
00:00:00","Demand":"10416"},{"CPN":"700-42887-01","ExtractDt":"2018-06-04 
00:00:00","Demand":"6777"},{"CPN":"700-42887-01","ExtractDt":"2018-06-11 
00:00:00","Demand":"12774"},{"CPN":"700-42887-01","ExtractDt":"2018-06-18 
00:00:00","Demand":"12912"},{"CPN":"700-42887-01","ExtractDt":"2018-06-25 
00:00:00","Demand":"12693"},{"CPN":"700-42887-01","ExtractDt":"2018-07-02 
00:00:00","Demand":"12895"},{"CPN":"700-42887-01","ExtractDt":"2018-07-09 
00:00:00","Demand":"13366"},{"CPN":"700-42887-01","ExtractDt":"2018-07-16 
00:00:00","Demand":"13550"},{"CPN":"700-42887-01","ExtractDt":"2018-07-23 
00:00:00","Demand":"7971"},{"CPN":"700-42887-01","ExtractDt":"2018-07-30 
00:00:00","Demand":"12442"},{"CPN":"700-42887-01","ExtractDt":"2018-08-06 
00:00:00","Demand":"12960"},{"CPN":"700-42887-01","ExtractDt":"2018-08-13 
00:00:00","Demand":"14106"},{"CPN":"700-42887-01","ExtractDt":"2018-08-20 
00:00:00","Demand":"13543"},{"CPN":"700-42887-01","ExtractDt":"2018-08-27 
00:00:00","Demand":"13570"},{"CPN":"700-42887-01","ExtractDt":"2018-09-03 
00:00:00","Demand":"13506"},{"CPN":"700-42887-01","ExtractDt":"2018-09-10 
00:00:00","Demand":"13914"},{"CPN":"700-42887-01","ExtractDt":"2018-09-17 
00:00:00","Demand":"13241"},{"CPN":"700-42887-01","ExtractDt":"2018-09-24 
00:00:00","Demand":"13449"}]

Я хочу извлечь только последнее значение - а именно 13449. Что такоекод, который мне нужно написать, чтобы выполнить это.

Заранее спасибо! `

Используемый код

 Sub xmlparsing()
 Dim jstring As String

 With CreateObject("MSXML2.XMLHTTP")
  .Open "GET", "**INTERNAL COMPANY LINK HERE**", False
    .send
  If .Status <> 200 Then Exit Sub
  jstring = .responseText
   Debug.Print jstring
   End With`
 End Sub

Ответы [ 2 ]

0 голосов
/ 27 сентября 2018

Вы можете использовать InStrRev

Mid$(responseText, InStrRev(responseText, ":") + 2, (InStrRev(responseText, "}") - 1) - (InStrRev(responseText, ":") + 2))

InStrRev , чтобы пройти строку справа налево.Мы знаем, что вы хотите получить значение в конце строки, поэтому это направление полезно.Мы указываем в качестве аргумента символ для поиска.Общая строка: responseText.

Первый найденный символ - ":", справа налево.Это будет там, где у вас есть :"13449"}].Смещение от этого + 2, чтобы получить фактическое начало требуемого значения, в данном случае 1 в 13449.

Та же логика для определения конечной точки строки.Я использую "}" в качестве конечной точки, затем выполняю настройку, чтобы перейти к цифрам.Mid позволяет указать строку, начальную точку и количество символов.Я передаю аргументы для извлечения необходимой строки в Mid.Я использовал типизированные функции (с $ в конце) как более эффективные при работе со строками.

0 голосов
/ 27 сентября 2018

Учитывая тот факт, что вы уже проанализировали XML для строки, тогда самый простой факт - попытаться нарезать строку.Чтобы увидеть, как это работает, поместите строку из диапазона .responseText в диапазон А1 и запустите:последние 4 символа последнего блока массива.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...