Hi autoBert,
genau daran lag das Problem!
habs eben getestet und es funktioniert tadellos...
1000 Dank,
x0rr0x
Hi autoBert,
genau daran lag das Problem!
habs eben getestet und es funktioniert tadellos...
1000 Dank,
x0rr0x
ja, nach stundenlangem rumprobieren an diesem popeligen Ding
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>
#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 ###
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
;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
func doit()
$ofile = _ExcelBookOpen($file)
;excel spalte bearbeiten
for $i = 1 to 1000
$repcell = _ExcelReadCell($ofile,$i+1,1)
$repcell = StringRegExpReplace($repcell,@crlf,'')
$repcell = StringSplit($repcell," ")
if $repcell[0] <> 2 then ExitLoop
_ExcelWriteCell($ofile,$repcell[2] & "_" & $repcell[1],$i+1,1)
Next
;excel spalten löschen
$str = GUICtrlRead($delspalte)
$ary = StringSplit($str,",")
For $i = 1 to $ary[0]
$ary[$i] = Asc($ary[$i]) - 64
_ExcelColumnDelete($ofile,$ary[$i],1)
Next
;excel speichern und schließen
_ExcelBookSave($ofile)
_ExcelBookClose($ofile)
EndFunc
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>
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"
$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
warum auch immer, aber so funktionierts... (das blöde ist nur, spalten in excel können auch z.b. AF heissen ;))
ja, der gleiche fehler wie oben beschrieben...
versuch es jetzt mit diversen möglichkeiten, scheint aber keine einzige zu klappen. so ein mist!
bei mir funktionierts nach wie vor nicht
Gruß
x0rr0x
P.S.: http://www.autoitscript.com/autoit3/docs/f…StringSplit.htm
Es steht sogar in der Hilfe:
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...
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,",")
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]
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:
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>
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"
$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)
;funktioniert nicht
for $i = 1 to $ary[0]
_ExcelColumnDelete($ofile,$ary[$i],1)
;$ofile.ActiveSheet.Columns($ary[$i]).Delete
Next
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:
#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:
;so funktionierts nicht (wäre aber schön, wenn!)
for $i = 1 to UBound($ary)
_ExcelColumnDelete($ofile,$ary[$i],1)
;$ofile.ActiveSheet.Columns($ary[$i]).Delete
Next
hoffe ihr könnt mir helfen!