2013-02-20 8 views
7

Ich habe How can I send an HTTP POST request to a server from Excel using VBA?Wie kann ich JSON von einem HTTP-Endpunkt aus in Excel auf MacOS abrufen und analysieren?

und the MacOS-friendly response gesehen, die beschreibt, wie Daten von einem HTTP-Endpunkt abzurufen Querytables verwenden. Es zeigt, wie eine einzelne Zeichenfolge abgerufen und in eine Zelle eingefügt wird.

Alles gut. Jetzt möchte ich mehr als einen einzelnen Wert abrufen. Es ist eine große JSON-Zeichenfolge, und ich möchte es in Excel VBA nachbearbeiten, bevor Sie eine oder mehrere Zellen auffüllen.

Wie ist das möglich?

Ich kann mir eine Möglichkeit vorstellen - platzieren Sie das Ergebnis der QueryTables-Sache in eine verborgene Zelle, und bearbeiten Sie anschließend die versteckte Zelle, um andere Zellen zu füllen. Es gibt ein paar JSON-Bibliotheken für VBA, die ich noch nicht ausgewertet habe.

Aber das scheint ziemlich hacky. Wirklich möchte ich mich nicht darauf verlassen, den JSON als Wert in einer Zelle zu speichern. Ich möchte es nur in einer Variablen in meinem VBA-Code speichern. So als ob ich CreateObject ("MSXML2.ServerXMLHTTP") verwenden würde. (NB: CreateObject() ist nicht verfügbar in Excel auf MacOS).

Und ich verstehe, dass die beste Antwort hier sein könnte: Holen Sie sich einen Windows-Rechner, wenn Sie Anwendungen in Excel ausführen möchten.

Antwort

8

können Sie die Worksheets(0).QueryTable Methode in VBA verwenden. Schauen Sie sich einfach das Handbuch an oder googlen Sie es. Sie müssen also Ihre JSON-Zeichenfolge nicht in einer Zelle speichern.

Oder ich habe so etwas wie

verwendet
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 

einen JSON-String zum Download bereit.

Suchen Sie nach Parsern. Somehting wie Parsing JSON in Excel VBA sollte Ihre Bedürfnisse erfüllen.

+1

Ya, ich weiß, dass ich QueryTables verwenden kann. Aber ich habe gegooglet und ich sehe keine Möglichkeit, die Ausgabe von QueryTable in irgendwas * außer * einer Zelle zu speichern. Das fühlt sich ziemlich hackig an, weshalb ich nach einer Alternative gefragt habe. Wenn Sie eine Möglichkeit kennen, den Wert in einer Variablen zu speichern, werde ich es zu schätzen wissen, wenn Sie das beschreiben können oder mich auf den Dokument-Link verweisen können. Auch die 'Microsoft.XMLHTTP'-Sache wird in Excel auf MacOS nicht funktionieren. – Cheeso

+1

Uff, das wird hart werden. Ich denke, du hast recht. QueryTable speichert seinen Inhalt nur in einer Zelle (das ist eigentlich der springende Punkt der Funktion, da es nur eine Tabelle mit einer verbundenen Datenquelle ist). Persönlich kenne ich nur den obigen Weg oder mit einer DLL, aber das sind auch Windows. Dennoch ist Excel so konzipiert, dass es unter Windows verwendet werden kann. Wenn Sie alle Funktionen wünschen, verwenden Sie Bootcamp. Eine andere Möglichkeit wäre, ein Werkzeug wie curl zu verwenden und per Shell auszuführen. – mffap

+0

was für eine wirklich tolle Methode. Weißt du, ob das Ergebnis der Funktion jemals zu groß sein könnte, um zurückzukehren? eine zu große Schnur? – mango