1. Dashboard
  2. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team
    4. Mitgliedersuche
  3. Forenregeln
  4. Forum
    1. Unerledigte Themen
  • Anmelden
  • Registrieren
  • Suche
Alles
  • Alles
  • Artikel
  • Seiten
  • Forum
  • Erweiterte Suche
  1. AutoIt.de - Das deutschsprachige Forum.
  2. Mitglieder
  3. x0rr0x

Beiträge von x0rr0x

  • Excel - Spalten löschen mit For-Next-Schleife

    • x0rr0x
    • 12. Oktober 2011 um 22:35

    Hi autoBert,

    genau daran lag das Problem! :D

    habs eben getestet und es funktioniert tadellos...

    1000 Dank,

    x0rr0x

  • Excel - Spalten löschen mit For-Next-Schleife

    • x0rr0x
    • 12. Oktober 2011 um 15:20

    ja, nach stundenlangem rumprobieren an diesem popeligen Ding :D

    Falls es jemanden interessiert, das Programm sollte ursprünglich die erste Spalte einer Excelliste auslesen und den Inhalt ersetzen von "Nachname Vorname" in "Vorname_Nachname" (funktionierte auf Anhieb!).
    Als nächstes eben individuelle Spalten löschen (hätte ich die Musterliste gehabt, wär das kein Problem gewesen, hätte ich einfach die entsprechenden Zahlen einfügen können).

    Hier der Code (ist nicht perfekt, tut aber seinen Sinn und Zweck, also bitte keine Verbesserungsvorschläge :)):

    [autoit]

    #AutoIt3Wrapper_UseX64=no
    #include <excel.au3>
    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>

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

    #Region ### START Koda GUI section ### Form=
    $Excel = GUICreate("Excel Editierer", 533, 100, 189, 110)
    $choose = GUICtrlCreateInput("Öffnen klicken --------------------------------------------------------------------->", 104, 8, 329, 21)
    $Label1 = GUICtrlCreateLabel("Excel auswählen:", 16, 16, 87, 17)
    $delspalte = GUICtrlCreateInput("F,E,C", 104, 48, 249, 21)
    $Label2 = GUICtrlCreateLabel("Spalten löschen:", 16, 56, 83, 17)
    $search = GUICtrlCreateButton("Öffnen", 440, 8, 75, 25, $WS_GROUP)
    $doit = GUICtrlCreateButton("Ausführen", 360, 48, 75, 25, $WS_GROUP)
    GUICtrlSetState($doit,$GUI_DISABLE)
    $exit = GUICtrlCreateButton("Beenden", 440, 48, 75, 25, $WS_GROUP)
    $Label3 = GUICtrlCreateLabel("(Buchstaben von rechts nach links)", 16, 72, 171, 17)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    dim $file, $ofile, $repcell, $str, $ary

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $search
    excelchoose()
    Case $doit
    doit()
    Case $exit
    Exit
    Case $GUI_EVENT_CLOSE
    Exit
    EndSwitch
    WEnd

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

    ;excel auswählen
    func excelchoose()
    $file = FileOpenDialog("Excel auswählen",@ScriptDir,"Excel Dateien (*.xls*)", 1 + 4)
    GUICtrlSetData($choose,$file)
    if StringLen($file) > 1 then GUICtrlSetState($doit,$GUI_ENABLE)
    EndFunc

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

    func doit()
    $ofile = _ExcelBookOpen($file)

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

    ;excel spalte bearbeiten
    for $i = 1 to 1000
    $repcell = _ExcelReadCell($ofile,$i+1,1)
    $repcell = StringRegExpReplace($repcell,@crlf,'')
    $repcell = StringSplit($repcell," ")

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

    if $repcell[0] <> 2 then ExitLoop
    _ExcelWriteCell($ofile,$repcell[2] & "_" & $repcell[1],$i+1,1)
    Next

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

    ;excel spalten löschen
    $str = GUICtrlRead($delspalte)
    $ary = StringSplit($str,",")

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

    For $i = 1 to $ary[0]
    $ary[$i] = Asc($ary[$i]) - 64
    _ExcelColumnDelete($ofile,$ary[$i],1)
    Next

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

    ;excel speichern und schließen
    _ExcelBookSave($ofile)
    _ExcelBookClose($ofile)
    EndFunc

    [/autoit]
  • Excel - Spalten löschen mit For-Next-Schleife

    • x0rr0x
    • 12. Oktober 2011 um 14:36

    hab jetz bissl rumprobiert, hab eine funktionierende lösung gefunden, allerdings ist diese extrem suboptimal für meine zwecke ;)

    [autoit]

    #AutoIt3Wrapper_UseX64=no
    #include <excel.au3>

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

    dim $file, $ofile, $str, $ary, $cnt

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

    $file = "C:\Users\x0r\Desktop\AutoIT_Excel\excel1.xlsx"
    $ofile = _ExcelBookOpen($file)
    $str = "F,E,C"

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

    $ary = StringSplit($str,",")

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

    For $i = 1 to $ary[0]
    $ary[$i] = Asc($ary[$i]) -64
    _ExcelColumnDelete($ofile,$ary[$i],1)
    Next

    [/autoit]

    warum auch immer, aber so funktionierts... (das blöde ist nur, spalten in excel können auch z.b. AF heissen ;))

  • Excel - Spalten löschen mit For-Next-Schleife

    • x0rr0x
    • 12. Oktober 2011 um 14:22

    ja, der gleiche fehler wie oben beschrieben...

    versuch es jetzt mit diversen möglichkeiten, scheint aber keine einzige zu klappen. so ein mist! :(

  • Excel - Spalten löschen mit For-Next-Schleife

    • x0rr0x
    • 12. Oktober 2011 um 14:17

    bei mir funktionierts nach wie vor nicht :(

    Gruß
    x0rr0x

    P.S.: http://www.autoitscript.com/autoit3/docs/f…StringSplit.htm

  • Excel - Spalten löschen mit For-Next-Schleife

    • x0rr0x
    • 12. Oktober 2011 um 14:01

    Es steht sogar in der Hilfe:

    Code
    Function StringSplit
    Returns an array, by default the first element  ($array[0]) contains the number of strings returned, 
    the remaining elements  ($array[1], $array[2], etc.) contain the delimited strings.
    Zitat


    ...da bei "StringSplit" immer $ary[0] die Gesamtzahl der Arrays beinhaltet und es quasi erst bei "$ary[1]" startet...

  • Excel - Spalten löschen mit For-Next-Schleife

    • x0rr0x
    • 12. Oktober 2011 um 13:57

    Hi,

    hast du das überhaupt mal ausprobiert oder ist das nur so eine Vermutung, wie ein Array tatsächlich funktioniert?

    [autoit]

    ;stringsplit - array

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

    dim $ary = "1,2,3,4,5"
    $ary = stringsplit($ary,",")

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

    MsgBox(0,"",$ary[0] & "_" & $ary[1] & "_" & $ary[2] & "_" & $ary[3] & "_" & $ary[4] & "_" & $ary[5])

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

    ;ergebnis = 5_1_2_3_4_5

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

    Fazit:
    $ary[0] = Gesamtzahl der Arrays
    $ary[5] = Letztes Array in dem Fall (obwohl es das laut dir gar nicht geben dürfte!)

    [Blockierte Grafik: http://i52.tinypic.com/11jaoed.png]

  • Excel - Spalten löschen mit For-Next-Schleife

    • x0rr0x
    • 12. Oktober 2011 um 13:27

    Hi Protex,

    danke für die Antwort, aber:

    [autoit]

    _ExcelColumnDelete($ofile,$i,1)

    [/autoit]


    Kann ich so nicht verwenden, da ich ja direkt den Wert des Arrays ansprechen möchte und nicht nur Zahlen aus $i (1 bis 3) (das würde mir Zeile 1 bis 3 löschen und nicht die gewünschten :))

    Und:

    [autoit]

    for $i = 1 to $ary[0]

    [/autoit]


    Hab ich jetzt drin, müsste funktionieren, da bei "StringSplit" immer $ary[0] die Gesamtzahl der Arrays beinhaltet und es quasi erst bei "$ary[1]" startet (bei mir ist das jedenfalls so :))

    Es kommt allerdings immer der Fehler:

    Code
    C:\Program Files (x86)\AutoIt3\Include\excel.au3 (890) : ==> The requested action with this object has failed.:
    $oExcel.ActiveSheet.Columns($iColumn).Delete
    $oExcel.ActiveSheet.Columns($iColumn)^ ERROR
    ->13:21:36 AutoIT3.exe ended.rc:1

    Drum hatte ich es ja sogar mit dem direkten Befehl versucht, aber ebenso kein Erfolg!

    Hier nochmal der komplette Test-Code:

    [autoit]

    #AutoIt3Wrapper_UseX64=no
    #include <excel.au3>

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

    dim $file, $ofile, $str, $ary

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

    $file = "C:\Users\x0r\Desktop\AutoIT_Excel\excel1.xlsx"
    $ofile = _ExcelBookOpen($file)
    $str = "6,5,3"

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

    $ary = StringSplit($str,",")

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

    ;MsgBox(0,"",$ary[1] & "_" & $ary[2] & "_" & $ary[3])

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

    ;funktioniert
    ;~ _ExcelColumnDelete($ofile,6,1)
    ;~ _ExcelColumnDelete($ofile,5,1)
    ;~ _ExcelColumnDelete($ofile,3,1)

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

    ;funktioniert nicht
    for $i = 1 to $ary[0]
    _ExcelColumnDelete($ofile,$ary[$i],1)
    ;$ofile.ActiveSheet.Columns($ary[$i]).Delete
    Next

    [/autoit]
  • Excel - Spalten löschen mit For-Next-Schleife

    • x0rr0x
    • 12. Oktober 2011 um 01:56

    Hi all,

    bin seit einigen Stunden dran, ein Script zu basteln, mit dem ich bestimmte Spalten in Excel löschen kann (die Zahlen ändern sich nach belieben). Doch jetz komm ich nicht weiter:

    Code bis jetzt:

    Code
    #include <excel.au3>
    
    
    dim $file, $ofile, $str, $ary
    
    
    $file = "C:\Users\x0r\Desktop\AutoIT_Excel\excel1.xlsx"
    $ofile = _ExcelBookOpen($file)
    $str = "6,5,3"
    
    
    $ary = StringSplit($str,",")
    
    
    MsgBox(0,"",$ary[1] & "_" & $ary[2] & "_" & $ary[3])
    Alles anzeigen

    so funktionierts:

    Code
    _ExcelColumnDelete($ofile,6,1)
    _ExcelColumnDelete($ofile,5,1)
    _ExcelColumnDelete($ofile,3,1)

    ;so funktionierts nicht (wäre aber schön, wenn!)

    Code
    for $i = 1 to UBound($ary)
    	_ExcelColumnDelete($ofile,$ary[$i],1)
    	;$ofile.ActiveSheet.Columns($ary[$i]).Delete
    Next

    hoffe ihr könnt mir helfen!

Spenden

Jeder Euro hilft uns, Euch zu helfen.

Download

AutoIt Tutorial
AutoIt Buch
Onlinehilfe
AutoIt Entwickler
  1. Datenschutzerklärung
  2. Impressum
  3. Shoutbox-Archiv
Community-Software: WoltLab Suite™