Hallo,
ich habe in meiner Calc-Datei viele Verknüpfungen. Ich habe die Einstellungen so gewählt, dass sie beim Aufruf der Datei automatisch aktualisiert werden. Dazu müssen dann bis zu 12 andere Dateien angefasst werden. Das dauert natürlich. Ich habe versucht herauszufinden wann Calc soweit ist, das man in der Tabelle weiter arbeiten kann. Mit <WinWait> und <WinActivate> wollte ich sicherstellen, dass der Ladevorgang beendet ist und in einer bestimmten Zelle das Datum eintragen und dann zum nächsten Eingabefeld springen.
Das gelingt mir nur wenn ich ein <Sleep> einbaue. Auf unterschiedlichen Rechnern ist die Zeit dafür dann unterschiedlich lang.
Hat jemand einen guten Tip für mich wie ich die Wartezeit auf das nötigste beschränken kann?
Hier der Code auf das wesentliche reduziert
Spoiler anzeigen
#include <Date.au3>
#include <File.au3>
#include <Clipboard.au3>
Global $LOG_DATEI = "log_Example.txt"
Global $WIN_TIMEOUT = 30
Global $SPALTE = 0
Global $ZEILE = 3
Local $dateiName = "MeineCalcDatei.ods"
Local $monat = @MON
Local $jahr = @YEAR
Local $paddedMonth = StringFormat("%02d", $monat)
Local $datumString = "01." & $paddedMonth & "." & $jahr ; -> 01.09.2014
; in die Zwischenablage speichern
_ClipBoard_SetData($datumString)
; === H A U P T P R O G R A M M =================
; default Anwendung aufrufen
ShellExecute($dateiName)
If Not initialsiereSpreadsheet($dateiName) Then
meldeEreignis("Datum konnte nicht gesetzt werden, bitte manuel durchführen.")
EndIf
; ===============================================
Func initialsiereSpreadsheet($dateiName)
$calcTitel = $dateiName
If WinWait($calcTitel, "", $WIN_TIMEOUT) == 0 Then
meldeEreignis("Calc für " & $dateiName & " wurde nicht geöffnet.")
Return False
EndIf
If WinActivate($calcTitel) == 0 Then
meldeEreignis("Calc für " & $dateiName & " kann nicht aktiviert werden.")
Return False
EndIf
If WinWaitActive($calcTitel, "", $WIN_TIMEOUT) == 0 Then
meldeEreignis("Calc für " & $dateiName & " wurde nicht aktiviert.")
Return False
EndIf
;~ Sleep(18000) ; ===> WARTEN BIS DIE AOO-Calc-Datei SO WEIT IST <=== :-(
; datum in die Zelle einfügen
geheZuZelle($ZEILE, $SPALTE)
Send($datumString)
meldeEreignis("Datum für " & $dateiName & " wurde gesetzt.")
; neue Zelle waehlen
Send("{TAB}")
meldeEreignis("Fokus in" & $dateiName & " wurde auf < B3 > gesetzt.")
; speichern
Send("^s")
Return True
EndFunc
Func geheZuZelle($mZeile, $mSpalte)
Send("^{HOME}")
Send("{RIGHT " & $mSpalte & "}")
Send("{DOWN " & $mZeile & "}")
EndFunc
Func meldeEreignis($meldung)
loggen($meldung)
Local $ToolTipX = 800
Local $ToolTipY = 700
ToolTip( @CR & $meldung & @CR, $ToolTipX, $ToolTipY)
Sleep(3000)
EndFunc
Func loggen($nachricht)
If Not FileExists($LOG_DATEI) Then
If (_FileCreate($LOG_DATEI) == 0) Then
meldeEreignis("Log-Datei konnte nicht erstellt werden!")
Return
EndIf
EndIf
$logFile = FileOpen($LOG_DATEI, $FO_APPEND)
If $logFile == -1 Then
meldeEreignis("Log-Datei kann nicht geöffnet werden!")
Return
EndIf
$zeitstempel = _Now()
$logNachricht = $zeitstempel & "|" _
& $monat & "|" _
& $jahr & "|" _
& $nachricht & @CRLF
If FileWrite($logFile, $logNachricht) == 0 Then
meldeEreignis("In die Log-Datei kann nicht geschrieben werden!")
EndIf
FileClose($logFile)
EndFunc
Alles anzeigen