Clever-Excel-Forum

Normale Version: csv Artikel im Internet mit Lieferzeiten abgleichen
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2
Hallo & Moin moin zusammen,

bin nicht sicher, ob ich hier im richtigen Bereich / Forum bin.

Versuche es einmal und danke an dieser Stelle bereits fürs Lesen.

Ich betreibe nebenberuflich einen kleinen Onlineshop und würde gerne vom Hersteller FOX Exhaust Systems (Auspuffanlagen) die Artikel in meinem Shop listen.
Der Hersteller ist leider was die Datenbereitstellung der Artikel angeht,... leicht unfähig oder unwillig/lustlos.

Ich habe ca. 6000 Artikel in einer csv-Liste. Habe bereits alles an wichtigen Daten mir zusammengesucht, das einzige was fehlt ist die +/- Lieferzeit vom Hersteller.
Diese ist bei den Produkten (da Einzelfertigung) stark abweichend. Vom Lagerartikel (lieferbar in 1-2 Tagen) bis hin zur Sonderanfertigung (10-14 Wochen) ist alles dabei.
Diese verändert sich nicht groß, laut seiner Aussage kann er die Daten aber nicht bereitstellen.

Meine Idee war nun:
Kann man (wenn ja wie) die csv. Artikel per Programm / VBA oder anderem Tool mit der Herstellersuche abgleichen und einen gewissen Text ab dem "Zauberwort" Lieferzeit in eine andere Spalte tragen lassen?
Ist der Gedanke Science-Fiktion oder realisierbar?

Falls nicht hierüber abzuwickeln - gerne auch per PN.
Falls Traumvorstellung, mich bitte aufwecken dann schmeiß ich den Lieferanten raus.

VG und guten Start ins WE
Hallo,

n.M.E. ist die entcheidende Frage, wie die Artikelnummer an die Webseite übergeben wird:

- Get
- Post

Das Suchen des "Zauberwortes" Lieferzeit sollte dagegen eher einfach sein.

mfg

PS: vermutlich ist es zu zeitaufwändig so ein Projekt nebenbei durchzuführen, also gibt es eher "ein paar 'schlaue' Kommentare" als einen fertigen Code
Hallo Fennek,

dachte mir schon, dass es nicht so einfach ist.
Ob "Get" oder "Post"...  Huh 
(bei den Begriffen bin ich leider schon raus)

Anderer "Ansatzpunkt" / Gedanke von mir:
Ich habe ALLE URL's der Artikel (ebenfalls in der csv).

Beispiellink in der Datein anbei.

Ist es damit möglich?
Dann müsste das "Programm" ja "nur" noch die URL im Hintergrund aufrufen und nach besagtem "Zauberwort" suchen und Lieferzeit einfügen.

Ich weiß, von Laien so schön einfach beschrieben  19

Aber evtl. damit möglich?

VG
Hallo DTM und Fen

Die direkte URL hätte es mir einfacher gemacht Wink Aber egal. Man kann mit xhr auch direkt über die Suche gehen und die URL entsprechend aufbauen. Dann kann man nämlich die Artikelnummer direkt verwenden.

Das ist mein kleines TestScript, in dem die Test ArtikelNummern noch hart codiert sind:
Code:
Sub Lieferzeiten()

Const artNrCol As Long = 1
Const deliverTimeCol As Long = 2
Const urlBase As String = "https://www.fox-sportauspuff.de/store-search-result.php?keywords="

Dim doc As Object
Dim currRow As Long
Dim urlArtNr As String

  Set doc = CreateObject("htmlFile")
  currRow = 2
  urlArtNr = "FOX-16-XXXL"
  'urlArtNr = "AU013000-VSD"
 
  With CreateObject("msxml2.xmlhttp.6.0")
    .Open "GET", urlBase & urlArtNr, False
    .send
    If .Status = 200 Then
'Close
'Open "E:\check.txt" For Output As #1
'Print #1, .responseText
'Close

      doc.body.innerHTML = .responseText
      Cells(currRow, deliverTimeCol) = doc.getElementByID("picto_qty_1").innerText
      currRow = currRow + 1
    Else
      MsgBox "Page not loaded: HTTP Status " & .Status
    End If
  End With
