Datum Excelstring richtig formartieren mit array

  • Hi @all,


    wenn ich aus einer Exceltabelle ein Datum auslesen lasse (_Excelreadcell) kommt ja der Zahlenwert, den Excel benutzt heraus (14600E+12) oder irgendwie sowas.

    Ich habe jetzt ~50 Werte in einem Array, alle davon die Daten. Wie kann ich jetzt

    a) herausfinden, ob der Zellenwert ein Datum ist und wenn ja

    b) alle Strings in dem Array in das Datum umwandeln um es wieder in eine (andere) Excel-Tabelle zu schreiben?


    Vielen Dank

    Aquaplant

    Einmal editiert, zuletzt von Aquaplant (23. April 2010 um 11:31)

  • Ich hab es jetzt einfach so gelöst:

    [autoit]

    If $aWert[$a] > 19950000000000 Then
    $JahresZahl = StringLeft($aWert[$a], 4)
    $MT = _StringBetween($aWert[$a], $JahresZahl, "000000")
    $Monatszahl = StringLeft($MT[0], 2)
    $Tageszahl = StringRight($MT[0], 2)
    $aWert[$a] = $Tageszahl & "." & $Monatszahl & "." & $JahresZahl
    EndIf

    [/autoit]


    Das einzige Problem ist noch, das einige Tage den Wert 61 oder 72 haben.


    EDIT:

    Ok habs :)


    [autoit]

    If $aWert[$a] > 19950000000000 Then
    $JahresZahl = StringLeft($aWert[$a], 4)
    $MT = _StringBetween($aWert[$a], $JahresZahl, "000000")
    If StringLen($MT[0]) = 3 Then
    $MT[0] = $MT[0] & "0"
    EndIf
    $Monatszahl = StringLeft($MT[0], 2)
    $Tageszahl = StringRight($MT[0], 2)
    $aWert[$a] = $Tageszahl & "." & $Monatszahl & "." & $JahresZahl
    EndIf

    [/autoit]

    Einmal editiert, zuletzt von Aquaplant (23. April 2010 um 11:29)

  • Wann haben die Tage falsche Werte? hast du da ein Beispiel?. Ansonsten würde ich so etwas machen:

    [autoit]

    $sDate = "20040520000000"

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

    MsgBox(0, '', StringFormat("Datum: %s\r\nGültig: %s\r\nCalcDate: %s", $sDate, _ExcelDateIsValid($sDate), _ExcelDateToCalc($sDate)))

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

    Func _ExcelDateToCalc($sDateString)
    ; Author: ProgAndy
    Return StringRegExpReplace($sDateString, "^(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})$", "\1/\2/\3 \4:\5:\6")
    EndFunc
    Func _ExcelDateIsValid($sDateString)
    ; Author: ProgAndy
    Return StringLen($sDateString)=14 And StringIsDigit($sDateString)
    EndFunc

    [/autoit]
  • Das Problem lag daran, dass $MT = _StringBetween($aWert[$a], $JahresZahl, "000000") aus irgendeinem Grund auch noch die siebte 0 (von rechts) gelöscht hat - sofern dort eine war (10.06.2008 = 10 = 1)

    Jetzt funktioniert alles wunderbar :)

    Danke