Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1644to1648
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Tabelle aus dem Web
21.09.2018 12:20:07
Fred
Hallo Excelperten,
ich kopiere regelmäßig viele Fußball-Ergebnisse von der Website „soccerstats.com“ um diese in Excel einzufügen.
Meine Frage;
Gibt es eine Excel-Lösung, die den Vorgang automatisiert?
Daten / externe Daten abrufen / aus dem Web
+
Daten / neue Abfrage / aus anderen Quellen / aus dem Web
funktionieren leider nicht.
Kann mir evt. jemand bei der Lösung (falls es eine gibt) helfen, wenn ich z.B. die Ergebnisse von der Seite „https://www.soccerstats.com/results.asp?league=germany3“ in Excel einfügen möchte?
mit freundlichen Gruß
Fred Neumann

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Tabelle aus dem Web
21.09.2018 13:13:18
Bernd
Hallo Fred
schau mal hier ... https://www.herber.de/forum/messages/1646625.html
Dort wurde ähnliches Thema behandelt, es geht um Microsofts Power Query, das ab Excel Version 2007 benutzt werden kann.
Damit kannst du die normale Webabfrage in Excel ignorieren (PQ ist viel komfortabler um Webseiten zu importieren)
Gruß
Bernd
Tabelle aus dem Web
21.09.2018 14:17:41
Fred
Hallo Bernd,
ich habe Excel 2016, daher auch "abrufen und transformieren",
es funzt aber nicht, das ich ausgerechnet die Ergebnisse der Seite „https://www.soccerstats.com/results.asp?league=germany3“ erreiche.
Gruß Fred
Anzeige
AW: Tabelle aus dem Web
21.09.2018 14:24:39
Torsten
Ja das funzt nicht. Man bekommt nur die Punktetabelle. Liegt vermutlich an der Website.
Wenn man auf Web View geht bekommt man die Meldung "this page uses Internet Explorer's Compatibility Mode".
AW: Tabelle aus dem Web
21.09.2018 15:28:24
Zwenn
Hallo,
da der Weg über Power Query nicht zu funktionieren scheint, kann man die Begegnungen über das DOM auslesen. Der benötigte HTML Teil liegt in einem iFrame. Da kommt man aber ran und kann dann die Tabelle abarbeiten. Alle Tabellenzellen mit der CSS-Klasse odd sind relevant.
Habe ich im Moment aber leider keine Zeit zu. Die Freundin will in den Baumarkt, Farbe kaufen und so komische Sachen aus der realen Welt ;-)
Aber wie gesagt, die Daten zu holen sollte nicht so schwer sein.
Viele Grüße,
Zwenn
Anzeige
AW: Tabelle aus dem Web
21.09.2018 18:09:43
Fred
Hallo Zwenn,
könntest Du evt. am Wochenende wenn Du Lust und Zeit hast entsprechenden Lösungsweg mir schreiben. Habe von dem noch weniger Ahnung als von Baumarkt.
Gruß
Fred
AW: Tabelle aus dem Web
22.09.2018 01:56:30
Zwenn
Hallo Fred,
da die Sache mit den Besorgungen aus dem Baumarkt mit dem Wochenende kollidiert, ziehe ich Deine Tabelle mal vor ;-)
Ohne große Erklärungen ... Den folgenden Code einfach in ein Modul kopieren. Die Begegnungen werden inklusive Kopfzeile in die Tabelle geschrieben, aus der Du das Makro startetst. Die Mannschaften und das Endergebnis habe ich jeweils auf 2 Spalten aufgeteilt. Weiß ja nicht, was Du mit den Werten anfangen willst. Das Datum in der ersten Spalte ist keins. Kann man aber bei Bedarf vom jetzigen englischen Format in ein deutsches umwandeln. Hatte ich jetzt nur keine Lust mehr zu. Es werden auch die Begegnungen der Zukunft ausgelesen, für die noch keine Ergebnisse vorliegen.