End Sub


Viele Grüße,

Zwenn
Hi Zwenn,

wow - danke für die Mühe.

Wie ich ein Modul hinzufüge (ALT+F11 --> neues Modul) habe ich neulich schon kurz gesagt bekommen.
Was muss ich denn noch anpassen zum ersten Test bzw. was bedeutet für mich "hart codiert"?

Rufe ich das Modul dann nicht über Formeleingabe in einer Zelle ab?
Also "=Lieferzeit"?

Das hier muss ich vorab ändern oder?
'Open "E:\check.txt" For Output As #1
Also erst die Artikelnummern in eine .txt speichern und dann das Modul laufen lassen?

Ist keine Veräppelung, ich weiß damit leider echt nichts anzufangen/umzugehen.

Danke :)
(22.05.2021, 17:17)DTM_ schrieb: [ -> ]Wie ich ein Modul hinzufüge (ALT+F11 --> neues Modul) habe ich neulich schon kurz gesagt bekommen.
Was muss ich denn noch anpassen zum ersten Test bzw. was bedeutet für mich "hart codiert"?

Modul hinzufügen genau so. Denke dann daran, die Datei mit der Dateiendung .xlsm zu speichern. In .xlsx Dateien können keine Makros gespeichert werden. Ich schreibe mal etwas zu den Dingen, die angepasst werden müssen. Aber am Besten ist es, Du lädst einen Ausschnitt Deiner CSV hoch. Die wird in Ermangelung selbiger nämlich bisher gar nicht berücksichtigt.

Hart codiert bedeutet, ich habe zwei Artikelnummern direkt in den VBA Code geschrieben. Eine auskommentiert (im Modul dann in grüner Schrift dargestellt) und eine, die das Makro für den aktuellen Start verwenden soll.


(22.05.2021, 17:17)DTM_ schrieb: [ -> ]Rufe ich das Modul dann nicht über Formeleingabe in einer Zelle ab?
Also "=Lieferzeit"?

Nein, Das Makro ist nicht als sogenannte UDF ausgelegt und davon würde ich bei geplanten 6.000 Zugriffen auf das Internet auch absehen. UDF steht für User Defined Function, also Benutzerdefinierte Funktion. Das mir vorschwebende Makro arbeitet alle Artikelnummern in Spalte A der Tabelle in einer Schleife ab. Die fehlt noch, da ich bisher nur mit den beiden fest im Code eingebauten Artikelnummern geprüft habe, ob es überhaupt funktioniert. Aufgerufen wird ein Makro über Ansicht -> Makros. Im dann erscheinden Dialog wählst Du dann das zu startende Makro aus. Machst Du das mit dem bisher vorliegenden, wird in der Tabelle, aus der Du es gestartet hast in Spalte B Zeile 2 die Lieferzeit der verwendeten Artikelnummer eingetragen.

(22.05.2021, 17:17)DTM_ schrieb: [ -> ]Das hier muss ich vorab ändern oder?
'Open "E:\check.txt" For Output As #1
Also erst die Artikelnummern in eine .txt speichern und dann das Modul laufen lassen?

Nein. Wie gesagt habe ich Deine CSV Datei noch gar nicht berücksichtigt, weil ich ihren Aufbau nicht kenne. Das Makro ist bisher lediglich der Nachweis, dass Dein Vorhaben machbar ist. Denn der Knackpunkt war ja der Zugriff auf eine bestimmte Angebotsseite. Wie Du sehen kannst, sind die Zeilen, von der Du ene zitiert hast, im Modul auch grün dargestellt. Die sind also gar nicht aktiv, sondern auskommentiert. Ich habe die einfach nur nicht gelöscht. Wenn aktiv, speichern sie den kompletten runtergeladenen HTML-Code in einer Text Datei mit dem Namen check.txt unter dem angegebenen Pfad. Ich habe damit geprüft, ob wirklich die richtige Seite angesprochen wird oder etwas anderes vom Webserver zurück geliefert wird.

