Themabewertung:
  • 0 Bewertung(en) - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Wetterdaten aus dem Web importieren in Form einer Zip
#1
Hallo zusammen! Wie der Name des Beitrags vielleicht schon verrät suche ich eine Lösung um Daten aus Web in Excel einzubinden. Diese Daten sind vergangene Wetterdaten, die immer weiter aktualisiert werden und in Form einer Zip Datei heruntergeladen werden kann. Ich möchte das ganze gerne automatisieren, sodass man in meiner Excell Mappe später immer alle Wetterdaten aktualisiert zur Verfügung hat, sprich vergangen Werte aber auch aktuelle. Ich kenne die Funktion Daten aus dem Web einfügen von Excel, jedoch hab ich es noch nicht realisiert bekommen dort in irgendeiner Form die Daten einzupflegen.

Die Website lautet: https://www.dwd.de/DE/Home/home_node.html
Diese besitzt auch enen OpenData bereich, falls es irgendwie weiterhilft: https://opendata.dwd.de/climate_environm...istorical/
Dieser Link führt zu den einzelnen Wetterstation die sich jeweils hinter einer Zip datei befindet.

Mein bisheriges googeln war leider nicht erfolgreich, was auch daran liegt, dass ich nicht genau weiß, wonach ich genau googeln soll um mein Problem zu lösen. Wie gesagt ich kenne die Funktion Daten abrufen aus dem Web aber jedesmal wenn ich da irgendeinen Link einfüge erkennt Excel keinerlei Datei oder Tabelle, die man importieren könnte.

Es gibt eine Excel-Sheet, dass die beschriebene Funktion benutzt, leider ist diese Mappe aber Passwort geschützt, was das nachvollziehen erschwert. Hier der Link zur Datei: https://www.google.com/url?sa=t&rct=j&q=...vGSXm2n3tK

Ich bedanke mich im voraus für jegliche Hilfe!
Gruß Niko
Zitieren
#2
Hallo,

schönes Thema, erinnert mich an meinen Artikel für die c't (Heise) und einen Vortrag an der FH Aachen vor längerer Zeit,
wo eben Wetterdaten vom DWD ausgewertet wurden :-)

Ich kann dazu empfehlen, Power Query zu verwenden, um die entpackten TXT's oder CSV's aus den Zip-Dateien aus einem
Ordner auszulesen. Damals verwendete ich Dateien in der Form produkt_monat_Monatswerte_19000101_19770630_04933.txt.
Die Stationen waren in einer separaten Datei zu finden.

Auch wenn es jetzt in dem Artikel bei der c't darum ging, Excel-Daten auf animierten Landkarten visualisieren, könntest
Du ggf. auf den Power Query Abfragen aufbauen. Den Artikel findest Du hier Profi-Geo-Diagramme (kostenpflichtig)
und die kostenlose, frei zugängliche, Beispieldatei hier Webcode: ct.de/yj23.

Gruß
Microsoft Excel Expert · Microsoft Most Valuable Professional (MVP) :: 01/2011 - 06/2019 :: 04/2020 - 06/2022
https://de.excel-translator.de/translator :: Online Excel-Formel-Übersetzer :: Funktionen :: Fehlerwerte :: Argumente :: Tabellenbezeichner (neu)
Zitieren
#3
Hallo, Danke für die Antwort. Verstehe ich das richtig, dass die Funktion Power Query dann die Zip Datei eigenständig im Hintergrund runterlädt, entpackt und meine gewünschten Daten in Excel einpflegt? Weil genau dieser Vorgang soll realisiert und automatisiert werden.
Die Datei, die ich verwende ist im Grunde ja so ähnlich, heißt z.B. produkt_tu_stunde_19690701_20171231_01078.txt. Ich möchte halt am liebsten, dass Excel mir alle Daten von allen Wetterstationen bereitstellt und der Nutzer meines Tools dann nur den Zeitraum der Messdaten (in meinem Fall wäre das dann immer ein ganzes Jahr) und die richtige Station auswählen muss.
Da ich mich mit der Funktion Power Query noch nicht auskenne, hilft mir Ihr Excel-sheet gerade nicht weiter aber danke trotzdem! Ich glaube das erste Was ich jetzt tun muss und werde ist, mich mit der Funktion erstmal auseinanderzusetzen.

Vielen Dank für die Hilfe
Zitieren
#4
Hallo,

nein, Power Query lädt die Dateien nicht erstmal selbstständig herunter und/oder entpackt diese. Möglicherweise ginge das über einen
aufwändigeren M-Code, der Abfragesprache für Power Query, nicht aber nur über die Oberfläche. Das manuelle Herunterladen und in
denselben Ordner Entpacken, wo die anderen Dateien liegen, sowie eine Aktualisierung der Abfrage in Excel wäre aber dann mithilfe
von PQ erstmal das Einzige, was nicht automatisch wäre. Es spricht auch nichts gegen eine Kombination Power Query und VBA.

