Progressbar zur Scriptlaufzeit einbinden.

  • Hallo miteinander,

    ich versuche vergeblich eine Progressbar in angehängtes Script einzubinden und hoffe Ihr könnt mir helfen.

    Kurzbeschreibung vom Script:
    Es wird eine CSV Datei aus dem i-Net heruntergeladen und in ein bzw. mehrer Arrays geschrieben (_FileReadToArray)
    dann werden alle Outlook Kalendereinträge mit der Kategorie "Schichtplan" eingelesen und ebenfalls in ein bzw. mehrer Arrays geschrieben
    Die Arrays werden miteinander verglichen, vorhande Kalendereinträge ggf. geändert oder gelöscht, neue Kalendereintrage hinzugefügt.
    Das ganze funktioniert wunderbar.

    Jetzt ist es so, das einlesen und schreiben bzw. verändern der Kalendereinträge und das vergleiche der Arrays dauert eine gewisse Zeit.
    Für diese Zeit würde ich gerne eine Progressbar einbinden... ich bekomme es aber nicht hin.

    Übergangsweise lasse ich in der Zeit ein "SplashTextOn("Update", "Moment bitte, Kalender-Update wird durchgeführt.",400,50)" anzeigen.

    Kann mir da jemand helfen bitte.

    Div. Beispiele und unendliches Suchem im I-net var erfolglos.


    Spoiler anzeigen
    [autoit]


    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <TabConstants.au3>
    #include <WindowsConstants.au3>
    #include <File.au3>
    #include <String.au3>
    #include <Array.au3>
    #include <IE.au3>
    #include <OutlookEX\OutlookEX.au3>

    [/autoit] [autoit][/autoit] [autoit]

    local $message
    Local $alt_file
    Local $neu_file
    local $a_split
    local $a_Var
    local $n_split
    local $n_Var

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    SplashTextOn("Update", "Moment bitte, Kalender-Update wird durchgeführt.",400,50)

    [/autoit] [autoit][/autoit] [autoit]

    ; -----------------------------------------------------------------------------------------------------------
    ; Schichtplan CSV Datei von Internetseite einlesen bzw. downloaden.
    ; -----------------------------------------------------------------------------------------------------------
    InetGet("http://www.xxxxxxxxxxx.xx/xxxxx/xxxxxxxx.csv", "E:\xxxxxxxx\xxxxxxxx.csv",1,0)

    [/autoit] [autoit][/autoit] [autoit]

    ; -----------------------------------------------------------------------------------------------------------
    ; Schichtplan CSV Datei in ein Array lesen
    ; -----------------------------------------------------------------------------------------------------------
    _FileReadToArray("E:\xxxxxxxx\xxxxxxxx.csv", $neu_file)

    [/autoit] [autoit][/autoit] [autoit]

    _ArrayDelete($neu_file, 0)
    local $n_caldays[UBound($neu_file)]
    local $n_entryid[UBound($neu_file)]
    local $n_subject[UBound($neu_file)]
    local $n_start[UBound($neu_file)]
    local $n_end[UBound($neu_file)]
    local $n_AllDayEvent[UBound($neu_file)]
    local $n_ReminderSet[UBound($neu_file)]
    local $n_ReminderMinutesBeforeStart[UBound($neu_file)]
    local $n_Categories[UBound($neu_file)]
    local $n_split

    [/autoit] [autoit][/autoit] [autoit]

    ; -----------------------------------------------------------------------------------------------------------
    ; Vorhandene Outlook Kalendereinträge in Arrays schreiben
    ; -----------------------------------------------------------------------------------------------------------
    Global $oOutlook = _OL_Open()
    Global $aFolder = _OL_FolderAccess($oOutlook, "icloud\Kalender")
    Global $aItems = _OL_ItemFind($oOutlook, "icloud\Kalender", $olAppointment, "", "Categories", "Schichtplan", "Start,EntryID,Subject" , "")
    _ArrayDelete($aItems, 0)
    _OL_Close($oOutlook)

    [/autoit] [autoit][/autoit] [autoit]

    local $a_caldays[UBound($aItems)]
    local $a_entryid[UBound($aItems)]
    local $a_subject[UBound($aItems)]
    local $a_start[UBound($aItems)]
    $x = 0
    For $i = 0 to Ubound($aItems) -1
    $a_caldays[$x] = $aItems[$x][0] & " - " & $aItems[$x][2]
    $a_entryid[$x] = $aItems[$x][1]
    $a_subject[$x] = $aItems[$x][2]
    $a_start[$x] = stringLeft($aItems[$x][0], 8)
    $x = $x + 1
    Next

    [/autoit] [autoit][/autoit] [autoit]

    ; -----------------------------------------------------------------------------------------------------------
    ; Werte aus Aktuellem Schichtplan aus CSV zur weiterverarbeitung in Arrays schreiben.
    ; -----------------------------------------------------------------------------------------------------------
    $x = 0
    For $i = 0 to UBound($neu_file) - 1
    $n_split = StringSplit($neu_file[$x], ";")
    $n_caldays[$x] = $n_split[2] & " - " & $n_split[1]
    $n_subject[$x] = $n_split[1]
    $n_start[$x] = stringleft($n_split[2], 8)
    $n_end[$x] = $n_split[3]
    $n_AllDayEvent[$x] = $n_split[4]
    $n_ReminderSet[$x] = $n_split[5]
    $n_ReminderMinutesBeforeStart[$x] = $n_split[6]
    Switch $n_split[1]
    Case "Variable", "Früh", "Spät/Früh (getauscht)", "Nacht/Früh(getauscht)", "A-Nacht/M-Tag (getauscht)", "Sonder Früh", "V Früh", "M-Tag", "Sonder M-Tag", "V M-Tag"
    $n_Categories[$x] = "Frühdienst; " & $n_split[7]
    Case "Spät", "Früh/Spät (getauscht)", "Nacht/Spät(getauscht)", "Sonder Spät", "V Spät", "Nacht/Spät (getauscht)", "Spät (HomeOffice)"
    $n_Categories[$x] = "Spätdienst; " & $n_split[7]
    Case "Nacht", "Früh/Nacht (getauscht)", "Spät/Nacht (getauscht)", "M-Tag/A-Nacht (getauscht)", "Sonder Nacht", "V Nacht", "A-Nacht", "Sonder A-Nacht", "V A-Nacht"
    $n_Categories[$x] = "Nachtdienst; " & $n_split[7]
    Case "Früh (Krank)", "Spät (Krank)", "Nacht (Krank)", "M-Tag (Krank)", "A-Nacht (Krank)", "V (Krank)"
    $n_Categories[$x] = "Krank; " & $n_split[7]
    Case "Früh (Urlaub)", "Spät (Urlaub)", "Nacht (Urlaub)", "M-Tag (Urlaub)", "A-Nacht (Urlaub)", "V (Urlaub)"
    $n_Categories[$x] = "Urlaub; " & $n_split[7]
    Case "Früh/- (Frei)", "Spät/- (Frei)", "Nacht/- (Frei)", "M-Tag/- (Frei)", "A-Nacht/- (Frei)", "Urlaub (Frei)", "V (Frei)"
    $n_Categories[$x] = "Frei; " & $n_split[7]
    EndSwitch
    $x = $x + 1
    Next

    [/autoit] [autoit][/autoit] [autoit]

    ; -----------------------------------------------------------------------------------------------------------
    ; ArrayList Object mit Datumswerte aus vorhandenen Outlook Kalendereinträge.
    ; -----------------------------------------------------------------------------------------------------------
    $a_AList = ObjCreate("System.Collections.ArrayList")
    For $i in $a_caldays
    $a_AList.add ($i)
    Next

    [/autoit] [autoit][/autoit] [autoit]

    $n_AList = ObjCreate("System.Collections.ArrayList")
    For $i in $n_caldays
    $n_AList.add ($i)
    Next

    [/autoit] [autoit][/autoit] [autoit]

    ; -----------------------------------------------------------------------------------------------------------
    ; Datum beider Arrays vergleichen und ggf. Outlook Kalendereintrag ändern oder hinzufügen.
    ; -----------------------------------------------------------------------------------------------------------
    $x = 0
    For $i in $n_start
    If not $a_AList.Contains ($n_caldays[$x]) Then
    $index = _ArraySearch($a_start, $i)
    $n_start_date = StringMid($n_caldays[$x], 7, 2) & "." & StringMid($n_caldays[$x], 5, 2) & "." & StringMid($n_caldays[$x], 1, 4) & " " & StringMid($n_caldays[$x], 9, 2) & ":" & StringMid($n_caldays[$x], 11, 2) & ":" & StringMid($n_caldays[$x], 13, 2)
    $n_end_date = StringMid($n_end[$x], 7, 2) & "." & StringMid($n_end[$x], 5, 2) & "." & StringMid($n_end[$x], 1, 4) & " " & StringMid($n_end[$x], 9, 2) & ":" & StringMid($n_end[$x], 11, 2) & ":" & StringMid($n_end[$x], 13, 2)
    If $index <> -1 Then
    $message = StringMid($n_caldays[$x], 7, 2) & "." & StringMid($n_caldays[$x], 5, 2) & "." & StringMid($n_caldays[$x], 1, 4) & " wurde nach """ & $n_subject[$x] & """ geändert!" & @CRLF
    Global $oOutlook = _OL_Open()
    Global $aFolder = _OL_FolderAccess($oOutlook, "icloud\Kalender")
    Global $oOutlook = _OL_Open()
    Global $aFolder = _OL_FolderAccess($oOutlook, "icloud\Kalender")
    _OL_ItemModify($oOutlook, $a_entryid[$index],Default, "Subject=" & $n_subject[$x], "Start=" & $n_start_date, "End=" & $n_end_date, "Categories=" & $n_Categories[$x])
    _OL_Close($oOutlook)
    Else
    $message = $message & StringMid($n_caldays[$x], 7, 2) & "." & StringMid($n_caldays[$x], 5, 2) & "." & StringMid($n_caldays[$x], 1, 4) & " """ & $n_subject[$x] & """ wurde hinzugefügt!" & @CRLF
    Global $oOutlook = _OL_Open()
    Global $aFolder = _OL_FolderAccess($oOutlook, "icloud\Kalender")
    $oItem = _OL_ItemCreate($oOutlook, $olAppointmentItem, "icloud\Kalender", "", "Subject=" & $n_subject[$x] , "Start=" & $n_start_date, "End=" & $n_end_date, "Categories=" & $n_Categories[$x], "Location=", "RequiredAttendees=" & $oOutlook.GetNameSpace("MAPI" ).CurrentUser.Name)
    $oItem.save
    _OL_Close($oOutlook)
    EndIf
    EndIf
    $x = $x + 1
    Next

    [/autoit] [autoit][/autoit] [autoit]

    $x = 0
    For $i in $a_start
    If not $n_AList.Contains ($a_caldays[$x]) Then
    $index = _ArraySearch($n_start, $i)
    If $index <> -1 Then
    Else
    $message = $message & StringMid($a_caldays[$x], 7, 2) & "." & StringMid($a_caldays[$x], 5, 2) & "." & StringMid($a_caldays[$x], 1, 4) & " """ & $a_subject[$x] & """ wurde gelöscht!" & @CRLF
    Global $oOutlook = _OL_Open()
    Global $aFolder = _OL_FolderAccess($oOutlook, "icloud\Kalender")
    _OL_ItemDelete($oOutlook, $a_entryid[$x])
    _OL_Close($oOutlook)
    EndIf
    EndIf
    $x = $x + 1
    Next

    [/autoit] [autoit][/autoit] [autoit]

    SplashOff()

    [/autoit] [autoit][/autoit] [autoit]

    IF $message = "" Then
    msgbox(64,"Schichtplan Update-Meldung","keine Änderungen vorgenommen!")
    Else
    msgbox(64,"Schichtplan Update-Meldung",$message)
    EndIf
    Exit

    [/autoit]
  • Du könntest das Problem so lösen, das du die maximale Anzahl der Einträge bestimmst und sie mit dem momentanen Stand vergleichst, das du praktisch einen Prozentwert er hältst, den Wert kannst du mit ProgressOn und den dazugehörigen Funktionen verwenden oder du erstellst dir eine eigene GUI mit einer Progressbar.

  • erstmal Danke für die Antwort....

    ich glaube das habe ich nicht richtig verstanden...
    in der csv datei befinden sich die aktuellen daten die ich mit den Outlook Kalendereintrage vergleich und ggf. in outlook anpasse.

    selbst das auslesen der Outlook Kalendereinträge und das vergleichen der Daten aus der csv Datei benötigen einiges an Zeit.
    ich könnte allerdings beim erstmaligen lauf, die anzahl der outlook Kalendereintrage in eine Datei schreiben die ich dann immer wieder auslese und aktualisiere...

    aber das hilft mir nicht wirklich weiter

  • Sofern du alle Einträge auf einmal vergleichst, oder wie das die Funktion auch hergeben mag, hast du keine andere Wahl als die Datei, wenn überhaupt eine erstellt wird, auf die Größe zu prüfen und zu verrechnen.
    Ansonsten kann man eigentlich nur die Funktion umschreiben, das der nicht alles sondern einzeln vergleichen soll.

  • Erstmal, keine Ahnung warum man hier irgendwas in eine Datei schreiben sollte. Es reicht völlig innerhalb der Schleifen den aktuellen Prozentwert des Schleifenfortschritts als neuen Progressbar Wert zu setzen. Da du mehrere Schleifen hast bietet es sich an zwei Progressbars zu erstellen, die eine zeigt den Gesamtfortschritt an und wird immer zwischen den Schleifen um x Prozent erhöht, die andere zeigt den Verlauf der aktuell abgearbeiteten Schleife an.

    Allgemeine Kritik an deiner Vorgehensweise:

    Du verschwendest unmengen Zeit, wenn du für jeden Eintrag der erstellt, geändert oder gelöscht werden soll ein neues Outlook Objekt anlegst (ol_open / ol_close /_ol_folderaccess). Ich würde soetwas einmal zum Programmstart machen und dann solange Aktionen ausführen bis das Objekt nicht mehr benötigt wird.


    Hier ein einfaches Progressbar Beispiel:


    Spoiler anzeigen
    [autoit][/autoit] [autoit][/autoit] [autoit]

    #include <GUIConstantsEx.au3>
    #include <ProgressConstants.au3>
    Global $progressbar1, $progressbar2, $button, $wait, $s, $msg, $m

    [/autoit] [autoit][/autoit] [autoit]

    GUICreate("Meine GUI Progressbar", 220, 100, 100, 200)
    $progressbar1 = GUICtrlCreateProgress(10, 10, 200, 20)
    GUICtrlSetColor(-1, 32250); Funktioniert nicht mit Windows XP Style
    $progressbar2 = GUICtrlCreateProgress(10, 40, 200, 20)
    $button = GUICtrlCreateButton("Start", 75, 70, 70, 20)
    GUISetState()
    While 1
    $msg = GUIGetMsg()
    if $msg = $button Then test()
    if $msg = $GUI_EVENT_CLOSE Then Exit
    WEnd

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func test()
    Local $aTest[30]
    GUICtrlSetData($progressbar1,0)

    [/autoit] [autoit][/autoit] [autoit]

    ; schritt 1 Daten einlesen
    for $i = 1 to UBound($aTest)-1
    Sleep(200)
    GUICtrlSetData($progressbar2,(100*$i)/(UBound($aTest)-1))
    Next
    GUICtrlSetData($progressbar1,33)

    [/autoit] [autoit][/autoit] [autoit]

    ; schritt 2 Daten vergleichen
    for $i = 1 to UBound($aTest)-1
    Sleep(200)
    GUICtrlSetData($progressbar2,(100*$i)/(UBound($aTest)-1))
    Next
    GUICtrlSetData($progressbar1,66)

    [/autoit] [autoit][/autoit] [autoit]

    ; schritt 3 Daten eintragen
    for $i = 1 to UBound($aTest)-1
    Sleep(200)
    GUICtrlSetData($progressbar2,(100*$i)/(UBound($aTest)-1))
    Next
    GUICtrlSetData($progressbar1,100)
    EndFunc

    [/autoit]
  • Kurzbeschreibung vom Script:

    Es wird eine CSV Datei aus dem i-Net heruntergeladen und in ein bzw. mehrer Arrays geschrieben (_FileReadToArray)

    dann werden alle Outlook Kalendereinträge mit der Kategorie
    "Schichtplan" eingelesen und ebenfalls in ein bzw. mehrer Arrays
    geschrieben

    Die Arrays werden miteinander verglichen, vorhande Kalendereinträge ggf.
    geändert oder gelöscht, neue Kalendereintrage hinzugefügt.

    Das ganze funktioniert wunderbar.


    Jetzt ist es so, das einlesen und schreiben bzw. verändern der
    Kalendereinträge und das vergleiche der Arrays dauert eine gewisse Zeit.

    Für diese Zeit würde ich gerne eine Progressbar einbinden... ich bekomme es aber nicht hin.

    ich weiß nicht wie ich das noch genauer beschreiben soll....

    mir würde ja schon eine gif animation reichen z.B. [Blockierte Grafik: http://www.philips.de/consumerfiles/assets/img/progress_bar.gif] die ich in ein gui mit Text "Moment bitte, blablabla" einbinde...
    sorry aber ich weiß nicht wie ich das in mein script unterbringe

  • So meinte ich das doch auch was er vorgeschlagen hatte nur stand das im 1. Thread.
    Wie dem auch sei,
    Wenn du die Anzahl der Einträge kriegst die du vergleichst dann kannst du schauen bei welcher Datei du bist und kannst sie in einen Prozentwert umrechnen.
    Wenn aber, wie du es meintest, es verschiedene Schritte gibt, kannst du wie es schon erwähnt wurde 2 Progressbars machen.

    Das einzige was du machen musst, ist nach jedem Einzelschritt und jedem Gesamtschritt die Progressbar zu updaten.

  • da bin ich wieder....

    klappt schon sehr gut, vielen dank nochmal....

    bei click auf Start, dauert es gefühlte 3 bis 5 Sekunden bis die Progressbar losrennt...
    ich vermute es liegt an den 3 folgenden aktionen die noch vorher gemacht werden.

    Hat da evtl. jemand noch eine kleine Hilfestellung wie ich diese aktionen noch mit in die Progressbar bekomme.

    Zeile 42: InetGet("http://www.xxxxxxxxxxx.xx/xxxxx.csv", "C:\Outlook-Temp\xxxxx.csv",1,0)
    Zeile 46: _FileReadToArray("C:\Outlook-Temp\xxxxx.csv", $neu_file)
    Zeile 64: Global $aItems = _OL_ItemFind($oOutlook, "Personal Folders\Kalender", $olAppointment, "", "Categories", "Schichtplan", "Start,EntryID,Subject" , "")

    das habe ich versucht

    [autoit]


    For $i = 1 to 1
    Sleep(10)
    GUICtrlSetData($progressbar2,(100*$x)/1)
    InetGet("http://www.xxxxxxxxxxx.xx/xxxxx.csv", "C:\Outlook-Temp\xxxxx.csv",1,0)
    $x = $x + 1
    next
    GUICtrlSetData($progressbar1,5)

    [/autoit]

    angepasst:

    Spoiler anzeigen
    [autoit]

    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <TabConstants.au3>
    #include <WindowsConstants.au3>
    #include <File.au3>
    #include <String.au3>
    #include <Array.au3>
    #include <IE.au3>
    #include <C:\Outlook-Temp\OutlookEX\OutlookEX.au3>

    [/autoit] [autoit][/autoit] [autoit]

    Global $message
    Global $alt_file
    Global $neu_file
    Global $a_split
    Global $a_Var
    Global $n_split
    Global $n_Var

    [/autoit] [autoit][/autoit] [autoit]

    Global $progressbar1, $progressbar2, $button, $wait, $s, $msg, $m
    GUICreate("Meine GUI Progressbar", 220, 100, 100, 200)
    $progressbar1 = GUICtrlCreateProgress(10, 10, 200, 20)
    GUICtrlSetColor(-1, 32250); Funktioniert nicht mit Windows XP Style
    $progressbar2 = GUICtrlCreateProgress(10, 40, 200, 20)
    $button = GUICtrlCreateButton("Start", 75, 70, 70, 20)
    GUISetState()
    While 1
    $msg = GUIGetMsg()
    if $msg = $button Then
    test()
    Exit
    EndIf
    if $msg = $GUI_EVENT_CLOSE Then Exit
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    Func test()
    GUICtrlSetData($progressbar1,0)
    ; -----------------------------------------------------------------------------------------------------------
    ; Schichtplan CSV Datei von Internetseite einlesen bzw. downloaden.
    ; -----------------------------------------------------------------------------------------------------------
    InetGet("http://www.xxxxxxxxxxx.xx/xxxxx.csv", "C:\Outlook-Temp\xxxxx.csv",1,0)
    ; -----------------------------------------------------------------------------------------------------------
    ; Schichtplan CSV Datei in ein Array lesen
    ; -----------------------------------------------------------------------------------------------------------
    _FileReadToArray("C:\Outlook-Temp\xxxxx.csv", $neu_file)
    _ArrayDelete($neu_file, 0)
    Global $n_caldays[UBound($neu_file)]
    Global $n_entryid[UBound($neu_file)]
    Global $n_subject[UBound($neu_file)]
    Global $n_start[UBound($neu_file)]
    Global $n_end[UBound($neu_file)]
    Global $n_AllDayEvent[UBound($neu_file)]
    Global $n_ReminderSet[UBound($neu_file)]
    Global $n_ReminderMinutesBeforeStart[UBound($neu_file)]
    Global $n_Categories[UBound($neu_file)]
    Global $n_split

    [/autoit] [autoit][/autoit] [autoit]

    ; -----------------------------------------------------------------------------------------------------------
    ; Vorhandene Outlook Kalendereinträge in Arrays schreiben
    ; -----------------------------------------------------------------------------------------------------------
    Global $oOutlook = _OL_Open()
    Global $aFolder = _OL_FolderAccess($oOutlook, "Personal Folders\Kalender")
    Global $aItems = _OL_ItemFind($oOutlook, "Personal Folders\Kalender", $olAppointment, "", "Categories", "Schichtplan", "Start,EntryID,Subject" , "")
    _ArrayDelete($aItems, 0)

    [/autoit] [autoit][/autoit] [autoit]

    Global $a_caldays[UBound($aItems)]
    Global $a_entryid[UBound($aItems)]
    Global $a_subject[UBound($aItems)]
    Global $a_start[UBound($aItems)]

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    $x = 0
    For $i = 0 to Ubound($aItems) -1

    [/autoit] [autoit][/autoit] [autoit]

    GUICtrlSetData($progressbar2,(100*$x)/(UBound($aItems)-1))
    $a_caldays[$x] = $aItems[$x][0] & " - " & $aItems[$x][2]
    $a_entryid[$x] = $aItems[$x][1]
    $a_subject[$x] = $aItems[$x][2]
    $a_start[$x] = stringLeft($aItems[$x][0], 8)
    $x = $x + 1
    Next

    [/autoit] [autoit][/autoit] [autoit]

    ;~ 1
    GUICtrlSetData($progressbar1,17)

    [/autoit] [autoit][/autoit] [autoit]

    ; -----------------------------------------------------------------------------------------------------------
    ; Werte aus Aktuellem Schichtplan aus CSV zur weiterverarbeitung in Arrays schreiben.
    ; -----------------------------------------------------------------------------------------------------------
    $x = 0
    For $i = 0 to UBound($neu_file) - 1
    GUICtrlSetData($progressbar2,(100*$x)/(UBound($neu_file)-1))
    $n_split = StringSplit($neu_file[$x], ";")
    $n_caldays[$x] = $n_split[2] & " - " & $n_split[1]
    $n_subject[$x] = $n_split[1]
    $n_start[$x] = stringleft($n_split[2], 8)
    $n_end[$x] = $n_split[3]
    $n_AllDayEvent[$x] = $n_split[4]
    $n_ReminderSet[$x] = $n_split[5]
    $n_ReminderMinutesBeforeStart[$x] = $n_split[6]
    Switch $n_split[1]
    Case "Variable", "Früh", "Spät/Früh (getauscht)", "Nacht/Früh(getauscht)", "A-Nacht/M-Tag (getauscht)", "Sonder Früh", "V Früh", "M-Tag", "Sonder M-Tag", "V M-Tag"
    $n_Categories[$x] = "Frühdienst; " & $n_split[7]
    Case "Spät", "Früh/Spät (getauscht)", "Nacht/Spät(getauscht)", "Sonder Spät", "V Spät", "Nacht/Spät (getauscht)", "Spät (HomeOffice)"
    $n_Categories[$x] = "Spätdienst; " & $n_split[7]
    Case "Nacht", "Früh/Nacht (getauscht)", "Spät/Nacht (getauscht)", "M-Tag/A-Nacht (getauscht)", "Sonder Nacht", "V Nacht", "A-Nacht", "Sonder A-Nacht", "V A-Nacht"
    $n_Categories[$x] = "Nachtdienst; " & $n_split[7]
    Case "Früh (Krank)", "Spät (Krank)", "Nacht (Krank)", "M-Tag (Krank)", "A-Nacht (Krank)", "V (Krank)"
    $n_Categories[$x] = "Krank; " & $n_split[7]
    Case "Früh (Urlaub)", "Spät (Urlaub)", "Nacht (Urlaub)", "M-Tag (Urlaub)", "A-Nacht (Urlaub)", "V (Urlaub)"
    $n_Categories[$x] = "Urlaub; " & $n_split[7]
    Case "Früh/- (Frei)", "Spät/- (Frei)", "Nacht/- (Frei)", "M-Tag/- (Frei)", "A-Nacht/- (Frei)", "Urlaub (Frei)", "V (Frei)"
    $n_Categories[$x] = "Frei; " & $n_split[7]
    EndSwitch
    $x = $x + 1
    Next
    GUICtrlSetData($progressbar1,34)

    [/autoit] [autoit][/autoit] [autoit]

    ; -----------------------------------------------------------------------------------------------------------
    ; ArrayList Object mit Datumswerte aus vorhandenen Outlook Kalendereinträge.
    ; -----------------------------------------------------------------------------------------------------------
    $a_AList = ObjCreate("System.Collections.ArrayList")
    $x = 0
    For $i in $a_caldays

    [/autoit] [autoit][/autoit] [autoit]

    GUICtrlSetData($progressbar2,(100*$x)/(UBound($a_caldays)-1))
    $a_AList.add ($i)
    $x = $x + 1
    Next
    GUICtrlSetData($progressbar1,51)

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    $n_AList = ObjCreate("System.Collections.ArrayList")
    $x = 0
    For $i in $n_caldays

    [/autoit] [autoit][/autoit] [autoit]

    GUICtrlSetData($progressbar2,(100*$x)/(UBound($n_caldays)-1))
    $n_AList.add ($i)
    $x = $x + 1
    Next
    GUICtrlSetData($progressbar1,68)
    ; -----------------------------------------------------------------------------------------------------------
    ; Datum beider Arrays vergleichen und ggf. Outlook Kalendereintrag ändern oder hinzufügen.
    ; -----------------------------------------------------------------------------------------------------------
    $x = 0
    For $i in $n_start
    GUICtrlSetData($progressbar2,(100*$x)/(UBound($n_start)-1))
    If not $a_AList.Contains ($n_caldays[$x]) Then
    $index = _ArraySearch($a_start, $i)
    $n_start_date = StringMid($n_caldays[$x], 7, 2) & "." & StringMid($n_caldays[$x], 5, 2) & "." & StringMid($n_caldays[$x], 1, 4) & " " & StringMid($n_caldays[$x], 9, 2) & ":" & StringMid($n_caldays[$x], 11, 2) & ":" & StringMid($n_caldays[$x], 13, 2)
    $n_end_date = StringMid($n_end[$x], 7, 2) & "." & StringMid($n_end[$x], 5, 2) & "." & StringMid($n_end[$x], 1, 4) & " " & StringMid($n_end[$x], 9, 2) & ":" & StringMid($n_end[$x], 11, 2) & ":" & StringMid($n_end[$x], 13, 2)
    If $index <> -1 Then
    $message = StringMid($n_caldays[$x], 7, 2) & "." & StringMid($n_caldays[$x], 5, 2) & "." & StringMid($n_caldays[$x], 1, 4) & " wurde nach """ & $n_subject[$x] & """ geändert!" & @CRLF
    _OL_ItemModify($oOutlook, $a_entryid[$index],Default, "Subject=" & $n_subject[$x], "Start=" & $n_start_date, "End=" & $n_end_date, "Categories=" & $n_Categories[$x])
    Else
    $message = $message & StringMid($n_caldays[$x], 7, 2) & "." & StringMid($n_caldays[$x], 5, 2) & "." & StringMid($n_caldays[$x], 1, 4) & " """ & $n_subject[$x] & """ wurde hinzugefügt!" & @CRLF
    $oItem = _OL_ItemCreate($oOutlook, $olAppointmentItem, "Personal Folders\Kalender", "", "Subject=" & $n_subject[$x] , "Start=" & $n_start_date, "End=" & $n_end_date, "Categories=" & $n_Categories[$x], "Location=", "RequiredAttendees=" & $oOutlook.GetNameSpace("MAPI" ).CurrentUser.Name)
    $oItem.save
    EndIf
    EndIf
    $x = $x + 1
    Next
    GUICtrlSetData($progressbar1,85)

    [/autoit] [autoit][/autoit] [autoit]

    $x = 0
    For $i in $a_start
    GUICtrlSetData($progressbar2,(100*$x)/(UBound($a_start)-1))
    If not $n_AList.Contains ($a_caldays[$x]) Then
    $index = _ArraySearch($n_start, $i)
    If $index <> -1 Then
    Else
    $message = $message & StringMid($a_caldays[$x], 7, 2) & "." & StringMid($a_caldays[$x], 5, 2) & "." & StringMid($a_caldays[$x], 1, 4) & " """ & $a_subject[$x] & """ wurde gelöscht!" & @CRLF
    _OL_ItemDelete($oOutlook, $a_entryid[$x])
    _OL_Close($oOutlook)
    EndIf
    EndIf
    $x = $x + 1
    Next
    GUICtrlSetData($progressbar1,100)
    IF $message = "" Then
    msgbox(64,"Schichtplan Update-Meldung","keine Änderungen vorgenommen!")
    Else
    msgbox(64,"Schichtplan Update-Meldung",$message)
    EndIf
    EndFunc

    [/autoit]
  • Hey,
    du sagtest ja du willst lieber etwas ohne Prozentanzeige für den Status (wie dein Gif)
    da würde ich dir das hier vorschlagen, ein Progress mit Marquee

    Spoiler anzeigen
    [autoit]

    #include <ProgressConstants.au3> ; nötiger Include
    Opt("GUIOnEventMode", 1)

    [/autoit] [autoit][/autoit] [autoit]

    Global $hGUI = GUICreate("", 400, 80)
    GUISetOnEvent(-3, "_exit", $hGUI)

    [/autoit] [autoit][/autoit] [autoit]

    GUICtrlCreateLabel("Bitte warten...", 10, 7, 380, 30)
    GUICtrlSetFont(-1, 16)

    [/autoit] [autoit][/autoit] [autoit]

    GUICtrlCreateProgress(10, 40, 380, 30, $PBS_MARQUEE) ; Progress erstellen
    GUICtrlSendMsg(-1, $PBM_SETMARQUEE, True, 40) ; Marquee einschalten
    ; die 40 steht für die Geschwindigkeit, je höher, desto langsamer

    [/autoit] [autoit][/autoit] [autoit]

    GUISetState(@SW_SHOW, $hGUI)

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    Sleep(200)
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    Func _exit()
    Exit
    EndFunc

    [/autoit]


    mfg Krabat

  • @ Krabat
    nee, progressbar ist schon gut, das animierte gif hätte als notlösung genommen...


    die Progressbar funktioniert jetzt ziemlich gut, hab nur noch ein Problem beim suchen in Outlook,
    da bleibt die Progressbar einfach stehen....

    [autoit]

    For $i = 1 to 1
    GUICtrlSetData($progressbar2,(100*$i)/1)
    Global $aItems = _OL_ItemFind($oOutlook, "Personal Folders\Kalender", $olAppointment, "", "Categories", "Schichtplan", "Start,EntryID,Subject" , "")
    Next
    GUICtrlSetData($progressbar1,33)

    [/autoit]

    ich habe keine idee wie ich das lösen könnte...

  • Du hast das Prinzip meiner Lösung nicht verstanden. Eine Schleife mit einem einzigen Durchlauf nutzt dir rein garnichts um einen Verlauf darzustellen, ist doch klar, dass hier der Verlauf sofort auf 100% gesetzt wird und dann erst deine Funktion der Outlook UDF aufgerufen wird. Die Schleifenlösung macht nur dann Sinn wenn du ohnehin etwas in Schleifen machst, bei Einzelbefehlen wie filereadtoarray oder eben dieser einen Outlook Funktion müsstest du schon innerhalb der Funktion schauen ob es dort Schleifen gibt und wenn ja dort deine Verläufe aktualisieren.

    Ich würde aber davon abraten in fremden UDF Funktionen solche Änderungen einzubauen, da du diese vermutlich auch mal in anderen Scripten nutzen willst und dort vielleicht garkeine Progressbar vorhanden ist. Für Funktionen deren Laufzeit du nicht kennst gibt es wie erwähnt wurde noch marquee Progressbars um zu signalisieren, dass hier noch etwas passiert.

    Da du irgendwas von 3 Sekunden für den ersten Teil des Scriptes gesagt hattest würde ich mir da garkeine große Mühe machen und den Verlauf nur ungefähr veranschaulichen, also z.B. so:


    Spoiler anzeigen
    [autoit]


    ; Schichtplan CSV Datei von Internetseite einlesen bzw. downloaden.
    ; -----------------------------------------------------------------------------------------------------------
    GUICtrlSetData($progressbar1,1)
    GUICtrlSetData($progressbar2,50)
    InetGet("http://www.xxxxxxxxxxx.xx/xxxxx.csv", "C:\Outlook-Temp\xxxxx.csv",1,0)
    GUICtrlSetData($progressbar1,2)
    GUICtrlSetData($progressbar2,100)
    ; -----------------------------------------------------------------------------------------------------------
    ; Schichtplan CSV Datei in ein Array lesen
    ; -----------------------------------------------------------------------------------------------------------
    GUICtrlSetData($progressbar2,50)
    _FileReadToArray("C:\Outlook-Temp\xxxxx.csv", $neu_file)
    _ArrayDelete($neu_file, 0)
    GUICtrlSetData($progressbar1,5)
    GUICtrlSetData($progressbar2,100)
    Global $n_caldays[UBound($neu_file)]
    Global $n_entryid[UBound($neu_file)]
    Global $n_subject[UBound($neu_file)]
    Global $n_start[UBound($neu_file)]
    Global $n_end[UBound($neu_file)]
    Global $n_AllDayEvent[UBound($neu_file)]
    Global $n_ReminderSet[UBound($neu_file)]
    Global $n_ReminderMinutesBeforeStart[UBound($neu_file)]
    Global $n_Categories[UBound($neu_file)]
    Global $n_split

    [/autoit] [autoit][/autoit] [autoit]

    ; -----------------------------------------------------------------------------------------------------------
    ; Vorhandene Outlook Kalendereinträge in Arrays schreiben
    ; -----------------------------------------------------------------------------------------------------------
    GUICtrlSetData($progressbar2,10)
    Global $oOutlook = _OL_Open()
    GUICtrlSetData($progressbar2,20)
    Global $aFolder = _OL_FolderAccess($oOutlook, "Personal Folders\Kalender")
    GUICtrlSetData($progressbar2,30)
    Global $aItems = _OL_ItemFind($oOutlook, "Personal Folders\Kalender", $olAppointment, "", "Categories", "Schichtplan", "Start,EntryID,Subject" , "")
    GUICtrlSetData($progressbar2,80)
    _ArrayDelete($aItems, 0)
    GUICtrlSetData($progressbar1,7)
    GUICtrlSetData($progressbar2,100)

    [/autoit]

    EDIT: Wenn die Datei wirklich groß ist und der Download lange braucht schau dir wie gesagt den Background Parameter von inetget an und verwende inetgetinfo um letzlich einen Downloadverlauf zu realisieren. Der Aufwand lohnt aber nicht bei minifiles die sowieso in ein paar ms runtergeladen sind.

    2 Mal editiert, zuletzt von misterspeed (15. September 2013 um 11:54)