Buienradar in Excel mit JSON
Die Möglichkeiten in Excel sind nahezu unbegrenzt. Sie können sogar Ihr eigenes Regenradar bauen und die Daten in einem Blatt verarbeiten. Wir werden dies mit tun JSON (JavaScript-Objekt-Notation). Zum Abrufen der Wetterdaten verwenden wir die kostenlose API von wetterapi.com.
Schritt 1 – Erstellen Sie ein Konto
Erstellen Sie ein kostenloses Konto unter wetterapi.com für einen persönlichen API-Schlüssel. Mit dem kostenlosen Konto können Sie 1.000.000 API-Aufrufe pro Monat tätigen und erhalten Prognosen bis zu drei Tage im Voraus.
Schritt 2 – Installieren Sie VBA JSON
Herunterladen und installieren VBA-JSON von Tim Hall über GitHub. Die GitHub-Seite von Tim Halll enthält eine Schritt-für-Schritt-Installationsanleitung zur Installation.
Schritt 3 – welche Daten können Sie abrufen
Die folgenden Artikel können über die kostenlose API von abgerufen werden wetterapi.com.
- Aktuelle Wetterlage;
- Dreitägige Wettervorhersage;
- Astronomische Daten.
Schritt 4 – Wetter-Dashboard erstellen
Wir beginnen mit der Erstellung des Dashboards. Die von uns erhobenen Daten werden übersichtlich visuell dargestellt. Auf der Dokumentationsseite von Weatherapi.com ist klar angegeben, welche Parameter abgerufen werden können. In unserem Beispiel beschränken wir uns auf folgende Daten:
- Datum;
- Maximal erwartete Temperatur in Grad Celsius;
- Erwartete Mindesttemperatur in Grad Celsius;
- Erwarteter Gesamtniederschlag in Millimetern;
- Regenwahrscheinlichkeit in Prozent;
- Das Wettersymbol.
Die abgerufenen Daten werden wie folgt angezeigt:
Sie können die Anzeige des Dashboards nach Ihrem eigenen Geschmack formatieren, aber dieses Dashboard ist wie folgt formatiert:
Die Datei „/home/u622304142/domains/bjorn-meijer.nl/wp-content/uploads/2021/11/Weatherapi-Realtime-API.xlsx“ existiert nicht.
Für das Wettersymbol muss nichts eingegeben werden. Dies wird über ein VBA-Skript in der richtigen Zelle angezeigt.
Desweiteren soll dem Blatt ein Button hinzugefügt werden, mit dem wir das Makro einfach aufrufen können.
Schritt 5 – Abrufen von JSON-Daten über VBA
Der Code zum Abrufen der Daten ist recht einfach. Wir beginnen mit der Deklaration unserer Variablen. Dann das Unterprogramm AlleSymbole löschen
angesprochen. Dadurch werden alle Wettersymbole aus unserem Dashboard entfernt. Wenn wir dies nicht tun würden, würde jedes Mal, wenn Wetterdaten abgerufen werden, ein neues Symbol über dem vorherigen Symbol platziert werden.
In der String-Variablen API-Schlüssel
Geben Sie Ihren eigenen API-Schlüssel ein, den Sie auf Weatherapi.com erhalten haben.
Zur Variable strURL
Wir weisen dann den Wert der URL zu, um die gewünschten Parameter abzurufen. BEREITZUSTAND_ABGESCHLOSSEN
auf 4 gesetzt ist. Die XMLHttpRequest.readyState-Eigenschaft gibt den Zustand zurück, in dem sich ein XMLHttpRequest-Client befindet. Ein Wert von 4 gibt an, dass der Vorgang abgeschlossen wurde.
Sobald wir ein http-Objekt erstellt haben, wird ein GET-Request gesendet. Wenn der HTTP-Vorgang abgeschlossen ist, wird die Variable Meine Antwort
mit dem Antworttext (JSON-Daten) aus dem http-Objekt gefüllt.
Dann wird der JSON-Parser aufgerufen, um die JSON-Daten zu analysieren. Das machen wir über die Funktion ParseJson(MeineAntwort)
zu berufen.
Nachdem die JSON-Daten analysiert wurden, können wir unsere Daten daraus extrahieren.
Der vollständige Antworttext des JSON ist ziemlich lang und wird daher nicht angezeigt. Der Antworttext ist über die Download-Link unten auf dieser Seite herunterladen.
Das JSON ist wie folgt aufgebaut. Der Stamm des JSON enthält die folgenden Objekte/Arrays:
- Lage;
- aktuell;
- Vorhersage;
- Prognosetag (Array);
- Datum;
- date_epoche;
- Tag
- maxtemp_c;
- maxtemp_f;
- mintemp_c;
- …
- daily_chance_of_snow.
Wie Sie sehen, können Sie sich JSON als Ordnerstruktur im Windows Explorer vorstellen. Hier ist prognostizierter Tag
ein Array (Sammlung) von Daten, die im Objekt enthalten sind Vorhersage
. In der Sammlung prognostizierter Tag
es gibt wieder mehrere Objekte mit Namen und entsprechenden Werten.
Um alle Daten aus dem Array zu erhalten prognostizierter Tag
Wir verwenden eine For Each-Schleife. Solange wir die Bedingung erfüllen, werden alle angeforderten Werte abgerufen und in die richtigen Zellen platziert.
Option Explicit Sub getForecast() Dim Item As Object Dim READYSTATE_COMPLETE As Integer Dim API_key As String Dim http As Object, JSON As Object, i As Integer Dim MyResponse As String Dim strUrl As String Dim strIconUrl As String Call DeleteAllIcons API_key = "xxxxxxxxxxxxxxxxxxxxxxxxxxx" strUrl = "http://api.weatherapi.com/v1/forecast.json?key=" & API_key & "&q=Amsterdam&days=3&aqi=no&alerts=no" READYSTATE_COMPLETE = 4 Setze http = CreateObject("MSXML2.XMLHTTP") http .Open "GET", strUrl http.SetRequestHeader "Accept", "application/json" http.Send Do Until http.ReadyState = READYSTATE_COMPLETE DoEvents Loop MyResponse = http.ResponseText Set JSON = ParseJson(MyResponse) For Each Item In JSON(" Prognose")("Prognosetag") Sheet1.Cells(2, i + 1).Value = Item("date") Sheet1.Cells(4, i + 1).Value = Item("day")("maxtemp_c" ) Sheet1.Cells(5, i + 1).Value = Item("day")("mintemp_c") Sheet1.Cells(6, i + 1).Value = Item("day")("totalprecip_mm") Sheet1 .Cells(7, i + 1).Value = (Item("day")("daily_chance_of_ra in") / 100) strIconUrl = "http:" & Item("day")("condition")("icon") With Blad1.Pictures.Insert("http:" & Item("day")("condition ")("icon")) With .ShapeRange .LockAspectRatio = msoTrue End With .Left = ActiveSheet.Cells(3, i + 1).Left .Top = ActiveSheet.Cells(3, i + 1).Top .Placement = 1 .PrintObject = True End With i = i + 1 Next Item End Sub Sub DeleteAllIcons() Dim shape Als Excel.shape Für jede Form In ActiveSheet.Shapes If shape.Name <> "CommandButton1" Then shape.Delete End If
Downloads
Wenn Sie das Problem mit dem obigen Handbuch nicht lösen können, laden Sie die Beispieldatei herunter oder stellen Sie eine Frage, indem Sie eine Nachricht hinterlassen.
Teilen mit:
- Klick, um über Twitter zu teilen (Wird in neuem Fenster geöffnet)
- Klick, um auf Facebook zu teilen (Wird in neuem Fenster geöffnet)
- Mehr
- Klicken, um einem Freund einen Link per E-Mail zu senden (Wird in neuem Fenster geöffnet)
- Klick, um auf LinkedIn zu teilen (Wird in neuem Fenster geöffnet)
- Klick, um auf Reddit zu teilen (Wird in neuem Fenster geöffnet)
- Klick, um auf Tumblr zu teilen (Wird in neuem Fenster geöffnet)
- Klicken, um auf Telegram zu teilen (Wird in neuem Fenster geöffnet)
- Klicken, um auf WhatsApp zu teilen (Wird in neuem Fenster geöffnet)