AutoIT - Wie kann ich einen Buchstaben auslesen
Ich habe folgenden Plan. Folgender Dienstplan soll jeden Monat automatisch in den Google Kalender eingetragen werden:
Die unterste Spalte ist wichtig. Hinter den Buchstaben stehen verschiedene Zeiten (F = Frühschicht)
Also ich weiß jetzt dass das was ich bisher zusammen gebastelt habe echt nicht die schönste Lösung ist, aber das ist die einzige Lösung die ich selber beim schreiben verstehe von den Befehlen her :D
#include <MsgBoxConstants.au3>
;Fenster maximieren
WinSetState ( "Microsoft Excel - Dienstplan 2015.xls [Schreibgeschützt] [Kompatibilitätsmodus]", "",@SW_MAXIMIZE)
;Anzeigegröße auf 100 setzen
MouseClick("left",1759, 1038,2)
Sleep(500)
MouseClick("left",1017, 577, 2)
Sleep(500)
Send( "100")
Send ("{ENTER}")
; Feld 1 anklicken
MouseClick("left",250, 379)
sleep(500)
;Textzeile anklicken
MouseClick("left",265, 149,2)
Send("^c")
InputBox("", "Zahl wird erkannt...", "", "")
sleep(500)
Send("^v")
Send("{Enter}")
Es soll quasi einfach automatisch durch geklickt werden. Am Anfang wird das Fenster maximiert dass alles immer an der gleichen Stelle ist und der Zoom wird angepasst (auf 100 gesetzt) Jetzt geht die Maus von Feld zu Feld. Bei F soll die Zeit bei im Google Kalender eingetragen werden. Im prinzip ist das ganze dann immer ein und der selbe Ablauf.Die Maus und Eingaben werden so gesteuert wie es ein User auch manuell machen würde.
Das letzte mit dem auslesen der msgbox geht schon mal nicht. Mit der msgbox macht das script eine Pause. Ich muss jetzt aber den Buchstaben auslesen damit die richtige Zeit eingetragen wird. Hat mir jemand eine Lösung?
Die unterste Spalte ist wichtig. Hinter den Buchstaben stehen verschiedene Zeiten (F = Frühschicht)
Also ich weiß jetzt dass das was ich bisher zusammen gebastelt habe echt nicht die schönste Lösung ist, aber das ist die einzige Lösung die ich selber beim schreiben verstehe von den Befehlen her :D
#include <MsgBoxConstants.au3>
;Fenster maximieren
WinSetState ( "Microsoft Excel - Dienstplan 2015.xls [Schreibgeschützt] [Kompatibilitätsmodus]", "",@SW_MAXIMIZE)
;Anzeigegröße auf 100 setzen
MouseClick("left",1759, 1038,2)
Sleep(500)
MouseClick("left",1017, 577, 2)
Sleep(500)
Send( "100")
Send ("{ENTER}")
; Feld 1 anklicken
MouseClick("left",250, 379)
sleep(500)
;Textzeile anklicken
MouseClick("left",265, 149,2)
Send("^c")
InputBox("", "Zahl wird erkannt...", "", "")
sleep(500)
Send("^v")
Send("{Enter}")
Es soll quasi einfach automatisch durch geklickt werden. Am Anfang wird das Fenster maximiert dass alles immer an der gleichen Stelle ist und der Zoom wird angepasst (auf 100 gesetzt) Jetzt geht die Maus von Feld zu Feld. Bei F soll die Zeit bei im Google Kalender eingetragen werden. Im prinzip ist das ganze dann immer ein und der selbe Ablauf.Die Maus und Eingaben werden so gesteuert wie es ein User auch manuell machen würde.
Das letzte mit dem auslesen der msgbox geht schon mal nicht. Mit der msgbox macht das script eine Pause. Ich muss jetzt aber den Buchstaben auslesen damit die richtige Zeit eingetragen wird. Hat mir jemand eine Lösung?
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 272584
Url: https://administrator.de/contentid/272584
Ausgedruckt am: 23.11.2024 um 00:11 Uhr
12 Kommentare
Neuester Kommentar
Moin,
warum durchklicken ?, das ist absoluter mist (sorry aber das ist die leider die nackte Wahrheit). Du kannst viel zuverlässiger mit Autoit direkt auf die Excel-Zellen zugreifen indem du über COM-Automation auf das Workbook zugreifst, gleichzeitig ist dann egal wo das Workbook auf dem Bildschirm steht, das kann sogar unsichtbar sein (Zeile 3 des Scripts auf False ändern)
Gruß jodel32
warum durchklicken ?, das ist absoluter mist (sorry aber das ist die leider die nackte Wahrheit). Du kannst viel zuverlässiger mit Autoit direkt auf die Excel-Zellen zugreifen indem du über COM-Automation auf das Workbook zugreifst, gleichzeitig ist dann egal wo das Workbook auf dem Bildschirm steht, das kann sogar unsichtbar sein (Zeile 3 des Scripts auf False ändern)
; Excel öffnen
$objExcel = ObjCreate("Excel.Application")
$objExcel.Visible = true
; Dokument öffnen
$doc = $objExcel.Workbooks.Open("C:\Pfad\Dienstplan 2015.xls")
; Worksheet 1 einer Variablen zuweisen
$sheet = $doc.Worksheets.Item(1)
; Fürs Beispiel die Zellen A18:E18 nacheinander durchlaufen und ausgeben
for $cell in $sheet.Range("A18:E18")
msgbox(0,"","Wert der Zelle ist " & $cell.Value)
; je nach Buchstabe etwas machen ...
if $cell.Value = "F" then
msgbox(0,"","Zeit für F = 05:00 14:00")
else
msgbox(0,"","Zeit für S = 14:00 - 23:00")
Endif
Next
Beim durchschauen bin ich mir noch nicht ganz sicher was bei Zeile 8.9 gemeint ist aber ich denke das finde ich heraus ;)
Damit sagst du auf welchem Tabellenblatt die Daten im Excel-Dokument stehen. Im Beisipiel ist es das erste. Du kannst anstatt des Index aber auch den Namen verwenden.$sheet = $doc.Worksheets.Item("Tabelle1")
ja perfekt dann könnte man theoretisch ein ganzes Jahr komplett eintragen lassen, weil die tabellen sind die Monate
Könnte man, aber das würde ich dann komplett z.B. mit Powershell und dem Google-Clalendar API lösen und nicht mit einer Auto-Klickorgie Keine Ursache.
Wenns das dann war, den Beitrag bitte noch auf gelöst setzen.
Gruß jodel
Also, erstens lieferst du mit der InputBox eine Variable vom Typ String zurück. Jedoch erwartet Excel bei der Übergabe eines Strings, bei der Angabe des Worksheets den Namen des Sheets und nicht die Nummer. Wenn du den Index angeben willst, muss das auch ein Integer-Wert sein, also musst du die Variable in einen Integer umwandeln
Zweitens ist die Angabe des Ranges nicht korrekt. Variablen werden in AutoIT nicht innerhalb von Anführungszeichen expandiert ! Du musst sie also miteinander verketten:
Gruß jodel32
$doc.Worksheets.Item(Number($Monat))
Zweitens ist die Angabe des Ranges nicht korrekt. Variablen werden in AutoIT nicht innerhalb von Anführungszeichen expandiert ! Du musst sie also miteinander verketten:
for $cell in $sheet.Range($Zellenanfang & ":" & $Zellenende)
$anfang = InputBox("Zellenabfrage","Bitte geben den ersten Tag Ihres Planes an! WICHTIG: Bitte immer beim 1. des Monats anfangen!")
$ende = InputBox("Zellenabfrage","Bitte geben den letzten Tag Ihres Planes an!")
for $cell in $sheet.Range($sheet.Cells(35,2 + Number($anfang)),$sheet.Cells(35,2 + Number($ende))
....
...
..
.
Die armen Leute die das verwenden müssen da hab ich richtig Mitleid mit denen.
Mit Powershell und dem Google API geht das wesentlich zuverlässiger, ohne irgendein sichtbares Fenster !
Na dann noch viel Spaß beim Frickeln...
i'm out'a here
Gruß jodel32