google Importation JSON dans Excel




json to excel (2)

Est-il possible de programmer des appels JSON dans une macro?

Je veux obtenir une chaîne JSON via une connexion API. Il semble que le problème réside dans le fait qu'Excel s'attend à ce que les paramètres soient transmis dans la chaîne HTML, mais que JSON transmette les paramètres dans le corps HTML. Des idées?



Comme il s’agit de VBA, j'utiliserais COM pour appeler xmlhttprequest mais l’utiliser de manière synchrone pour ne pas perturber l’environnement d’exécution mono-thread de VBA.

'BEGIN CLASS syncWebRequest

Private Const REQUEST_COMPLETE = 4

Private m_xmlhttp As Object
Private m_response As String

Private Sub Class_Initialize()
    Set m_xmlhttp = CreateObject("Microsoft.XMLHTTP")
End Sub

Private Sub Class_Terminate()
    Set m_xmlhttp = Nothing
End Sub


Property Get Response() As String
    Response = m_response
End Property

Property Get Status() As Long
    Status = m_xmlhttp.Status
End Property

Public Sub AjaxPost(Url As String, Optional postData As String = "")
    m_xmlhttp.Open "POST", Url, False
    m_xmlhttp.setRequestHeader "Content-type", "application/x-www-form-urlencoded"
    m_xmlhttp.setRequestHeader "Content-length", Len(postData)
    m_xmlhttp.setRequestHeader "Connection", "close"
    m_xmlhttp.send (postData)
    If m_xmlhttp.readyState = REQUEST_COMPLETE Then
        m_response = m_xmlhttp.responseText
    End If
End Sub

Public Sub AjaxGet(Url As String)
    m_xmlhttp.Open "GET", Url, False
    m_xmlhttp.setRequestHeader "Connection", "close"
    m_xmlhttp.send
    If m_xmlhttp.readyState = REQUEST_COMPLETE Then
        m_response = m_xmlhttp.responseText
    End If
End Sub

'END CLASS syncWebRequest   

Alors maintenant, vous pouvez appeler ce qui précède pour vous renvoyer la réponse du serveur:

Dim request As New syncWebRequest
request.ajaxGet "http://localhost/ClientDB/AllClients?format=json" 
Dim json as string 
json = request.Response

Le problème ici est que nous voulons pouvoir lire les données renvoyées par le serveur d’une manière ou d’une autre, plutôt que de manipuler directement la chaîne JSON. Ce qui a fonctionné pour moi, c’est d’utiliser la Collection types COM VBA-JSON (exportation de code google here ) pour gérer les tableaux JSON et Dictionary pour gérer les membres et leurs déclarations, avec une méthode parseur Parse simplifiant la création de ces collections de dictionnaires.

Alors maintenant, nous pouvons analyser le JSON:

[{"Name":"test name","Surname":"test surname","Address":{"Street":"test street","Suburb":"test suburb","City":"test city"}}]

dans quelque chose comme ce qui suit:

Set clients = parser.parse(request.Response)
For Each client In clients
    name = client("Name")
    surname = client("Surname")
    street = client("Address")("Street")
    suburb = client("Address")("Suburb")
    city = client("Address")("City")
Next

C'est bien, mais qu'en est-il des choses comme pouvoir éditer et publier les données? Il existe également une méthode toString pour créer une chaîne JSON à partir des données JSON [Collection / Dictionary] ci-dessus, en supposant que le serveur accepte JSON.







google-docs