Generell sind die Daten vom DWD leider nicht optimal für die Verwendung durch Excel bzw. Power Query aufbereitet und m.W.
eher für spezialisierte Wetteranwendungen gedacht. Aber Power Query ermöglicht das sinnvolle Transformieren und Zuordnen
der Daten. Es ist in jedem Fall sinnvoll, sich mit den Möglichkeiten von Power Query zu beschäftigen.

Gruß
Microsoft Excel Expert · Microsoft Most Valuable Professional (MVP) :: 01/2011 - 06/2019 :: 04/2020 - 06/2022
https://de.excel-translator.de/translator :: Online Excel-Formel-Übersetzer :: Funktionen :: Fehlerwerte :: Argumente :: Tabellenbezeichner (neu)
Zitieren
#5
Hallo,

nach einem ersten Blick in eine der Dateien:

ein automtisierter Update sollte möglich sein, ist aber recht kompliziert!

- Aus dem Quelltext der genannte Seite kann (einmalig) die Name der zip-Dateien ausgelesen werden
- die Dateien können mit einer API "UrlMon" download werden
- in VBA mit "Namespace" kann das zip-Archiv geöffnet und die txt-Datei extrahiert werden
- Öffnen der Txt und suchen der neuesten Werte ist dagegen eher einfach


Also wenn du in VBA fit bist und einige Stunden inverstierst, sollte es gehen.

mfg
Zitieren
#6
Danke für die vielen Vorschläge! Also ich bin soweit in VBA fit, dass ich das seit ca. einem halben Jahr nutze und mir eigentlich bis jetzt meine Lösungen immer zusammen gegoogelt habe.
Ich weiß zwar nicht, was die ganzen Abkürzungen (API "UrlMon") bedeuten aber auch hier wird mir googel bestimmt weiterhelfen. Danke erstmal für eure Hilfe!

Grüße
Zitieren
#7
Ich habe jetzt mir einen Code zusammengegoogelt, weil ich das auf anhieb nicht selber hingekriegt habe. Jedoch tut sich garnichts wenn ich dn Code ausführe. Es kommt nicht einmal eine Fehlermeldung.

Hier der entsprechende Code.
Link: https://www.vba-hexerei.de/2017/07/14/hy...nterladen/

Option Explicit

Private Declare PtrSafe Function URLDownloadToFile Lib "urlmon" _
  Alias "URLDownloadToFileA" ( _
  ByVal pCaller As Long, _
  ByVal szURL$, _
  ByVal szFileName$, _
  ByVal dwReserved As Long, _
  ByVal lpfnCB As Long) As Long

Sub HyperLinkKopieren()
Dim Hl As Hyperlink
Dim rngBereich As Range          'Bereich, der nach Hyperlinks durchsucht wird
Dim strQuellDat As String        'Pfad + Datei, die kopiert werden soll
Dim strDatName As String        'Dateiname bei Dateien, die im Internet stehen

'Speicherort angeben
  Const strPfad As String = "C:"      '<--- anpassen! - mit Backslash "\" abschließen!

'Existiert der Speicherort?
  If Dir(strPfad, vbDirectory) = "" Then
      MsgBox "Der angegebene Pfad ist ungültig!" & vbLf & vbLf & _
              "Bitte richtigen Pfad im Code angeben!" & vbLf & vbLf & _
              "Das Makro bricht ab!"
               
      Exit Sub
  End If

'Bereich, der nach Hyperlinks durchsucht wird angeben:
  With ThisWorkbook.Worksheets("Tabelle1")          '<--- anpassen!
      Set rngBereich = .Range("A1:L20")              '<--- anpassen!
  End With

'Schleife über alle Hyperlinks in diesem Bereich
  For Each Hl In rngBereich.Hyperlinks
      strQuellDat = Hl.Address                                                      'Quelldatei
      Debug.Print "Quelldatei : " & strQuellDat
      If LCase(Left(strQuellDat, 4)) = "http" Then                                  'Quelldatei online
        strDatName = Split(strQuellDat, "/")(UBound(Split(strQuellDat, "/")))      'Dateiname
        Debug.Print URLDownloadToFile(0, strQuellDat, strPfad & strDatName, 0, 0)  'herunterladen
      Else                                                                          'Quelldatei offline
        FileCopy strQuellDat, strPfad & Dir(strQuellDat, vbNormal)                'Speichern unter
      End If
  Next
   
'aufräumen:
  Set rngBereich = Nothing
  Set Hl = Nothing
End Sub



Hier noch ein anderer kürzerer Code, den ich auch nicht zum laufen bringen kann. Er zeigt auch keine Wirkung, nichtmal eine Fehlermeldung.

Option Explicit

Private Declare PtrSafe Function URLDownloadToFile Lib "urlmon" _
    Alias "URLDownloadToFileA" ( _
    ByVal pCaller As Long, _
    ByVal szURL As String, _
    ByVal szFileName As String, _
    ByVal dwReserved As Long, _
    ByVal lpfnCB As Long) As Long


