2013-02-20 14 views
7

Ho visto How can I send an HTTP POST request to a server from Excel using VBA?Come posso recuperare JSON da un endpoint HTTP, da Excel su MacOS, e analizzarlo?

e the MacOS-friendly response che descrive come recuperare i dati da un endpoint HTTP usando QueryTables. Dimostra come recuperare una singola stringa e inserirla in una cella.

Tutto bene. Ora vorrei recuperare più di un singolo valore. È una grande stringa JSON e desidero post-elaborarla in Excel VBA prima di compilare una o più celle.

Com'è possibile?

Posso pensare a un modo: posizionare il risultato della query QueryTables in una cella nascosta e quindi post-elaborare la cella nascosta per popolare altre celle. Ci sono alcune librerie JSON per VBA che non ho ancora valutato.

Ma questo sembra piuttosto hacky. In realtà non voglio fare affidamento sull'archiviazione del JSON come valore in una cella. Mi piacerebbe memorizzarlo solo in una variabile nel mio codice VBA. Proprio come se stessi usando CreateObject ("MSXML2.ServerXMLHTTP"). (NB: CreateObject() non è disponibile in Excel su MacOS).

E ho capito che la risposta migliore potrebbe essere: Ottenere un computer Windows se si desidera eseguire app in Excel.

risposta

8

è possibile utilizzare in modo acutivo il metodo Worksheets(0).QueryTable in VBA. Basta dare un'occhiata al manuale o google per questo. Quindi non è necessario memorizzare la stringa JSON in una cella.

O ho usato qualcosa come

Public Function GetWebSource(ByRef URL As String) As String 
    Dim xml As IXMLHTTPRequest 
    On Error Resume Next 
    Set xml = CreateObject("Microsoft.XMLHTTP") 
    With xml 
     .Open "GET", URL, False 
     .send 
     GetWebSource = .responseText 
    End With 
    Set xml = Nothing 
End Function 

per scaricare una stringa JSON.

Cerca in giro per parser. Qualcuno come Parsing JSON in Excel VBA dovrebbe soddisfare le tue esigenze.

+1

Ya, so che posso usare QueryTables. Ma ho cercato su Google e non vedo un modo per memorizzare l'output di QueryTable in qualsiasi cosa * tranne * una cella. Mi sembra abbastanza hacky, ed è per questo che ho chiesto un'alternativa. Se conosci un modo per memorizzare il valore in una variabile, lo apprezzerò se puoi descriverlo o farmi riferimento al link doc. Anche la cosa 'Microsoft.XMLHTTP' non funzionerà da Excel su MacOS. – Cheeso

+1

Uff, sarà dura. Penso tu abbia ragione. QueryTable memorizza solo i suoi contenuti in una cella (che è in effetti l'intero punto della funzione, poiché è solo una tabella con origine dati connessa). Personalmente, conosco solo la strada sopra o con una DLL, ma è anche Windows. Ancora, Excel è costruito per essere utilizzato su Windows. Se vuoi tutte le funzionalità, usa Boot Camp. Un altro modo sarebbe usare uno strumento come curl ed eseguire tramite shell. – mffap

+0

che bel metodo. Sai se il risultato della funzione potrebbe essere troppo grande per tornare? una corda troppo grande? – mango

Problemi correlati