2013-02-20 13 views
7

Widziałem How can I send an HTTP POST request to a server from Excel using VBA?Jak mogę odzyskać JSON z punktu końcowego HTTP, z programu Excel na MacOS i przeanalizować go?

i the MacOS-friendly response opisujący sposób pobierania danych z punktu końcowego HTTP przy użyciu QueryTable. Pokazuje, jak pobrać pojedynczy ciąg i umieścić go w komórce.

Wszystko dobrze. Teraz chciałbym pobrać więcej niż jedną wartość. Jest to duży łańcuch JSON i chcę go przetworzyć w programie Excel VBA przed wypełnieniem jednej lub więcej komórek.

Jak to jest możliwe?

mogę myśleć o jednej drodze - to wynik rzeczą QueryTable w ukrytej komórce, a następnie po zakończeniu procesu ukryta komórka do wypełnienia innych komórek. Istnieje kilka bibliotek JSON dla VBA, których jeszcze nie oceniłem.

Ale wydaje się to dość hacky. Naprawdę nie chcę polegać na przechowywaniu JSON jako wartości w komórce. Chciałbym przechowywać go tylko w zmiennej w moim kodzie VBA. Tak jakbym używał CreateObject ("MSXML2.ServerXMLHTTP"). (UWAGA: Funkcja CreateObject() nie jest dostępna w programie Excel na komputerze MacOS).

I rozumiem, że najlepszą odpowiedzią tutaj może być: Zdobądź komputer z systemem Windows, jeśli chcesz uruchamiać aplikacje wewnątrz Excel.

Odpowiedz

8

można acutally użyć metody Worksheets(0).QueryTable w VBA. Wystarczy zajrzeć do instrukcji obsługi lub google. Więc nie musisz zapisywać łańcucha json w komórce.

Albo Użyłem coś podobnego

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 

aby pobrać ciąg json.

Rozejrzyj się za analizatorami składni. Ktoś taki jak Parsing JSON in Excel VBA powinien wypełnić twoje potrzeby.

+1

Tak, wiem, że mogę używać QueryTables. Ale mam googleed i nie widzę sposobu przechowywania wyników QueryTable do niczego * oprócz * komórki. To wydaje mi się dość hackowskie, dlatego poprosiłem o alternatywę. Jeśli znasz sposób zapisania wartości w zmiennej, doceniam to, jeśli możesz to opisać lub odesłać do linku do dokumentu. Również rzecz 'Microsoft.XMLHTTP' nie będzie działać z poziomu Excela na MacOS. – Cheeso

+1

Uff, to będzie trudne. Myślę, że masz rację. QueryTable przechowuje tylko swoją zawartość w komórce (jest to w rzeczywistości cały punkt tej funkcji, ponieważ jest to tylko tabela z podłączonym źródłem danych). Osobiście znam tylko sposób powyżej lub z DLL, ale to także Windows. Mimo to program Excel jest przeznaczony do używania w oknach. Jeśli chcesz wszystkie funkcje, użyj boot camp. Innym sposobem byłoby użycie narzędzia takiego jak curl i wykonanie przez powłokę. – mffap

+0

co za świetna metoda. Czy wiesz, czy wynik funkcji może być kiedykolwiek zbyt duży, aby powrócić? za duży ciąg? – mango

Powiązane problemy