Public Sub machs()
   
    Dim dieUrl As String
    Dim dasZiel As String
    Dim myResult
    dieUrl = "https://opendata.dwd.de/climate_environment/CDC/observations_germany/climate/daily/kl/historical/tageswerte_KL_00001_19370101_19860630_hist.zip"

    dasZiel = "C:"
    myResult = URLDownloadToFile(0, dieUrl, dasZiel, 0, 0)
   
End Sub
Grüße
Zitieren
#8
Hallo,

versuche es mal mit folgendem Code ...

Code:
Option Explicit
 
  Private Declare PtrSafe Function apiDownloadFile Lib "urlmon" _
          Alias "URLDownloadToFileA" (ByVal pCaller As LongPtr, ByVal szURL As String, _
          ByVal szFileName As String, ByVal dwReserved As LongPtr, ByVal lpfnCB As LongPtr) As LongPtr
 
  Private Declare PtrSafe Function apiDeleteCache Lib "wininet.dll" _
          Alias "DeleteUrlCacheEntry" (ByVal lpszUrlName As String) As Long
 
  Public Sub Download()
     
      Dim dieUrl    As String
      Dim dasZiel   As String
      Dim myResult  As LongPtr
     
      dieUrl = "https://opendata.dwd.de/climate_environment/CDC/observations_germany/climate/daily/kl/historical/tageswerte_KL_00001_19370101_19860630_hist.zip"
     
      apiDeleteCache dieUrl
     
      dasZiel = "D:\Downloads\" & StrReverse(Split(StrReverse(dieUrl), "/")(0))
      myResult = apiDownloadFile(0, dieUrl, dasZiel, 0, 0)
     
  End Sub

Dem Downloadziel sollte ein Dateiname mit übergeben werden. apiDeleteCache löscht zuvor den Cache für die URL.
Ausserdem sollte nicht direkt auf C: heruntergeladen werden, kann sein, dass Windows das unterbindet. Code
prüft hier nicht, ob die Datei bereits vorhanden ist.

Gruß
Microsoft Excel Expert · Microsoft Most Valuable Professional (MVP) :: 01/2011 - 06/2019 :: 04/2020 - 06/2022
https://de.excel-translator.de/translator :: Online Excel-Formel-Übersetzer :: Funktionen :: Fehlerwerte :: Argumente :: Tabellenbezeichner (neu)
Zitieren
#9
Hallo maninweb , danke für die Antwort. Ich habe den Code implementiert jedoch bleibt der Downloadordner weiterhin leer. Es kommt aber keine Fehlermeldung von Excel. Ich muss den Downloadordner in C wählen, weil mein Laptop nur eine Partition hat. Außerdem weiß ich nicht genau wo bzw. wie ich ich dem Downloadziel einen Dateinamen mit übergebe.

Was müsste ich denn tun, damit die alte Datei mit der neuen einfach ersetzt wird? Somit könnte ich sichergehen, dass beim Starten der Excel-Datei jedesmal die aktuellsten Daten heruntergeladen werden und aktualisiert sind.

Danke im voraus für die Hilfe!
Niko
Zitieren
#10
Hallo,

der Code aus meine letzten Beitrag funktioniert bei mir einwandfrei. Ich kann auch z.B. C:\MeinDownloadOrdner verwenden;
ich schlage vor, einen eigenen Ordner dafür zu nehmen (also nicht den Standard-Windows-Download-Ordner).

Der Dateiname ist in dem Part hier ... StrReverse(Split(StrReverse(dieUrl), "/")(0)). Das kannst Du durch einen eigenen
Code ersetzen, z.B. dasZiel = "C:\MeinDownloadOrdner\" & "MeineDatei.zip". Bei jedem erneuten Download - also einem
erneuten Aufruf der Funktion - wird die vorherige Datei überschrieben.

Warum das jetzt insgesamt bei Dir nicht geht, kann ich Dir leider nicht sagen. Möglich wäre z.B., dass eine Firewall den
Zugriff von Excel auf das Internet blockt.

Gruß
Microsoft Excel Expert · Microsoft Most Valuable Professional (MVP) :: 01/2011 - 06/2019 :: 04/2020 - 06/2022
https://de.excel-translator.de/translator :: Online Excel-Formel-Übersetzer :: Funktionen :: Fehlerwerte :: Argumente :: Tabellenbezeichner (neu)
Zitieren


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste




Hinweis auf Angebot Excel-Inside - lang    Keine Lösung gefunden? Du kannst Dich gerne an unser erfahrenes Experten-Team wenden um dein Anliegen zu besprechen.
   Gerne erstellen wir auf dieser Basis ein Angebot.
   Sende deine Anfrage einfach
per E-Mail an anfrage@excel-inside.de


Powerd and supported by Excel-InsideSolutions