Excel, öffnen einer csv Datei mit autoit

  • moin moin,


    Kann man den Text-Assistenten von Excel so steuern über Autoit das er eine *.csv Datei richtig öffnet ?
    Hier mal das Aufgezeichnete Makro ohne die Arrays:

    Code
    ChDir "C:\"
        Workbooks.OpenText FileName:="C:\1.xls", Origin:=xlWindows, _
            StartRow:=1, DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, _
            ConsecutiveDelimiter:=False, Tab:=True, Semicolon:=True, Comma:=False, _
            Space:=False, Other:=False


    Dann daraus das gemacht, ist nicht von mir sondern aus einem englischen Forum, nur das dem da leider nicht weitergeholfen wurde.

    Spoiler anzeigen
    [autoit]


    Dim $oExcel
    $oExcel = ObjCreate("Excel.Application")
    $oExcel.Visible = 1
    $oExcel.Workbooks.OpenText("C:\1.csv", _
    1, _ ; Origin
    1, _ ; StartRow
    1, _ ; DataType = x1Delimited
    1, _ ; TextQualifier = x1DoubleQuote
    False, _ ; ConsecutiveDelimiter
    True, _ ; Tab
    True, _ ; Semicolon
    False, _ ; Comma
    False, _ ; Space
    False, _ ; Other
    )
    _ExcelBookSaveAs($oExcel, "C:\Test.xls", "xls", 0, 1, "", "")

    [/autoit]


    Nur geht das so nicht.

    Komme da einfach nicht weiter.


    mfg
    oh-ha

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

    • Offizieller Beitrag

    Kann man den Text-Assistenten von Excel so steuern über Autoit das er eine *.csv Datei richtig öffnet ?


    Ich verstehe deine Frage nicht. Wenn du eine *.csv hast, wird diese mit dem normalen ..WorkBooks.Open in Excel geöffnet und läßt sich als *.xls abspeichern. Es bedarf dabei keiner zusätzlicher Einstellungen.
    Dein gezeigtes Makro bezieht sich auch auf kein CSV - du öffnest dort eine XLS und diese im falschen Format ( .OpenText) .

  • Moin BugFix,

    Diese *.xls Datei ist eigentlich eine *.csv Datei mit " ; " als Trennzeichen. Ist wohl ein Fehler in der Software die diese Tabelle ausgibt.
    Ich benenne die *.xls beim kopieren in eine *.csv Datei um nur habe ich vergessen das mitzuposten. SORRY

    Edit:
    Wenn ich die Tabelle so öffne zeigt Excel sie mir mit den Trennzeichen an nur wenn ich sie über den Text-Assistenten öffne wird sie mir
    richtig angezeigt.


    mfg
    oh-ha

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

  • Geht bei mir auch mit deinem Muster.
    Wird das wohl an der csv Datei liegen.
    Was mich nur wundert ist das man sie problemlos über den Text-Assistenten von Excel öffnen kann.
    Nur mit dem Code geht es halt nicht.

    mfg
    oh-ha

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

    • Offizieller Beitrag

    Was mich nur wundert ist das man sie problemlos über den Text-Assistenten von Excel öffnen kann.
    Nur mit dem Code geht es halt nicht.


    Mögliches Problem:
    Nicht jede Zeile enthält dieselbe Anzahl an Feldtrennern. Einige (faule) Programmierer geben nur die Zeile bis zum letzten belegten Feld aus, das nimmt dir Excel dann sicher beim Import übel. Jede Zeile muß auch wenn nicht alle Datenfelder besetzt sind, die Felder dafür bereit halten.

    Code
    Bsp.:
    ORT;NAME;BERUF;TELEFON;FAX
    A-ort;Meier;;;    <==Richtig
    B-ort;Müller      <==Falsch
  • Das kann durchaus sein in der ersten Zelle " A1 " sind alle Überschriften drin was bei den anderen Tabellen die von dem Programm erstellt
    werden nicht der Fall ist. Das ärgerliche ist halt nur das man Excel über Autoit nicht beibringen kann diese so aufzumachen das man etwas damit anfangen kann.
    Über Excel selber stellt dies ja kein Problem dar, nur kann man das dann halt nicht automatisieren.
    Naja muss ich mich halt mit abfinden das ich diese Tabellen nicht bearbeiten kann. Kann ja sein das die mal ein Update rausringen der diesen
    Bug behebt.
    Danke dir für die mühen.

    Edit: soll man das jetzt auf gelöst stellen oder nicht grübel grübel.

    mfg
    oh-ha

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

  • Ich verstehe das Problem nicht?!
    Du hast eine CSV-Datei, die von Excel ohne Probleme geöffnet wird, wenn die von BugFix beschriebenen Feldtrenner eingefügt sind.
    Wieso fügst du die fehlenden Feldtrenner nicht per AutoIt in die CSV ein bzw machst die CSV Excel-tauglich?
    Sollten doch nur eine Handvoll Zeilen Code sein....

  • Hallo Andy,

    darüber hatte ich auch schon nachgedacht aber in der ersten Zelle können über 100 Einträge sein mal mehr oder weniger und das auch noch variabel .
    Da habe ich diesen Gedanken mal schnell wieder fallen lassen.
    Das Problem, wie BugFix wohl richtig festgestellt hat, liegt darin das die *.xls die ich umbenenne in eine *.csv wohl nicht das richtige Format hat.
    Wenn ich die Datei über Excel öffne Arbeitsmappe öffnen >> 1.xls macht sich der Text-Assistent auf. Wenn ich da auf Trennzeichen " Semikolon " gehe und auf>> Weiter macht Excel ja die Tabelle richtig auf. Nur halt nicht mit den Code aus Post1 der das ja eigentlich simulieren sollte.


    mfg
    oh-ha

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

  • Hallo oh-ha,

    Wieso fügst du die fehlenden Feldtrenner nicht per AutoIt in die CSV ein bzw machst die CSV Excel-tauglich?
    Sollten doch nur eine Handvoll Zeilen Code sein....

    bist du so bequem oder was hindert dich daran die paar Zeilen Code zu schreiben?

    [autoit]

    #include <File.au3>
    #include <array.au3>
    #Include <String.au3>

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

    $aLines = ""
    $sSep =";"
    _FileReadToArray(@ScriptDir & "\CSVwrong.csv",$aLines)
    _ArrayDelete($aLines,0) ;1. Zeile (=ANzahl der eigelesenen Zeilen) löschen
    _ArrayDisplay($aLines,"Falsches Format")
    $iSepCount = StringInStr($aLines[0],$sSep)
    For $i = 1 To UBound($aLines) -1
    $sLine = $aLines[$i]
    StringReplace($sLine,$sSep,"")
    $iDif = $iSepCount - @extended
    if $iDif >0 Then $aLines[$i] &= $aLines[$i] & _StringRepeat($sSep,$iDif)
    Next
    _ArrayDisplay($aLines,"richtiges Format")
    _FileWriteFromArray(@ScriptDir & "\CSVcorrect.csv",$aLines)

    [/autoit]

    mfg autoBert

  • Sorry,

    das ich mich erst jetzt Melde. Musste für ein paar Tage ins Ausland und da gab es kein Internet.

    autoBert
    Hat mit Bequemlichkeit wohl weniger zu tun als mehr mit Unwissenheit. Da ich nicht wusste wie ich so etwas umsetzen sollte.
    Aber da hast du mir ja eine Steilvorlage gegeben. Werde das mal Testen und dann berichten ob es so geht.

    sc4ry
    Verstehe den Ansatz noch nicht so ganz aber werde auch das mal probieren.

    Danke euch beiden und nichts für Ungut das ich erst jetzt darauf Antworte aber Beruf geht nun mal vor.


    mfg
    oh-ha

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