Exel Daten (.xls / .xlsx) in .txt Daten umwandeln

  • Hi ist es möglich mithilfe von Autoit Exeltabellen zu exportieren und ein txt File damit zu erstellen ? Das Ganze sollte mit ASCII funktionieren da auch Text in den Daten vorhanden ist.

    LG

    Ru642

    Einmal editiert, zuletzt von ru642 (16. Januar 2013 um 13:07)

  • Also Exel ist drauf das ist kein Problem. Was wichtig ist, ist das es automatisch gemacht wird. Nicht das ich jedes mal Exel aufmachen muss und dann auf speichern als txt oder so.

    LG

    Ru642

  • Schon klar...

    Dann bau dir halt was, ne For-Schleife in einer For-Schleife um den gesamten Bereich abzudecken und dann nurnoch zusammenfügen und übertragen :D

    Simon nörgelt, Simon nervt - aber Simon verbessert die Welt. Glaubt er.

    • Offizieller Beitrag

    Noch einfacher sowas

    Spoiler anzeigen
    [autoit]

    #include <Excel.au3>

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

    $sFilePath1 = @ScriptDir & "\arbeitszeit.xls" ;This file should already exist
    $oExcel = _ExcelBookOpen($sFilePath1)

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

    ;Show any errors that might occur when Opening the File
    If @error = 1 Then
    MsgBox(0, "Error!", "Unable to Create the Excel Object")
    Exit
    ElseIf @error = 2 Then
    MsgBox(0, "Error!", "File does not exist - Shame on you!")
    Exit
    EndIf

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

    _ExcelBookSaveAs($oExcel, @TempDir & "\SaveAsExample2", "txt", 0, 1, "ReadOnly") ;Save the File as 'SaveAsExample2.xls"
    If Not @error Then MsgBox(0, "Success", "File was Saved!", 3)
    _ExcelBookClose($oExcel, 1, 0) ;This method will save then Close the file, without any of the normal prompts, regardless of changes

    [/autoit]

    Du kannst es auch im Hintergrund öffnen lassen.

  • Ja scheit so zu funktionieren wie ich es mir erhofft habe. Nun ist nur noch wichtig das ich einfach den Pfad angeben kann sind verschiedene Files. Also das es einfach alle umwandelt die da sind. Und das es im Hintergrund arbeitet.

    Lg

    Ru642

  • Ich würds schon gerne selbst machen aber weiss ned mehr wie das geht :wacko: Muss den Script fürs Geschäft machen. Vielleicht ein anhaltspunkt wie ich ein die Exeltabellen im Hintergrund laufenlassen kann und wie ich beliebig viele daten durch diese automatik umwandeln kann ohne immer den Dateinamen mit pfad eingeben zu müssen.

    Lg

    Ru642

    Einmal editiert, zuletzt von ru642 (9. Januar 2013 um 12:40)

  • Anhaltspunkt:

    Dateien eines bestimmten Typs in $pfad in ein Array schreiben:

    [autoit]

    _FileListToArray($pfad, "*.xls*")

    [/autoit]


    und
    Excel versteckt öffnen:

    [autoit]

    _ExcelBookOpen($excelpfad, 0)

    [/autoit]

    Simon nörgelt, Simon nervt - aber Simon verbessert die Welt. Glaubt er.

  • Sooo das mit dem versteckten öffnen hab ich hingekriegt. Aber die Liste bereitet mir Sorge. Es ist so das ich nicht weiss wie die Dateien heissen und auch nicht wieviele es sind. Das stellt mich vor das Problem wie kann ich eine Liste abrufen die endlos sein kann und wie lässt sich das ganze in den Script einbauen?


    Spoiler anzeigen
    [autoit]

    #include <Excel.au3>
    $pfad = @ScriptDir & "\test.xls" ; da müsste die Liste eingelesen werden
    $oExcel = _ExcelBookOpen($pfad , 0)
    _ExcelBookSaveAs($oExcel, @ScriptDir & "\test", "txt", 0, 1, "ReadOnly") ; Hier müsste der jeweilige richtige Datenname eingefügt werden.
    If @error Then MsgBox(0, "Failed", "Files are not Saved!", 3)
    _ExcelBookClose($oExcel, 1, 0)

    [/autoit]
    • Offizieller Beitrag

    Wie willst du es denn haben? Beschreib es mal mit Worten.
    User wählt Ordner aus, alle Dateien des Ordners mit Endung xls werden umbenannt?
    Rekursiv von dem Ordner?
    Keine Auswahl sondern einfach immer alle xls Files aus dem Ordner in dem die exe liegt?
    Gibt ja viele Möglichkeiten mit GUI oder ohne usw.

  • Also:

    Standard Ordner in dem Exel (xls und xlsx) Daten abgelegt werden. Soll nicht der Script Ort sein.

    und es sollen immer alle Files die in disem Ordner liegen ausgelesen werden und als Text File in einem anderen Ordner gespeichert werden.

    LG Ru642

    • Offizieller Beitrag

    Hier mal quick & dirty erweitert. Damit solltest du weiterkommen.

    Spoiler anzeigen
    [autoit]

    #include <Excel.au3>
    #include <File.au3>
    #include <Array.au3>

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

    Local $folder = FileSelectFolder("Choose a folder.", "")

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

    Local $FileList = _FileListToArray($folder, '*.xls', 1)
    If @error = 1 Then
    MsgBox(0, "", "No Folders Found.")
    Exit
    EndIf
    If @error = 4 Then
    MsgBox(0, "", "No Files Found.")
    Exit
    EndIf
    _ArrayDisplay($FileList, "Dateien die verarbeitet werden!")

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

    For $i = 1 To UBound($FileList) - 1
    $oExcel = _ExcelBookOpen($folder & '\' & $FileList[$i], 0)

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

    ;Show any errors that might occur when Opening the File
    If @error = 1 Then
    MsgBox(0, "Error!", "Unable to Create the Excel Object")
    Exit
    ElseIf @error = 2 Then
    MsgBox(0, "Error!", "File does not exist - Shame on you!")
    Exit
    EndIf

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

    _ExcelBookSaveAs($oExcel, @TempDir & '\' & StringTrimRight($FileList[$i], 4), "txt", 0, 1, "ReadOnly") ;Save the File as 'SaveAsExample2.xls"
    If Not @error Then MsgBox(0, "Success", "File : "& @TempDir & '\' & StringTrimRight($FileList[$i], 4) & '.txt' & " was saved!", 3)
    _ExcelBookClose($oExcel, 1, 0) ;This method will save then Close the file, without any of the normal prompts, regardless of changes
    Next

    [/autoit]
  • Vielen Dank Xenobiologist nur brauche ich die ganze sache 100% automatisch also keinen Ordner auswählen. Sondern einen Standardpfad der immer gleich ist.
    Wichtig ist auch das man nicht bei jedem File das Ok geben muss / warten muss bis es weiter geht (ohne Message Box)


    Edit: Bei xls Daten wir eine Datei mit .txt erstellt. Bei der neuen Exelversion .xlsx wird die Datei ohne .txt erstellt.

    LG Ru642

    Einmal editiert, zuletzt von ru642 (9. Januar 2013 um 14:29)

  • Also hab das ganze so abgespeckt wie ich es brauche:

    Spoiler anzeigen
    [autoit]

    #include <Excel.au3>
    #include <File.au3>
    #include <Array.au3>

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

    Local $folder = @ScriptDir ;test pfad passe ich dann noch an
    Local $FileList = _FileListToArray($folder, '*.xlsx', 1)
    For $i = 1 To UBound($FileList) - 1
    $oExcel = _ExcelBookOpen($folder & '\' & $FileList[$i], 0)
    _ExcelBookSaveAs($oExcel, @ScriptDir & '\' & StringTrimRight($FileList[$i], 4), "txt", 0, 1, "ReadOnly") ; gleiches mit dem Pfad
    _ExcelBookClose($oExcel, 1, 0)
    Next

    [/autoit]

    Problem: Datei wird nicht zu einer .txt sondern nur zu Datei ohne Endung könnte an veraltetem Include von Exel liegen

    LG Ru642

    • Offizieller Beitrag

    Teste mal so

    [autoit]

    #include <Excel.au3>
    #include <File.au3>
    #include <Array.au3>

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

    Global $startfolder = @ScriptDir
    Global $FileList = _FileListToArray($startfolder, '*.xls?', 1)
    If @error = 4 Then MsgBox(0, "", "No Folders Found.")

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

    For $i = 1 To UBound($FileList) - 1
    $oExcel = _ExcelBookOpen($startfolder & '\' & $FileList[$i], 0)
    If @error = 1 Then MsgBox(0, "Error!", "Unable to Create the Excel Object")
    _ExcelBookSaveAs($oExcel, @TempDir & '\' & StringTrimRight($FileList[$i], StringInStr($FileList[$i], '.', Default, -1, 0, 0)), "txt", 0, 1, "ReadOnly")
    If Not @error Then ConsoleWrite("File : " & @TempDir & '\' & StringTrimRight($FileList[$i], 4) & '.txt' & " was saved!" & @LF)
    _ExcelBookClose($oExcel, 1, 0)
    Next

    [/autoit]
  • Du musst im SaveAs auch den Punkt ersetzen.
    Also Zeile 9 lautet dann:

    [autoit]


    _ExcelBookSaveAs($oExcel, @ScriptDir & '\' & StringTrimRight($FileList[$i],5), "txt", 0, 1, "ReadOnly") ; gleiches mit dem Pfad

    [/autoit]


    Schon sollte es funktionieren....