(22.05.2021, 17:17)DTM_ schrieb: [ -> ]Ist keine Veräppelung, ich weiß damit leider echt nichts anzufangen/umzugehen.

Deshalb ist es am einfachsten, Du lädst die ersten paar Zeilen der CSV inklisive Kopfzeile hoch. Von mir aus so 50 Datensätze zu Artikeln. Dann kann ich gleich feststellen, ob es Unterschiede gibt, wie in den einzelenen Artikelseiten die Lieferzeit abgefragt werden muss. Eine CSV ist eine reine Textdatei. Bearbeite die also nicht in Word, sondern im einfachen Text Editor notepad.exe. Vor allem, lösche nur Zeilen weg, aber ändere auf keinen Fall etwas am Format, also wie die einzelnen Zeilen aufgeschrieben sind. Daran lässt sich sehen, wie der Import nach Excel vonstatten zu gehen hat.

Ich werde frühestens morgen Abend dazu kommen, mich insgesamt damit zu beschäftigen. Vielleicht ist jemand anders schneller Wink


Viele Grüße,

Zwenn
Hallo Zwenn,

wow - wieder mal ein Danke für diese Antwort.

Das Projekt eilt nicht. Wenn es reinpasst bin ich dankbar, wenn es dauert... ebenfalls Wink

Anbei eine Liste mit den ersten Artikelnummern.
Ich habe nur die Inhalte (Inhalte gelöscht), nicht jedoch den Aufbau der Liste geändert.
In Spalte B: Artikelnummern
In Spalte N: URL zu den Shops

Ich würde dann halt vor dem starten manuell zwischen N&O eine Spalte einfügen, da O bereits mit Infos voll ist.
Dies nur als Randinfo, auch wenn sie vermutlich nicht von Wichtigkeit ist, da der Aufbau ja erst nach der Spalte N dann durch einfügen einer neuen Spalte verändert werden würde.

Danke an dieser Stelle für die Hilfe(n).
Schönen Abend
Hallo DTM

Du hast die CSV in Excel bearbeitet richtig? Genau das solltest Du nicht machen, deshalb habe ich auf notepad verwiesen. Ich kann so nicht sehen, wie die Zeilen wirklich aufgebaut sind. Z.B. ob es Texteinschlusszeichen gibt, in die jedes Datenfeld gekapselt ist. Je nachdem, wie oft Du das Makro nutzen willst/ musst, reicht es ggf. auch, wenn Du die Spalte mit den Artikelnummern vor dem Auslesen von Hand in eine Excel-Tabelle kopierst. Dann musst Du mir nur sagen, in welcher Spalte die Artikelnummern stehen und in welcher Spalte die Lieferzeiten eingetragen werden sollen.

Viele Grüße,

Zwenn
Code:
Sub M_snb()
  With CreateObject("msxml2.xmlhttp.6.0")
    .Open "GET", "https://www.fox-sportauspuff.de/store-products.php?pName=alfa-romeo-147-endschalldaempfer-135x80-typ-53-p-2", False
    .send
   
    Do
      DoEvents
    Loop Until .readystate = 4

    MsgBox Split(Split(.responseText, "title=""Lieferzeit")(1), cht(34))(0)
  End With
End Sub
Hallo snb,

Danke dafür.

Wie oben schon erläutert bin ich im Umgang mit Makros nicht ganz bewandert und bekomme die Fehlermeldung: 
"Code kann im Haltemodus nicht ausgeführt werden."

Was mache ich falsch?

Bin wie folgt vorgegangen:

1. Habe mir die Traumvorstellung Datei oben aus meinen Uploads hergenommen
2. ALT + F11 --> neues Modul. Deinen Code reinkopiert und geschlossen.
3. Datei unter .xlsm abgespeichert
4. Die Entwicklertools nach Google Hilfe für Excel freigeschaltet
5. Unter Makros Deines "M_snb" ausgewählt.
6. Fehlermeldung.

Danke für erneute Hilfe.

... nun halbe Stunde später neuer Versuch.

Datei geöffnet -> Inhalte aktiviert --> andere Fehlermeldung:

Fehler beim Kompilieren:
Sub oder Function nicht definiert

91
Seiten: 1 2