Wetterdaten auslesen

  • Excel

Es gibt 16 Antworten in diesem Thema. Der letzte Beitrag () ist von Blaupunkt79.

    Wetterdaten auslesen

    Hallo,

    ich bin gerade dabei, Wetterdaten per API auszulesen. Beim Anbieter openweathermap.org klappt das schon ganz gut, jedoch in der "free" Version nur für 5 Tage. Jetzt wollte ich yahoo-weather versuchen. Die aus der API resultierende XML wird auch eingelesen, jedoch erfolgt jedesmal eine "Fehler/Statusmeldung", die mich stört. Die eingelesen Daten sind für mich ok, nur die Meldung muß weg.

    VB.NET-Quellcode

    1. Private Sub Image45_Click()
    2. menuauswahl = "BB": Call Suchen999
    3. If wert9 = "N" Then
    4. MsgBox ("Keine Berechtigung vorhanden.")
    5. Else
    6. On Error Resume Next
    7. If ComboBox1.Value = "" Then MsgBox ("Bitte wählen Sie zwingend einen Kunden aus!"): GoTo zuende
    8. If IsNumeric(Worksheets("kunden1").Range("b" & kundenzeile)) Then MsgBox ("Keine Stadt beim ausgewählten Kunden hinterlegt. Bitte unter Einstellungen ändern!"): logtext = "Keine Stadt hinterlegt": Call loggen: GoTo zuende
    9. If Worksheets("kunden1").Range("b" & kundenzeile) = "" Then MsgBox ("Keine Stadt beim ausgewählten Kunden hinterlegt. Bitte unter Einstellungen ändern!"): logtext = "Keine Stadt hinterlegt": Call loggen: GoTo zuende
    10. Image45.Visible = False 'Wetter aus
    11. Image44.Visible = True 'Wetter an
    12. wetter99 = 1
    13. Dim nummer2 As Long
    14. Worksheets("wetterID").Visible = True
    15. Worksheets("wetterID").Select
    16. nummer2 = Worksheets("WetterID").Range("b" & Rows.Count).End(xlUp).Row
    17. Worksheets("WetterID").Rows("1:" & nummer2).Delete
    18. Dim stadt As String
    19. stadt = Worksheets("kunden1").Range("b" & kundenzeile)
    20. ActiveWorkbook.XmlImport URL:= _
    21. "https://query.yahooapis.com/v1/public/yql?q=select * from weather.forecast where woeid in (select woeid from geo.places(1) where text%3D%22" & stadt & "%2C de%22) and u %3D %22C%22&format=xml", ImportMap:= _
    22. Nothing, Overwrite:=True, Destination:=Worksheets("WetterID").Range("$A$1")
    23. ActiveWorkbook.XmlMaps("query_Zuordnung").Delete 'yahoo
    24. Worksheets("wetterID").Visible = False


    Die angezeigte Fehlermeldung:

    "Einige Daten wurden als Text importiert"

    Ich möchte also einfach nur, dass die Fehlermeldung verschwindet, scheint auch mehr nur ein Hinweis zu sein.

    Danke

    Gruß
    Bilder
    • Fehler_XML.jpg

      195,36 kB, 907×853, 243 mal angesehen
    Geht nach 5 Tagen nicht mehr? Hast sicher die freien 60 Requests pro Minute verbraucht. Sonst gibt es dort doch keine weitere Beschränkung für Anfragen in der Free Variante.

    Man kann die Fehlermeldung auch nicht wirklich ganz lesen, diese solltest du mal komplett zeigen.
    Cloud Computer? Nein Danke! Das ist nur ein weiterer Schritt zur totalen Überwachung.
    „Wer die Freiheit aufgibt, um Sicherheit zu gewinnen, wird am Ende beides verlieren.“
    Benjamin Franklin
    Ups, dachte geht garnichts mehr. Hättest auch vorhersage sagen können, dann wäre es deutlich gewesen.

    Man kann die Fehlermeldung auch nicht wirklich ganz lesen, diese solltest du mal komplett zeigen.
    Cloud Computer? Nein Danke! Das ist nur ein weiterer Schritt zur totalen Überwachung.
    „Wer die Freiheit aufgibt, um Sicherheit zu gewinnen, wird am Ende beides verlieren.“
    Benjamin Franklin
    Ich habe nicht viel Ahnung von Excel, aber es scheint als hättest du ein Feld mit einem Numerischen Typen und aus der XML kommt ein String oder anders herum. Da solltest du mal schauen und auf Typengleichheit achten. "1.2" ist ja nicht 1.2 .
    Cloud Computer? Nein Danke! Das ist nur ein weiterer Schritt zur totalen Überwachung.
    „Wer die Freiheit aufgibt, um Sicherheit zu gewinnen, wird am Ende beides verlieren.“
    Benjamin Franklin
    Hi,

    auf meinem Pivatlaptop funktioniert mein Programm, nutze da Excel 2007 (32 Bit Edition). Auf dem Firmenlaptop kann er die XML nicht einlesen, bedarf es da zusätzlich noch Einstellungen im Trust Center? Die XML kann ich dort via Windows Explorer aufrufen. Auf dem Firmenlaptop läuft Excel 2016 (64 bit Edition).

    Danke

    Gruss
    Du arbeitest doch mit Excel oder nicht?

    Und wie bringst du Excel dazu die XML-Datei einzulesen?

    Normalerweise macht man das über die DLL-Datei der jeweiligen Office-Anwendung und die dann verfügbare Interop-Funktion zum Aufruf der Instanz und den jeweiligen Parametern.

    Guckst du:
    dotnetperls.com/word

    dotnetperls.com/excel
    Ich importiere die XML Datei folgendermaßen:

    Visual Basic-Quellcode

    1. stadt = Worksheets("kunden1").Range("b" & kundenzeile)
    2. Application.DisplayAlerts = False
    3. ActiveWorkbook.XmlImport URL:= _
    4. "https://query.yahooapis.com/v1/public/yql?q=select * from weather.forecast where woeid in (select woeid from geo.places(1) where text%3D%22" & stadt & "%2C de%22) and u %3D %22C%22&format=xml", ImportMap:= _
    5. Nothing, Overwrite:=True, Destination:=Worksheets("Wetter").Range("$A$1")
    6. Application.DisplayAlerts = True
    7. ActiveWorkbook.XmlMaps("query_Zuordnung").Delete 'yahoo
    Klappt jetzt, UrlDownloadFile allerdings nur mit "http" jedenfalls auf dem Firmenrechner, auf dem privatem ging auch "https".

    Anbei der gesamte Code, um von yahoo Wetterdaten abzugreifen. (Geht sicher eleganter zu schreiben, aber funktioniert.

    Visual Basic-Quellcode

    1. Sub yahoo()
    2. Dim tag As Long
    3. Dim datum77 As String
    4. Dim datum88 As Date
    5. Dim datum99 As Date
    6. Dim stadt As String
    7. Dim nummer2 As Long
    8. Dim nummer1 As Long
    9. Dim nummer5 As String
    10. Dim strUrl As String
    11. Dim strSavePath As String
    12. Dim returnValue As Long
    13. strSavePath = laufwerk
    14. If Mail101.Image44.Visible = False Then wetter99 = 0: GoTo zuende
    15. If IsNumeric(Worksheets("kunden1").Range("b" & kundenzeile)) Then MsgBox ("Keine Stadt beim ausgewählten Kunden hinterlegt. Bitte unter Einstellungen ändern!"): logtext = "Keine Stadt hinterlegt": Call loggen: wetter99 = 0: GoTo zuende
    16. If Worksheets("kunden1").Range("b" & kundenzeile) = "" Then MsgBox ("Keine Stadt beim ausgewählten Kunden hinterlegt. Bitte unter Einstellungen ändern!"): logtext = "Keine Stadt hinterlegt": Call loggen: wetter99 = 0: GoTo zuende
    17. nummer2 = Worksheets("Wetterreal").Range("a" & Rows.Count).End(xlUp).Row
    18. Worksheets("Wetterreal").Rows("1:" & nummer2).Delete
    19. Worksheets("wetter").Visible = True
    20. Worksheets("wetter").Select
    21. nummer2 = Worksheets("Wetter").Range("b" & Rows.Count).End(xlUp).Row
    22. Worksheets("Wetter").Rows("1:" & nummer2).Delete
    23. Dim e As Long
    24. Dim f As Long: f = 0
    25. Dim k As Long: k = 0
    26. Dim j As Long: j = 0
    27. stadt = Worksheets("kunden1").Range("b" & kundenzeile)
    28. Application.DisplayAlerts = False
    29. strUrl = "https://query.yahooapis.com/v1/public/yql?q=select * from weather.forecast where woeid in (select woeid from geo.places(1) where text%3D%22" & stadt & "%2C de%22) and u %3D %22C%22&format=xml"
    30. returnValue = URLDownloadToFile(0, strUrl, strSavePath, 0, 0)
    31. If returnValue <> 0 Then
    32. MsgBox "Wetterdaten momentan nicht verfügbar, bitte später nochmals versuchen!": wetter99 = 0: GoTo zuende
    33. Else
    34. ActiveWorkbook.XmlImport strUrl, ImportMap:= _
    35. Nothing, Overwrite:=True, Destination:=Worksheets("Wetter").Range("$A$1")
    36. Application.DisplayAlerts = True
    37. ActiveWorkbook.XmlMaps("query_Zuordnung").Delete 'yahoo
    38. Worksheets("wetter").Visible = False
    39. nummer2 = 1
    40. e = 1
    41. Do Until Worksheets("wetter").Cells(nummer2, e) = ""
    42. If Worksheets("wetter").Cells(nummer2, e) = "date9" Then f = e
    43. If Worksheets("wetter").Cells(nummer2, e) = "high" Then k = e
    44. If Worksheets("wetter").Cells(nummer2, e) = "text10" Then j = e
    45. e = e + 1
    46. Loop
    47. If f = 0 Or k = 0 Then MsgBox ("Wetterdaten auf yahoo momentan nicht verfügbar!"): wetter99 = 0: GoTo zuende
    48. nummer2 = 3
    49. nummer1 = 1
    50. Do Until Worksheets("wetter").Range("b" & nummer2) = ""
    51. nummer5 = Left$(Worksheets("wetter").Cells(nummer2, f), 2) & "."
    52. If InStr(Worksheets("wetter").Cells(nummer2, f), "Jan") > 0 Then datum77 = nummer5 & "01." & Right$(Worksheets("wetter").Cells(nummer2, f), 4)
    53. If InStr(Worksheets("wetter").Cells(nummer2, f), "Feb") > 0 Then datum77 = nummer5 & "02." & Right$(Worksheets("wetter").Cells(nummer2, f), 4)
    54. If InStr(Worksheets("wetter").Cells(nummer2, f), "Mar") > 0 Then datum77 = nummer5 & "03." & Right$(Worksheets("wetter").Cells(nummer2, f), 4)
    55. If InStr(Worksheets("wetter").Cells(nummer2, f), "Apr") > 0 Then datum77 = nummer5 & "04." & Right$(Worksheets("wetter").Cells(nummer2, f), 4)
    56. If InStr(Worksheets("wetter").Cells(nummer2, f), "May") > 0 Then datum77 = nummer5 & "05." & Right$(Worksheets("wetter").Cells(nummer2, f), 4)
    57. If InStr(Worksheets("wetter").Cells(nummer2, f), "Jun") > 0 Then datum77 = nummer5 & "06." & Right$(Worksheets("wetter").Cells(nummer2, f), 4)
    58. If InStr(Worksheets("wetter").Cells(nummer2, f), "Jul") > 0 Then datum77 = nummer5 & "07." & Right$(Worksheets("wetter").Cells(nummer2, f), 4)
    59. If InStr(Worksheets("wetter").Cells(nummer2, f), "Aug") > 0 Then datum77 = nummer5 & "08." & Right$(Worksheets("wetter").Cells(nummer2, f), 4)
    60. If InStr(Worksheets("wetter").Cells(nummer2, f), "Sep") > 0 Then datum77 = nummer5 & "09." & Right$(Worksheets("wetter").Cells(nummer2, f), 4)
    61. If InStr(Worksheets("wetter").Cells(nummer2, f), "Oct") > 0 Then datum77 = nummer5 & "10." & Right$(Worksheets("wetter").Cells(nummer2, f), 4)
    62. If InStr(Worksheets("wetter").Cells(nummer2, f), "Nov") > 0 Then datum77 = nummer5 & "11." & Right$(Worksheets("wetter").Cells(nummer2, f), 4)
    63. If InStr(Worksheets("wetter").Cells(nummer2, f), "Dec") > 0 Then datum77 = nummer5 & "12." & Right$(Worksheets("wetter").Cells(nummer2, f), 4)
    64. datum88 = datum77
    65. tag = Weekday(Date, 2)
    66. datum99 = DateAdd("d", (8 - tag), Date)
    67. If datum99 > datum88 Then GoTo weiter
    68. If datum88 > DateAdd("d", 6, datum99) Then GoTo weiter
    69. Worksheets("wetterreal").Range("a" & nummer1) = Format(datum88, "DDDD") & ", " & datum77
    70. Worksheets("wetterreal").Range("c" & nummer1) = "Maximal " & Worksheets("wetter").Cells(nummer2, k)
    71. If Worksheets("wetter").Cells(nummer2, j) = "Tornado" Then Worksheets("wetterreal").Range("B" & nummer1) = "Tornado"
    72. If Worksheets("wetter").Cells(nummer2, j) = "Tropical Storm" Then Worksheets("wetterreal").Range("B" & nummer1) = "Tropischer Sturm"
    73. If Worksheets("wetter").Cells(nummer2, j) = "Hurricane" Then Worksheets("wetterreal").Range("B" & nummer1) = "Hurrikan"
    74. If Worksheets("wetter").Cells(nummer2, j) = "Severe Thunderstorms" Then Worksheets("wetterreal").Range("B" & nummer1) = "Schwere Gewitter"
    75. If Worksheets("wetter").Cells(nummer2, j) = "Thunderstorms" Then Worksheets("wetterreal").Range("B" & nummer1) = "Gewitter"
    76. If Worksheets("wetter").Cells(nummer2, j) = "Rain And Snow" Then Worksheets("wetterreal").Range("B" & nummer1) = "Regen und Schnee"
    77. If Worksheets("wetter").Cells(nummer2, j) = "Snow And Sleet" Then Worksheets("wetterreal").Range("B" & nummer1) = "Schnee und Graupel"
    78. If Worksheets("wetter").Cells(nummer2, j) = "Freezing Drizzle" Then Worksheets("wetterreal").Range("B" & nummer1) = "Gefrierender Nieselregen"
    79. If Worksheets("wetter").Cells(nummer2, j) = "Drizzle" Then Worksheets("wetterreal").Range("B" & nummer1) = "Nieselregen"
    80. If Worksheets("wetter").Cells(nummer2, j) = "Freezing Rain" Then Worksheets("wetterreal").Range("B" & nummer1) = "Gefrierender Regen"
    81. If Worksheets("wetter").Cells(nummer2, j) = "Showers" Then Worksheets("wetterreal").Range("B" & nummer1) = "Schauer"
    82. If Worksheets("wetter").Cells(nummer2, j) = "Snow Flurries" Then Worksheets("wetterreal").Range("B" & nummer1) = "Schneegestöber"
    83. If Worksheets("wetter").Cells(nummer2, j) = "Light Snow Showers" Then Worksheets("wetterreal").Range("B" & nummer1) = "Leichte Schneeschauer"
    84. If Worksheets("wetter").Cells(nummer2, j) = "Blowing Snow" Then Worksheets("wetterreal").Range("B" & nummer1) = "Schneetreiben"
    85. If Worksheets("wetter").Cells(nummer2, j) = "Snow" Then Worksheets("wetterreal").Range("B" & nummer1) = "Schnee"
    86. If Worksheets("wetter").Cells(nummer2, j) = "Hail" Then Worksheets("wetterreal").Range("B" & nummer1) = "Hagel"
    87. If Worksheets("wetter").Cells(nummer2, j) = "Sleet" Then Worksheets("wetterreal").Range("B" & nummer1) = "Schneeregen"
    88. If Worksheets("wetter").Cells(nummer2, j) = "Dust" Then Worksheets("wetterreal").Range("B" & nummer1) = "Nebel"
    89. If Worksheets("wetter").Cells(nummer2, j) = "Foggy" Then Worksheets("wetterreal").Range("B" & nummer1) = "Leichter Nebel"
    90. If Worksheets("wetter").Cells(nummer2, j) = "Haze" Then Worksheets("wetterreal").Range("B" & nummer1) = "Dunst"
    91. If Worksheets("wetter").Cells(nummer2, j) = "Smoky" Then Worksheets("wetterreal").Range("B" & nummer1) = "Rauchig"
    92. If Worksheets("wetter").Cells(nummer2, j) = "Blustery" Then Worksheets("wetterreal").Range("B" & nummer1) = "Stürmisch"
    93. If Worksheets("wetter").Cells(nummer2, j) = "Windy" Then Worksheets("wetterreal").Range("B" & nummer1) = "Windig"
    94. If Worksheets("wetter").Cells(nummer2, j) = "Cold" Then Worksheets("wetterreal").Range("B" & nummer1) = "Kalt"
    95. If Worksheets("wetter").Cells(nummer2, j) = "Cloudy" Then Worksheets("wetterreal").Range("B" & nummer1) = "Wolkig"
    96. If Worksheets("wetter").Cells(nummer2, j) = "Mostly Cloudy" Then Worksheets("wetterreal").Range("B" & nummer1) = "Meist bewölkt"
    97. If Worksheets("wetter").Cells(nummer2, j) = "Partly Cloudy" Then Worksheets("wetterreal").Range("B" & nummer1) = "Teils bewölkt"
    98. If Worksheets("wetter").Cells(nummer2, j) = "Clear" Then Worksheets("wetterreal").Range("B" & nummer1) = "Klarer Himmel"
    99. If Worksheets("wetter").Cells(nummer2, j) = "Sunny" Then Worksheets("wetterreal").Range("B" & nummer1) = "Sonnig"
    100. If Worksheets("wetter").Cells(nummer2, j) = "Fair" Then Worksheets("wetterreal").Range("B" & nummer1) = "Schönes Wetter"
    101. If Worksheets("wetter").Cells(nummer2, j) = "Rain And Hail" Then Worksheets("wetterreal").Range("B" & nummer1) = "Regen und Hagel"
    102. If Worksheets("wetter").Cells(nummer2, j) = "Hot" Then Worksheets("wetterreal").Range("B" & nummer1) = "Heiß"
    103. If Worksheets("wetter").Cells(nummer2, j) = "Isolated Thunderstorms" Then Worksheets("wetterreal").Range("B" & nummer1) = "Vereinzelte Gewitter"
    104. If Worksheets("wetter").Cells(nummer2, j) = "Scattered Thunderstorms" Then Worksheets("wetterreal").Range("B" & nummer1) = "Vereinzelte Gewitter"
    105. If Worksheets("wetter").Cells(nummer2, j) = "Heavy Snow" Then Worksheets("wetterreal").Range("B" & nummer1) = "Heftiger Schneefall"
    106. If Worksheets("wetter").Cells(nummer2, j) = "Scattered Snow Showers" Then Worksheets("wetterreal").Range("B" & nummer1) = "Vereinzelte Schneeschauer"
    107. If Worksheets("wetter").Cells(nummer2, j) = "Scattered Showers" Then Worksheets("wetterreal").Range("B" & nummer1) = "Vereinzelte Schauer"
    108. If Worksheets("wetter").Cells(nummer2, j) = "Thundershowers" Then Worksheets("wetterreal").Range("B" & nummer1) = "Gewitterregen"
    109. If Worksheets("wetter").Cells(nummer2, j) = "Snow Showers" Then Worksheets("wetterreal").Range("B" & nummer1) = "Schneeschauer"
    110. If Worksheets("wetter").Cells(nummer2, j) = "Not Available" Then Worksheets("wetterreal").Range("B" & nummer1) = "Nicht Verfügbar"
    111. If Worksheets("wetter").Cells(nummer2, j) = "Mostly Sunny" Then Worksheets("wetterreal").Range("B" & nummer1) = "Meistens Sonnig"
    112. If Worksheets("wetter").Cells(nummer2, j) = "Rain" Then Worksheets("wetterreal").Range("B" & nummer1) = "Regen"
    113. nummer1 = nummer1 + 1
    114. weiter:
    115. datum77 = ""
    116. nummer5 = ""
    117. nummer2 = nummer2 + 1
    118. Loop
    119. wetterauswahl = "yahoo.com"
    120. End If
    121. zuende:
    122. End Sub


    Danke

    Gruss

    Blaupunkt79 schrieb:

    strUrl = "https://query.yahooapis.com/v1/public/yql?q=select * from weather.forecast where woeid in (select woeid from geo.places(1) where text%3D%22" & stadt & "%2C de%22) and u %3D %22C%22&format=xml"
    returnValue = URLDownloadToFile(0, strUrl, strSavePath, 0, 0)
    ActiveWorkbook.XmlImport strUrl, ImportMap:= Nothing, Overwrite:=True, Destination:=Worksheets("Wetter").Range("$A$1")

    WTF!
    Wozu lädst du die Datei runter, wenn du dann doch die URL vom Web öffnest?
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Ja das ergibt keinen Sinn, sollte wohl eher "strsavepath" heißen. :)

    Da es aber so funktioniert, lag es anscheinend doch nur am "http" anstatt "https", wird vielleicht auch nur wegen Firmennetzwerk geblockt, keine Ahnung. Hauptsache, es geht nun.

    Jetzt ist das nächste "Projekt" im Programm, Listview, da ja die 64-Bit Office Version keine Unterstützung anbietet ...