Option Explicit
Sub FussballErgebnisseHolen()
Dim browser As Object
Dim url As String
Dim knotenStamm As Object
Dim knotenAst As Object
Dim knotenZweig As Object
Dim knotenBlatt As Object
Dim zeile As Long
Dim spalte As Byte
Dim index As Byte
Dim splitArray() As String
'Variablen initialisieren
zeile = 2
spalte = 1
url = "https://www.soccerstats.com/results.asp?league=germany3"
'Kopfzeile schreiben
Cells(1, 1).Value = "Datum"
Cells(1, 2).Value = "Uhrzeit"
Cells(1, 3).Value = "Heimmannschaft"
Cells(1, 4).Value = "Gastmannschaft"
Cells(1, 5).Value = "Heim"
Cells(1, 6).Value = "Gast"
Cells(1, 7).Value = "Halbzeit"
Range("A1:G1").Font.Bold = True
Range("A1:G1").HorizontalAlignment = xlCenter
Columns("B:B").HorizontalAlignment = xlCenter
Columns("E:G").HorizontalAlignment = xlCenter
ActiveWindow.SplitColumn = 0
ActiveWindow.SplitRow = 1
ActiveWindow.FreezePanes = True
'Internet Explorer initialisieren, Sichtbarkeit festlegen,
'Seite aufrufen und warten, bis sie ganz geladen wurde
Set browser = CreateObject("internetexplorer.application")
browser.Visible = False
browser.navigate url
Do Until browser.readyState = 4: DoEvents: Loop
'Quelltext aus dem Body des richtigen iFrames
'holen, in dem die Ergebnisse aufgelistet sind
Set knotenStamm = browser.document.getElementByID("pmatch") _
.contentDocument.getElementsByTagName("body")(0)
If Not knotenStamm Is Nothing Then
'Relevante Tabellenzeilen einsammeln
Set knotenAst = knotenStamm.getElementsByClassName("odd")
If Not knotenAst Is Nothing Then
For Each knotenZweig In knotenAst
'Tabellenzellen der aktuellen Begegnung einsammeln
Set knotenBlatt = knotenZweig.getElementsByTagName("td")
If Not knotenBlatt Is Nothing Then
'Zellen einer Begegnung in die Excel Tabelle schreiben
'Dafür jeden Index durchgehen, weil Begegnungen, die
'noch nicht stattgefunden haben weniger Zellen haben
For index = 0 To Len(knotenBlatt)
'Datum (hier nicht auf Deutsch umgearbeitet und
'deshalb kein echtes Excel-Datum)
If index = 0 Then
Cells(zeile, spalte).Value = knotenBlatt(index).innertext
End If
'Uhrzeit
If index = 1 Then
Cells(zeile, spalte).Value = knotenBlatt(index).innertext
'1 h abziehen. Keine Ahnung warum die Uhrzeit um 1 h mehr
'ausgelesen wird. Vielleicht weil es eine britische Seite
'ist und Excel sich für schlau hält. So werden die Zeiten
'jedenfalls angezeigt, wie in der Tabelle
Cells(zeile, spalte).Value = Cells(zeile, spalte).Value _
- 4.16666666666667E-02
End If
'Heim- und Gast-Mannschaft
If index = 2 Then
'Mannschaften separieren
splitArray = Split(knotenBlatt(index).innertext, "-")
Cells(zeile, spalte).Value = Trim(splitArray(0))
spalte = spalte + 1
Cells(zeile, spalte).Value = Trim(splitArray(1))
End If
If index = 3 Then
'Ergebnis separieren
splitArray = Split(knotenBlatt(index).innertext, "-")
If IsNumeric(Trim(splitArray(0))) Then
Cells(zeile, spalte).Value = Trim(splitArray(0)) * 1
End If
spalte = spalte + 1
If UBound(splitArray) > 0 Then
If IsNumeric(Trim(splitArray(1))) Then
Cells(zeile, spalte).Value = Trim(splitArray(1)) * 1
End If
End If
End If
'Halbzeitstand
On Error Resume Next
If index = 4 Then
Cells(zeile, spalte).Value = knotenBlatt(index).innertext
End If
On Error GoTo 0
spalte = spalte + 1
Next index
spalte = 1
zeile = zeile + 1
End If
Next knotenZweig
End If
End If
'Spalten auf die richtige Breite setzen
Columns("A:G").EntireColumn.AutoFit
'Aufräumen
browser.Quit
Set browser = Nothing
Set knotenStamm = Nothing
Set knotenAst = Nothing
Set knotenZweig = Nothing
Set knotenBlatt = Nothing
End Sub
Viele Grüße,
Zwenn
Anzeige
Zwei Dinge noch
22.09.2018 10:27:24
Zwenn
Hallo Fred,
habe mir das jetzt nochmal angesehen, bevor es mit dem Renovieren weiter geht, da mir das mit der Stunde sehr merkwürdig vorkam. Tja, keine Ahnung, ob ich gestern Nacht Halluzinationen hatte. Jedenfalls kannst Du die Zeile auskommentieren, in der die Stunde abgezogen wird. Es werden doch die richtigen Zeiten geholt.
Das zweite ist, bevor Du das Makro das erste Mal laufen lässt, musst Du die Seite unbedingt einmal manuell im IE öffnen und die beiden monströsen Coockie Meldungen wegklicken. Mindestens die erste legt sich über die ganze Seite und damit kann das Makro nix anfangen.
Viele Grüße,
Zwenn
Anzeige
Bombe, Zwenn
23.09.2018 14:06:59
Fred
Hallo Zwenn,
ganz große Klasse wie du mir diesn Code geschrieben hast. Deine Kommentare im Verlauf des Makros sind sehr hilfreich. Der Code läßt sich auf viele andere Ergebnis-Seiten dieser Homepage anwenden. Die Schreibweise des Datums war hier im Forum auch schon Thema, ich wandel in meinem Tabellenblatt den Text zB. wie folgt um;
=DATUM(2018;SUCHEN(RECHTS(A2;3);"jan feb mar apr may jun jul aug sep oct nov dec ")/3;--TEIL(A2;5;2)) 
Das Hz-Ergebnis wandel ich ebenfalls in meinem Tabellenblat um;
zB.
Halbzeittore:
=GANZZAHL(LINKS(TEIL($G1;FINDEN("-";$G1;1)-1;LÄNGE($G1));1))

Halbzeitgegentore
=GANZZAHL(LINKS(TEIL($G1;FINDEN("-";$G1;1)+1;LÄNGE($G1));1))
Nochmalss vielen Dank für deine kompetente Unterstützung !!!
mit freundlichen Gruß
Fred
Anzeige
AW: Bombe, Zwenn
24.09.2018 11:10:38
Zwenn
Hallo Fred,
auch wenn ich davon ausgehe, dass die Formel für das Halbzeitergenis der Gastmannschaft eine Rechts()-Formel ist ;-) freue ich mich, dass Du nun auf Anhieb hast, was Du brauchst. Dass man auch andere Ligen auslesen kann habe ich auch festgestellt. Fand ich auch ganz praktisch, wußte nur nicht, ob Du das überhaupt benötigst. Deshalb hatte ich es nicht erwähnt.
Viele Grüße,
Zwenn

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige