Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Excel Daten an website übergeben

Excel Daten an website übergeben
21.12.2018 08:04:33
Rasenack
Hallo liebe Community,
ich habe folgendes Problem. Ich kümmere mich um die Essenbestellung in meiner Firma. Dazu habe ich mir schon diverse Makros erstellt, um mir das Leben schon etwas zu vereinfachen, allerdings werden es immer mehr die mitbestellen. Hinzu kommen immer mehr Abbestellungen wegen Krankheit etc. Jetzt habe ich mir noch zusätzlich ein Makro erstellt, welches mir die Essen nach der jeweiligen Farbe aufsummiert und in eine Tabelle schreibt. Genauso müssen nämlich die Daten bei dem Essenlieferanten (https://www.laola-zentralkueche.de/web/menu) eingegeben werden.
Nun wäre es mir eine große Hilfe, wenn ein Makro diese Daten automatisch in die jeweilige Tabelle des Lieferanten lädt bzw. im ersten Schritt die Seite aufruft und mich einloggt. Ich habe schon in etlichen Foren nach einer Lösung gesucht, aber alle Codes die ich ausprobierte scheiterten. Ich habe leider keine HTML Kenntnisse, um den jeweiligen Code auf meine Website anzupassen. Ich wäre sehr dankbar, wenn ich jemand bei meinem Vorhaben unterstützen würde.
Hier der Code, um mich bei der Seite einzuloggen:

Option Explicit
Sub Tabelle_Laola_fuellen()
Dim IEApp As Object
Set IEApp = CreateObject("InternetExplorer.Application")
IEApp.Visible = True
IEApp.navigate "https://www.laola-zentralkueche.de/web/menu"
Do: Loop Until IEApp.Busy = False
Do: Loop Until IEApp.Busy = False
With IEApp.document
Do: Loop Until .readyState = "complete"
.getElementById("txtLogin").Value = "********"
.getElementById("txtPassword").Value = "********"
.getElementById("frmLogin:_id21").Click
End With
End Sub

Leider erhalte ich auch eine Fehlermeldung 424 "Ojekt erforderlich" in der Zeile wo
.getElementbyId..... beginnt.
Der interessante Teil des Quellcode der Website kann irgndwie nicht hochgeladen werden, da  _
sonst der Code verschwindet und alles so angezeigt wird, wie es auf der Website aussieht.
Vielen Dank im Voraus.
PS: Die Tabelle beim Lieferanten wird erst nach dem Login sichtbar


		
Anzeige

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Excel Daten an website übergeben
21.12.2018 10:54:50
Zwenn
Hallo Rasenack,
das Auslesen oder Einfügen von Daten auf eine Webseite ist immer individuell, da man die Seite dafür über ihre Struktur ansprechen muss. Die ist natürlich für jede Seite anders. Folgendes Makro loggt Dich auf Deine Seite ein. Da Du danach allerdings noch andere Dinge anstellen willst, wird es schwer Hilfe zu bekommen, wenn Du nicht wenigstens den HTML-Code der dann zu bearbeitenden Seite zur Verfügung stellst.
Ich habe Dir den Login jetzt erstellt, weil es (für mich) schnell ging. Vielleicht kann Dir über die Weihnachtstage jemand anders bei der weiteren Herausforderung helfen. Ich bin ab Morgen unterwegs.

Option Explicit
Sub Tabelle_Laola_fuellen()
Dim browser As Object
Dim knotenStamm As Object
'Internet Explorer initialisieren, Sichtbarkeit festlegen,
'URL übergeben und warten bis URL ganz geladen wurde
Set browser = CreateObject("InternetExplorer.Application")
browser.Visible = True
browser.navigate "https://www.laola-zentralkueche.de/web/menu"
Do Until browser.ReadyState = 4: DoEvents: Loop
'HTML-Ausschnitt aus DOM holen, in dem die Login Eingabefelder liegen
Set knotenStamm = browser.document.getElementById("login1")
'Mit dem HTML-Ausschnitt weiterarbeiten, indem die richtigen HTML-Tag
'Namen angesprochen werden, um Benutzername und Passwort einzutragen
knotenStamm.getElementsByTagName("input")(0).Value = "BENUTZERNAME"
knotenStamm.getElementsByTagName("input")(1).Value = "PASSWORT"
'Die eingetragenen Daten über den Login-Button absenden
knotenStamm.getElementsByTagName("input")(4).Click
End Sub
Viele Grüße,
Zwenn
Anzeige
Weitere Infos
21.12.2018 11:24:31
Zwenn
Hallo noch einmal
Du hast zwar geschrieben, Du hast keinerlei Kenntnisse in HTML, was mich annehmen lässt, Du brauchst auf jeden Fall praktische Unterstützung bei der Umsetzung Deines Vorhabens. Deshalb hatte ich in meinem vorherigen Post gar keine weitere Erklärung gegeben, was das kleine Login-Makro eigentlich macht.
HTML ist kein Buch mit sieben Siegeln denke ich. Es ist recht schnell überschaubar, wie so ein Dokument aufgebaut ist. Dazu muss man auch nicht wissen, was die einzelnen HTML-Tags eigentlich machen. Klar gehören noch ein paar andere Sachen dazu, wie CSS (Cascading Style Sheets). Aber auch da reicht es, wenn Du verstanden hast, dass diese CSS-Klassen einzelnen Tags zugeordnet sein können. Sofern das so ist, kannst Du auch über diese Namen auf die Seitenstruktur zugreifen.
Unter folgendem Link habe ich mal an einem praktischen Beispiel erklärt, was verschiedene Befehle machen, mit denen man auf das sogenannte DOM (Document Object Model) einer HTML-Seite zugreifen kann:
https://www.herber.de/cgi-bin/callthread.pl?index=1560197#1560268
Vielleicht hast Du ja den Elan und die Lust, Dich in die Materie einzuarbeiten. Dazu empfehle ich erstmal das Ziel zu verfolgen, einen bestimmten Wert aus einer HTML-Seite auszulesen und diesen in Excel anzeigen zu lassen. Das kann ja einfach in einer Message Box passieren, die Dir dann als Erfolgsmeldung dient. Nimm dazu eine Internetseite, die Du hier verlinken kannst, um Hilfe zu bekommen, wenn Du nicht weiterkommst. Noch ein Tipp ... nimm nicht Google ;-) Google sperrt den automatischen Zugriff nach wenigen Seitenaufrufen in kurzer Zeit.
Viel Spaß und viel Erfolg dabei,
Zwenn
Anzeige
AW: Weitere Infos
21.12.2018 12:30:17
Rasenack
Hallo Zwenn, hab vielen Dank für die schnelle Hilfe. Es funktioniert einwandfrei :-)
Ich würde ja, im eingeloggten Zustand den Quellcode als Screenshot hochladen wollen, um zu erfahren wo die einzelnen Elemente der Tabelle in dem HTML Dokument zu finden sind und sie dann so z.B anzusprechen:
.getElementsById("...").Value = Range("Tabelle1!F1").Value (bin mir bei der Syntax nicht sicher)
Leider kann ich im eingeloggten Zustand den Quellcode nicht anzeigen lassen.
Den Link von dir verfolge ich die Tage auf jeden Fall mal, da ich schon etwas Interesse an der Geschichte habe.
Liebe Grüße
André
Anzeige
AW: Weitere Infos
21.12.2018 13:42:51
Rasenack
Hab es doch hinbekommen mit Microsoft Edge. Also hier ist ein Auszug aus dem eingeloggten Zustand. Das betrifft jetzt als Beispiel den morgigen Samstag. Von den verfügbaren Menüs werden hier zwei dargestellt. Diese wären "ZusatzB" und "ZusatzC". Vielleicht kannst du mir ja doch noch helfen dabei. Ich wäre sehr dankbar.
Userbild
Anzeige
AW: Weitere Infos
21.12.2018 13:50:06
Zwenn
Hallo Rasenack,
ein Screenshot von "was auch immer" ist hier in den meisten Fällen nicht sinnvoll und deshalb nicht gern gesehen bzw. führt dazu, dass Dein Hilfegesuch ignoriert wird. Dabei ist es egal, ob Tabellen oder Quellcode (Ausschnitte) als Bild hochgeladen werden. Z.B. baut niemand eine Tabelle nach, die vor allem offensichtlich schon als Datei existiert.
In Deinem Fall willst Du auf eine HTML-Seite zugreifen. Da nutzt der Ausschnitt des Quellcodes als Grafik absolut gar nix. Man benötigt erstens den gesamten Seiten-Quellcode und der bringt zweitens nur etwas, wenn man darin suchen kann. Man liest sich doch nicht alles durch und schreibt dann noch ggf. komplizierte Namen für CSS-Klassen, IDs oder irgendwelche Attribute ab. Sowas kopiere ich IMMER. Schon allein um die Fehlerquelle des Vertippens auszuschließen.
Den Quelltext einer Internetseite kann man sich immer anzeigen lassen, außer der Seitenbetrteiber unerbindet das durch JavaScript. Auch dann gibts Methoden, aber das wird in der Regel nicht gemacht, weil es sinnfrei ist. Wenn Du eine Seite aufrufst, einfach ein Rechtsklick mit der Maus auf eine freie Stelle der Seite und "Seitenquelltext anzeigen" anklicken. Ich verwende Firefox, mag sein, dass der Befehl in anderen Browsern anders lautet. Aber es gibt ihn immer.
Den angezeigten Quelltext markierst du vollständig mit der Tastenkombination Strg + a Dann kopierst Du den markierten Text mit Strg + c und fügst ihn in ein einfaches Textdokument ein. NICHT in Word, sondern in ein einfaches .txt Dokument. Das speicherst Du auch mit der Endung .txt und kannst das dann hier hochladen. (Beachte die Regeln, die hier zum Hochladen einer Datei gelten. Die stehen auf der Seite, wo Du eine Datei zum Hochladen auswählst. Nach dem Hochladen kopiere den angezeigten Link, den Du dann in Dein Posting hier einfügst.)
Sofern die so zur Verfügung gestellte Seite nicht viel mit JavaScript arbeitet, sollte man Dir damit helfen können. Zu der so erzeugten .txt lädst Du am Besten eine Excel-Beispielmappe hoch. Darin sollte eine typische Bestellvorlage zu sehen sein, wie Du sie auf die Seite hochgeladen haben willst. Ausserdem Erklärungen, was wo hin soll, usw.
Die von Dir angegebene Codezeile sollte vom Prinzip her funktionieren. Beachte jedoch die Schreibweise der Befehle. getElementByID() hat kein s am Ende von Element. Den Zugriff auf den Inhalt einer bestimmten Zelle würde ich persönlich so schreiben (ist aber Geschmackssache):

...getElementById("...").Value = Sheets("Tabelle1").Cells(1,6).Value

Kurz zur Erklärung der Get-Befehle:
getElementByID() hat kein s hinter Element, weil damit direkt ein ganz bestimmtes Element der aufgerufenen Seite angesprochen wird. Nämlich über seine ID, die vom Entwickler der Seite frei vergeben werden kann, aber auf der aufgerufenen Seite nur ein einziges Mal vorkommen darf (laut HTML Standard).
Bei getElementsByClassName() und getElementsByTagName() hingegen kann es zwar sein, dass es nur ein solches Element im Quelltext des grade bearbeiteten Ausschnitts der angezeigten Seite gibt, aber generell ist die Verwendung mehrmals zugelassen. Also werden alle Elemente, die es mit den entsprechenden Namen gibt in der Reihenfolge ihres Auftretens in einem Array eingesammelt. So ein Array ist immer Null-basiert. Auf ein bestimmtes Element aus dem Array greift man über seinen Index zu.
In dem kleinen Login-Makro für Dich siehst Du dieses Prinzip anhand der Zeilen, die auf die entsprechenden Input-Tags zugreifen. Im bearbeiteten HTML-Abschnitt, der zuvor über seine ID ausgelesen wurde, wird auf das erste, zweite und fünfte HTML-Tag mit dem Namen input zugegriffen. Einfach über die in Klammern nachgestellten Indizes des Input-Tag-Arrays

knotenStamm.getElementsByTagName("input")(0).Value = "BENUTZERNAME"
knotenStamm.getElementsByTagName("input")(1).Value = "PASSWORT"
knotenStamm.getElementsByTagName("input")(4).Click

Zu den Get-Befehlen gehört auch noch getAttribute(). Damit kann man auf sonstige Attribute zugreifen, deren Namen von den Seitenentwicklern frei vergeben werden können. Allerdings wird auch hier, wie beim Zugriff auf die ID, kein Array gebildet, sondern der Befehl arbeitet ausschließlich mit einem bereits ausgewählten HTML-Befehl.
Hat man also über sonstige Wege, meistens die Get-Befehle, ein bestimmtes HTML-Element isoliert, kann man in diesem ein Attribut auslesen. Ein Array von Elementen geht man dafür z.B. mit einer For-Each Schleife durch, um jedes einzelne Element darauf zu prüfen, ob ein bestimmtes Attribut enthalten ist, auf das man dann reagieren kann.
Das führe ich an dieser Stelle aber nicht weiter aus. Beschäftige Dich zunächst mal mit den anderen Get-Befehlen. Wenn Du einen Wert auslesen willst, kannst Du den Text, den Du auch so auf der Seite in der normalen Browser-Ansicht lesen kannst, mit .innertext bekommen.
Viele Grüße,
Zwenn
Anzeige
Die Textdatei
21.12.2018 14:16:28
Rasenack
Hallo Zwenn, danke für deine Hinweise. Du erklärst das wirklich sehr gut. Ich habe jetzt hier die Textdatei des gesamten Quellcodes. Die relevanten Daten, wie Passwort etc. wurden mit * ersetzt. Die Exceldatei lade ich ebenfalls mal hoch. Dabei ist die untere kleine Tabelle von Interesse.
Viele Grüße André
https://www.herber.de/bbs/user/126261.txt
https://www.herber.de/bbs/user/126263.xlsm
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Excel Daten an Webseite übergeben


Schritt-für-Schritt-Anleitung

  1. Öffne Excel und aktiviere die Entwicklertools:

    • Gehe zu Datei > Optionen > Menüband anpassen und aktiviere die Entwicklertools.
  2. Erstelle ein neues Makro:

    • Klicke auf Entwicklertools > Visual Basic.
    • Wähle Einfügen > Modul, um ein neues Modul zu erstellen.
  3. Füge den VBA-Code ein:

    • Verwende den folgenden Code, um dich bei der Webseite anzumelden und die Daten abzurufen:
      Option Explicit
      Sub Tabelle_Laola_fuellen()
      Dim IEApp As Object
      Set IEApp = CreateObject("InternetExplorer.Application")
      IEApp.Visible = True
      IEApp.navigate "https://www.laola-zentralkueche.de/web/menu"
      Do Until IEApp.Busy = False: DoEvents: Loop
      With IEApp.document
         Do Until .readyState = "complete": DoEvents: Loop
         .getElementById("txtLogin").Value = "BENUTZERNAME"
         .getElementById("txtPassword").Value = "PASSWORT"
         .getElementById("frmLogin:_id21").Click
      End With
      End Sub
  4. Führe das Makro aus:

    • Klicke auf Entwicklertools > Makros, wähle dein Makro aus und klicke auf Ausführen.
  5. Daten von der Webseite auslesen:

    • Nachdem du dich erfolgreich eingeloggt hast, kannst du die Daten von der Webseite auslesen und in deine Excel-Tabelle einfügen.

Häufige Fehler und Lösungen

  • Fehler 424: Objekt erforderlich:

    • Dieser Fehler tritt auf, wenn das Element nicht gefunden wird. Stelle sicher, dass die IDs in deinem Code mit den IDs der Webseite übereinstimmen. Überprüfe den Quellcode der Webseite, um die korrekten IDs zu finden.
  • Excel-Daten aus dem Web funktioniert nicht:

    • Vergewissere dich, dass die Webseite, die du ansteuern möchtest, nicht durch JavaScript geschützt ist. In diesem Fall könnten andere Methoden erforderlich sein.

Alternative Methoden

  • Daten aus Webseite auslesen Excel:

    • Anstatt ein Makro zu verwenden, könntest du auch Power Query in Excel nutzen, um Daten von einer Webseite zu importieren. Gehe zu Daten > Daten abrufen > Aus anderen Quellen > Aus dem Web.
  • Excel in Webseite einbetten:

    • Du kannst Excel-Dateien auch als öffentliche Links auf Webseiten einbinden, indem du die Datei in OneDrive speicherst und den Embed-Code verwendest.

Praktische Beispiele

  1. Essenbestellung bei Laola Zentralküche:

    • Verwende das obige Makro, um dich einzuloggen und die Bestellungen automatisch in die Excel-Tabelle einzufügen.
  2. Daten von anderen Webseiten:

    • Du kannst ähnliche Makros erstellen, um Daten von anderen Webseiten zu importieren. Achte darauf, die spezifische Struktur der Zielwebseite zu berücksichtigen.

Tipps für Profis

  • HTML in Excel anzeigen:

    • Du kannst HTML-Inhalte in Excel anzeigen, indem du eine Webabfrage erstellst. Das kann besonders nützlich sein, wenn du eine Webseite innerhalb von Excel anzeigen möchtest.
  • Farbe aus Webseite auslesen:

    • Wenn du Farben von Elementen auf einer Webseite auslesen möchtest, kannst du dies mithilfe von CSS-Klassen und JavaScript tun.

FAQ: Häufige Fragen

1. Wie kann ich Daten von einer Webseite in Excel importieren? Um Daten von einer Webseite in Excel zu importieren, kannst du entweder VBA verwenden oder Power Query nutzen, um die Daten abzurufen.

2. Was kann ich tun, wenn der VBA-Code nicht funktioniert? Überprüfe die IDs und Klassen im Quellcode der Webseite. Stelle sicher, dass du die richtigen Elemente ansteuerst und dass die Webseite keine JavaScript-Restriktionen hat.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige