Buienradar in Excel mit JSON

Buienradar in Excel mit JSON

2. November 2021 0 Von Björn Meijer

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:

Excel Regenradar-Dashboard
Excel Regenradar-Dashboard

Sie können die Anzeige des Dashboards nach Ihrem eigenen Geschmack formatieren, aber dieses Dashboard ist wie folgt formatiert:

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.