Falsches Datums Format im Array

  • Hallo,

    Lese aus einer Excel Tabelle ein Array ein.
    Bekomme aber immer das falsche Datum angezeigt im Array als auch in der Tabelle wo ich es einfüge.

    [autoit]

    $aArray = _ExcelReadSheetToArray($xlsdir, 5, 1, 0, 2) ; Lese zwei Spalten ab der 5 Zeile 5102
    _ArrayDisplay($aArray, "Nur zum Testen-----$aArray----")

    [/autoit]


    Aus dieser wird gelesen:
    autoit.de/wcf/attachment/7152/
    So wird die dann im Array eingelesen ist:
    autoit.de/wcf/attachment/7153/
    So sieht es dann in der neuen Tabelle aus :
    autoit.de/wcf/attachment/7154/

    Die Uhrzeit und alles andere wird richtig angezeigt. Hatte erst Excel in verdacht aber kann es jetzt so gut wie aus schlissen.

    Was mache ich da falsch ?


    mfg
    oh-ha

  • Hallo GtaSpider,

    hatte so ziemlich alle Formate die mir Excel anbietet probiert. Von Standart über Datum und Uhrzeit. Hat alles nicht geholfen.

    In den Bild bei der ersten Tabelle ist es als Datum>>Deutschland>>Standard Formatiert.
    Bei dem dritten Bild habe ich es mal als Text>>Standard gelassen nur um anzuzeigen was dahintersteht. Wenn ich es als Datum
    Formatiere und dabei ist es egal in welchen Format bekomme ich nur Rauten angezeigt da Excel damit nicht umgehen kann.

    Wie man aber erkennen wird das Array mit dem komischen Format beschrieben. Bild 2
    Hatte auch schon Probiert das Format der ersten Tabelle umzubiegen aber da rechnet sich der Computer platt.

    [autoit]

    $sFormat = "" ; Formatiert die Zellen als String _ExcelNumberFormat, um sie als Standart anzuzeigen
    _ExcelNumberFormat($xlsdir, $sFormat, 5, 3, 50000, 3) ; Start in Zeile 5, Spalte 3, Ende in Zeile 50000, Spalte 3

    [/autoit]

    Edit: Kann die erste Tabelle nicht bearbeiten da sie so vom System kommt.

    mfg
    oh-ha

    Es gibt drei Wahrheiten: deine Wahrheit, meine Wahrheit und die Wahrheit

    2 Mal editiert, zuletzt von oh-ha (31. Dezember 2009 um 17:05)

    • Offizieller Beitrag

    Du schreibst das Datum als eine Nichtdatum-Zahl in die neue Tabelle, dadurch wird das als reine Zahl interpretiert.
    Ich suche mal raus, wie ich sowas gelöst habe und poste es dann.


    Edit:
    Hier als Bsp., den Datumsstring mußt du aber vorher auch in die Form: TT.MM.JJJJ bringen und erst dann eintragen.

    [autoit]

    ; im Bsp. A1 bis A20 als Datum formatieren
    $oSheet.Range('A1:A20').NumberFormat = "TT.MM.JJJJ"

    [/autoit]
  • Hallo und Frohes neues Jahr,

    nun Verstehe ich gar nichts mehr ?( aber es geht :thumbup:
    Habe es mal so wie von dir Vorgeschlagen gemacht BugFix.

    [autoit]

    $oSheet.Range('C:C').NumberFormat = "TT.MM.JJJJ"

    [/autoit]


    Nur passiert da dann rein gar nichts da das Datum in der ersten Tabelle ja schon das Datumsformat hat. " Wird wohl bei der Umbenennung von *.xlt zu *.csv von Excel selber erkannt. "
    Das Datum steht in der ersten Tabelle als 12.12.2009 im Format Datum, wird dann von Autoit eingelesen als 20091212000000 und so auch in der neuen Tabelle reingeschrieben.
    Formatiere ich das Datum aber als Zahl oder Standard " 40159 "

    [autoit]

    $oSheet.Range('C:C').NumberFormat = ""

    [/autoit]


    wird es in der neuen Tabelle richtig als Datum erkannt und eingetragen. Dafür erst einmal ein dickes DANKE.

    Sitze da jetzt schon ein paar Tage dran und hatte den Fehler zuerst bei Excel vermutet was ja auch bei MS-Klamotten nicht so abwegig ist.
    Wollte eigentlich mit dem Projekt Autoit Lernen und nicht Excel :D
    Was mache ich oder Autoit falsch ?
    Es kann doch nicht richtig sein das man etwas das schon im richtigen Format vorliegt erst wieder Umwandeln muss um es dann wieder in den selben Format zu bekommen.
    Oder habe ich da ein Verständnis Problem.


    mfg
    oh-ha

    Es gibt drei Wahrheiten: deine Wahrheit, meine Wahrheit und die Wahrheit

    • Offizieller Beitrag

    Es kann doch nicht richtig sein das man etwas das schon im richtigen Format vorliegt erst wieder Umwandeln muss um es dann wieder in den selben Format zu bekommen.
    Oder habe ich da ein Verständnis Problem.


    Wenn du innerhalb von Office-Anwendungen Daten hin- und herschiebst, so kannst du dabei auch das Format "mitnehmen".
    Bei Zwischenschalten anderer Anwendungen geht das nicht.
    Bsp.
    Exceltabelle enthält das Datum "1.1.2010"
    - die Formatierung der Zelle ist auf "TT.MM.JJJJ" gesetzt, Anzeige: "01.01.2010"
    - intern speichert Excel aber nur einen Zahlenwert, und zwar: 40179,00 (Basiswert 0 = "00.01.1900")
    Dieser Zahlenwert wird beim Kopieren/Auslesen des Zelleninhaltes übernommen und mit entsprechendem Formatbefehl dann wieder als Datum dargestellt.

    Zitat

    Das Datum steht in der ersten Tabelle als 12.12.2009 im Format Datum, wird dann von Autoit eingelesen als 20091212000000 und so auch in der neuen Tabelle reingeschrieben.

    AutoIt liest den formatierten Datumswert mit allen Angaben als String ein (JJJJMMTThhmmss). Beim Eintragen dieses Strings in eine neue Excelzelle, wird der String mit Standardformat interpretiert und für eine Zahl gehalten.
    Mit der Zuweisung .NumberFormat = "" wird es wieder als String in der Datum-Langform dargestellt.
    Wenn du das Datum in "TT.MM.JJJJ" erstellen möchtest, gehe folgendermaßen vor (spart die Formatierung):

    [autoit]

    ; Datumswert auslesen
    $read = $oExcel.Activesheet.Range('A1').Value ; in A1 steht ein Datumswert (TT.MM.JJJJ)
    ; $read enthält jetzt den String: "JJJJMMTThhmmss"

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

    ; Zuweisen des Datums in Datumschreibweise TT.MM.JJJJ <== dabei ordnet Excel automatisch das Datumsformat zu
    $oExcel.Activesheet.Range('A4').Value = StringRegExpReplace($read, '(\d{4})(\d{2})(\d{2})(\d{6})', '$3.$2.$1')

    [/autoit]
  • Hallo BugFix,

    Danke dir für die wirklich gute Erklärung :thumbup: , habe ich jetzt auch endlich Verstanden :rolleyes:
    Werde das mal so umsetzen wie du es Vorgeschlagen hast.


    mfg
    oh-ha

    Es gibt drei Wahrheiten: deine Wahrheit, meine Wahrheit und die Wahrheit