Таблица из HTTP responseText VBA Excel - PullRequest
0 голосов
/ 05 марта 2020

Я работаю с VBA и пытаюсь создать таблицу из теста ответа, используя HTTP-запрос. Вот мой код:

Set hReq = CreateObject("MSXML2.XMLHTTP")
    With hReq
        .Open "GET", "https://example.url.com/data", False
        .send
    End With

Если перейти по URL-адресу, единственным элементом на странице является ответ CSV, который выглядит следующим образом:

name,ID,job,sector johndoe,1234,creator,sector1 janedoe,5678,worker,sector2

Это переводит в таблицу с 4 столбцами с именами «имя», «идентификатор», «работа» и «сектор». Я довольно новичок в VBA и пытаюсь понять, как перевести текст ответа в таблицу. Но мне нужно получить это в табличной форме, чтобы я мог работать с переменными столбца. Я могу получить текст ответа в одной ячейке:

Sheets("Sheet1").Range("A1").Value = hReq.responseText

Однако я не могу перевести таблицу в табличный формат, поэтому я могу начать работать с ней, как с таблицей. Было бы здорово поместить данные в массив в памяти, чтобы я мог манипулировать ими и анализировать их с помощью VBA, но в целях устранения неполадок было бы также полезно поместить их в рабочую таблицу Excel, чтобы я мог дважды проверить свои программы .

1 Ответ

0 голосов
/ 06 марта 2020

Это циклически повторяет ваш запрос заголовка и отправляет на ваш предпочтительный лист:

Sub test()
    Dim RespArray() As String
    Dim RespArray2() As String
    Dim i, i2 As Long

    Set hReq = CreateObject("MSXML2.XMLHTTP")
    With hReq
        .Open "GET", "https://example.url.com/data", False
        .send
    End With

    ' split the data into larger pieces
    RespArray() = Split(hReq.responseText, " ")

    ' loop through first array to break it down line by line
    For i = LBound(RespArray) To UBound(RespArray)
        ' split each line into individual pieces
        RespArray2() = Split(RespArray(i), ",")
        ' loop through second array and add to Sheet1
        For i2 = LBound(RespArray2) To UBound(RespArray2)
          Worksheets("Sheet1").Cells(i + 1, i2 + 1).Value = RespArray2(i2)
        Next i2
    Next i
End Sub

Результаты в

enter image description here

...