Über Excel ein Skript laufen lassen

  • Hallo Leute ich habe folgendes anliegen:
    Ich würde gerne Auto it laufen lassen und eine Excel Datei auslesen lassen. Sodann hätte ich gern, das Auto it von der Zelle A1, welches es gelesen hat, den Code ausführt welchen ich vorher dort in die Excel Datei reingeschrieben habe.
    Bisher bei Auto it:

    #include <Excel.au3>

    Local $oExcel_1 = _Excel_Open()

    Local $var = "C:\Users\.....\Desktop\pool.xlsx"

    Local $oWorkbook = _Excel_BookOpen($oExcel_1,$var)

    WinActivate("Test - Microsoft Excel")


    ;Liest EIgenschaften/Vorlage

    Local $_read1 = _Excel_RangeRead($oWorkbook, Default , "A1")

    Local $_read2 = _Excel_RangeRead($oWorkbook, Default , "D6")

    Local $_read3 = _Excel_RangeRead($oWorkbook, Default , "D7")

    $_read1

    _____________________________________________________________________________________________

    In der Excel datei in Zelle A1 steht folgender Code:

    ShellExecute("https://google.de")

    sleep(500)

    WinWaitActive("Google - Mozilla Firefox")

    sleep(2500)

    WinSetState("Google - Mozilla Firefox", "", @SW_MAXIMIZE)

    sleep(5000)

    MouseClick("left" , 1059,305 , 1)

    sleep(3000)

    MouseClick("left" , 957,518 , 1)

    sleep(3000)

    WinSetState("Datei hochladen", "", @SW_MAXIMIZE)

    sleep(7000)

    ...

    ______________________________________________________________________________________________

    Auto it führt aber das Skript nicht aus, und zeigt eine rote Fehlermeldung bei $_read1: ....statment cannot be just an expression

    Ist das Überhaupt möglich, das was ich vor habe? Könnt Ihr mir da helfen?

    Ich danke euch im vorraus.

    Gruß Bernd

  • Ist das überhaupt möglich, das was ich vorhabe?

    Die Frage sollte wohl eher lauten : "Ist das überhaupt sinnvoll, was ich dort vorhabe ?"

    Warum willst Du den Umweg über Excel gehen ? Schreibe die Befehle doch gleich in Dein AutoIt-Skript.

    Gruß Musashi

    86598-musashi-c64-png

    "Am Anfang wurde das Universum erschaffen. Das machte viele Leute sehr wütend und wurde allenthalben als Schritt in die falsche Richtung angesehen."

  • wenn ich bei autoit eine befehlsreihe, welche beispielsweise 200 mal wiederholt mit jeweils verschiedenen Mausklicks, verädern will oder muss, sodann muss ich bei autoit es einmal verändern und dann 200 mal löschen und einfügen. Wenn das mit exel klapen würde, sodann müsste ich dies nur ein mal bei exel verändern und es wäre für alle 200 mit einem schlag übernommen, da überall bspw. $_read1 stehen würde.
    Weiterhin hätte dies viele weitere vorteile.
    Oder gibt es diese Funktion auch bei Auto it?

  • (Vorab : es ist schon spät, daher bin ich bereits etwas platt im Kopf ;))

    Es wäre zwar möglich, einen eingelesenen Text als Code innerhalb von AutoIt auszuführen, aber das ist selten notwendig und in der Regel auch nicht zu empfehlen.

    In AutoIt gibt es sogenannte Schleifen (Loops).

    Die bei jedem Durchlauf benötigten Werte kann man z.B. in einem Array ablegen. Bei Dir wären das wohl die jeweiligen XY-Werte für die Mausklicks, oder?

    Beschreibe mal etwas genauer, was Du erreichen möchtest.

    Gruß Musashi

    86598-musashi-c64-png

    "Am Anfang wurde das Universum erschaffen. Das machte viele Leute sehr wütend und wurde allenthalben als Schritt in die falsche Richtung angesehen."

  • Zwei weitere Punkte:

    • Es empfiehlt sich nicht mit Bildschirmkoordinaten zu arbeiten, da das Skript dann von der Bildschirmauflösung, der Position des Fensters etc. abhängt.
    • Browser automatisiert man/frau heutzutage mit der WebDriver UDF. Das ist die aktuelle Technologie.

    Aber die grundlegende Frage ist: Was willst Du konkret? Also z.B. Dateien, die in einem Excel Workbook gelistet sind, ins Web hochladen?

  • Hi Bernd Albrecht :

    Was die Ergänzungen von water angeht, das sehe ich genauso !

    Wahrscheinlich haben wir es hier mal wieder mit dem beliebten XY_Problem zu tun ^^.

    So wie ich das verstehe, enthalten die Excel-Zellen nicht (nur) die jeweiligen Namen der hochzuladenen Dateien, sondern komplette Quellcodesequenzen, die eingelesen und innerhalb von AutoIt ausgeführt werden sollen. Das wäre mit z.B. RunWait(@AutoItExe & ' /AutoIt3ExecuteLine ' & $sCommand) zwar bedingt möglich, aber alles andere als sinnvoll.

    Bernd Albrecht :

    Beiße Dich daher nicht zu sehr in Excel fest. Beschreibe was Du erreichen möchtest, also z.B. :

    - ich habe X Dateien (Dateiliste liegt in Excel, CSV o.Ä. vor)

    - diese möchte ich an folgende Adresse hochladen

    - es werden ggf. Logindaten benötigt

    usw.

    Gruß Musashi

    86598-musashi-c64-png

    "Am Anfang wurde das Universum erschaffen. Das machte viele Leute sehr wütend und wurde allenthalben als Schritt in die falsche Richtung angesehen."

  • Ich danke euch für eure hilfreichen Antworten Musashi und water .
    Ich werde demnächst das uploaden auf T-shirt Plattformen automatisieren. Dabei möchte ich es mir so leicht wie möglich machen, wenn ich codes ändern muss. Die Betreiber der T-shirt PLattform Seiten, sehen es nicht gern, das "Bots" die Designs hochladen, dementsprechend gibt es immer wieder änderungen an den Websiten. Wenn dann demnächst wieder bspw. 2 Mausklicks sich auf der Website verädnert haben, würde ich es gern vermeiden, diese 2 Codes einzeln für das gesamte Skript ändern zu müssen. Auto it markiert öfters bspw. gleiche sleep Zahlen in den klammmern mit grün, ich weis aber nicht , wie ich das dann auch auf einen Schlag für alle grün markierten stellen verändern kann. Bisher bin ich da nicht weiter gekommen. Ich bin im Umgang bei Auto it Laie und finde einige Dinge ziemlich kompliziert. Mit Excel kann ich gut umgeben und habe zusätzlich, wie ich meine, ein gewisses mathematisches verständniss. Bei Excel gestalltet sich das verändern von mehrere zellen für mich einfacher.

    Die bei jedem Durchlauf benötigten Werte kann man z.B. in einem Array ablegen. Bei Dir wären das wohl die jeweiligen XY-Werte für die Mausklicks, oder?

    Arrays könnten mir vielleicht weiterhelfen, ich werde mich in den nächsten Tagen weiter da rein lesen.

    RunWait(@AutoItExe & ' /AutoIt3ExecuteLine ' & $sCommand) z

    Das werde ich mir auch anschauen. Wieso ist wäre dies alles andere als Sinnvoll? Ist diese Methode fehlerbehaftet oder arbeitet dadurch auoit sehr langsam?


    Gruß Bernd

  • Wieso ist wäre dies alles andere als sinnvoll? Ist diese Methode fehlerbehaftet oder arbeitet dadurch auoit sehr langsam?

    [Anmerkung : gemeint ist /AutoIt3ExecuteLine bzw. /AutoIt3ExecuteScript ]

    (Ich beschreibe die Dinge nachfolgend mal vereinfacht)

    Diese "Methode" ist nicht im eigentlichen Sinne "fehlerbehaftet" oder sonst etwas - Du benötigst sie schlicht und ergreifend nicht. Zudem birgt sie gewisse Risiken, da z.B. jemand Schadcode in die Exceldatei einbauen könnte.

    An Alle : Jetzt bitte keine Diskussion über die Sicherheit von AutoIt-Skripten im Allgemeinen ;)

    Es heißt übrigens AutoIt , nicht Auto it oder auoit )

    Die Betreiber der T-Shirt Plattform Seiten, sehen es nicht gern, dass "Bots" die Designs hochladen, dementsprechend gibt es immer wieder Änderungen an den Websiten.

    Die Webdriver-UDF greift z.B. über Control-IDs auf die Buttons zu, nicht mittels Mausklick auf eine bestimmte XY-Position. Es spielt daher keine Rolle WO sich ein Button befindet. Hinzu kommen die von water angesprochenen Aspekte (Bildschirmauflösung, Fensterposition usw.).

    Sollte der jeweilige Webseitenbetreiber allerdings auch die Control-IDs ändern, dann musst Du eh Anpassungen vornehmen.

    Ich würde vorschlagen, Du machst Dich erst mal ein wenig mit Loops (Schleifen) und Arrays vertraut, dann sehen wir weiter. Wahrscheinlich wirst Du dann selbst feststellen, dass der Umweg (AutoIt-Quellcode in Excel) unsinnig ist.

    Wichtige Anmerkung zu : "Die Betreiber ... sehen es nicht gern, ..." :

    Sollte(n) die Website(s) Captchas verwenden oder den automatisierten Upload per Nutzerbedingungen verbieten, dann wäre eine weitere Hilfestellung gemäß unserer Forenregeln nicht mehr möglich. Könntest Du daher bitte mal die entsprechenden Links posten.

    Gruß Musashi

    86598-musashi-c64-png

    "Am Anfang wurde das Universum erschaffen. Das machte viele Leute sehr wütend und wurde allenthalben als Schritt in die falsche Richtung angesehen."

  • Sollte(n) die Website(s) Captchas verwenden oder den automatisierten Upload per Nutzerbedingungen verbieten, dann wäre eine weitere Hilfestellung gemäß unserer Forenregeln nicht mehr möglich. Könntest Du daher bitte mal die entsprechenden Links posten.

    Musashi Danke für deine Antwort. spreadshirt.de ist die Seite.

    Ok !

    Ich vermute stark, dass Du dort ein sogenanntes "Partner Account" hast (wahrscheinlich mit einer eigenen Shopseite). Daher habe ich deren AGB und auch die gesonderten Partner-AGB mal überflogen. Ein Verbot, Designs mittels Automatisierung der Upload-Seite hochzuladen, konnte ich so nicht finden. Das ist aber nur meine private Interpretation, keinesfalls eine rechtsverbindliche Bewertung !

    Raupi / Gun-Food : Falls ihr trotzdem ein Problem seht, dann holt bitte den Hammer 'raus ;)

    Bernd Albrecht :

    Um geneigten Helfern eine Vorstellung des Ablaufes zu geben, wäre folgendes sinnvoll :

    • Screenshot(s) der Uploadseite (n)
    • Persönliche Daten wie z.B. Deine Shopadresse bitte unkenntlich machen, da das Forum keine Werbeplattform darstellt
    • Beschreibung des Uploadprozesses in kurzen Sätzen
    • in welcher Form liegen die hochzuladenen Daten vor (wahrscheinlich als Tabelle mit Pfaden)

    Gruß Musashi

    86598-musashi-c64-png

    "Am Anfang wurde das Universum erschaffen. Das machte viele Leute sehr wütend und wurde allenthalben als Schritt in die falsche Richtung angesehen."

  • Ein Verbot, Designs mittels Automatisierung der Upload-Seite hochzuladen, konnte ich so nicht finden. Das ist aber nur meine private Interpretation, keinesfalls eine rechtsverbindliche Bewertung !

    Ich hatte auch nix diesbezüglich gefunden, die Betreiber sehen dies aber nicht gerne, besonders wenn man damit übertreibt.

    Um geneigten Helfern eine Vorstellung des Ablaufes zu geben, wäre folgendes sinnvoll :

    Ich danke euch für eure hilfe bisher, ich komm noch aktuell zurecht, wenn ich hilfe brauchen sollte werde ich mich vorerst selbst versuchen schlau zu machen, ansonsten werde ich hier im Forum schreiben.