Hallo liebe Coder,
ich habe ein kleines Problem beim Löschen der (Zwischen-) Zeilen u. wär euch dankbar wenn Ihr mir hier behilflich sein könntet.
Ich habe eine große Excel-Datei mit den Spalten A-J und ca. 100.000 Zeilen.
Nun möchte ich über Autoit alle leeren Zeilen löschen, wobei eine Zeile nur dann leer ist, wenn sich in KEINER der Spalten ein Eintrag befindet, also A:x bis J:x leer sind.
Mein Code funktioniert zwar, allerdings benötigt er für 800 Zeilen ca. 1 Minute, was bei 100.000 Zeilen über 2 Stunden wären.
Die letzte Zeile erkenne ich momentan daran (siehe Code), dass nach dem letzten erkannten Inhalt 5 Leerzeilen folgen (da auch mal 3 Leerzeilen nacheinander vorkommen). Wie könnte man das eleganter lösen? Mein Code basiert auf der Excel UDF bin aber gerade eben darauf aufmerksam geworden, dass man es auch über die Excel Objekte (COM) lösen könnte, nur leider hab ich darin keine Erfahrungen. Weiß jemand wie man das realisieren könnte? Wenn möglich würd ich es gern ohne VBA lösen.
Hier mein (umständlicher) Code. Beim Ausführen müsst ihr nur die $Excel_Pfad_Zieldatei anlegen :
Danke vorab
[autoit][/autoit][autoit][/autoit][autoit]#include <Excel.au3>
[/autoit][autoit][/autoit][autoit]HotKeySet("{ESC}", "Terminate")
Func Terminate()
Exit 0
EndFunc
Global $Spalte_A = "A"
Global $Spalte_B = "B"
Global $Spalte_C = "C"
Global $Spalte_D = "D"
Global $Spalte_E = "E"
Global $Spalte_F = "F"
Global $Spalte_G = "G"
Global $Spalte_H = "H"
Global $Spalte_I = "I"
Global $Spalte_J = "J"
Global $Startzeile = 2
Global $Excel_Pfad_Zieldatei = @ScriptDir & "\Extras\_Excel1.xlsx"
Global $Sleep_nach_While = 100
; Excel-Zieldatei öffnen
$oExcel = _Excel_Open()
$oZieldatei = _Excel_BookOpen($oExcel, $Excel_Pfad_Zieldatei)
; Leerzeilen löschen
While 1
Sleep($Sleep_nach_While)
ToolTip("Leere Zeilen werden gelöscht. Aktueller Fortschritt: Zeile "&$Startzeile)
Local $Inhalt_A=_Excel_RangeRead($oZieldatei, Default, $Spalte_A&$Startzeile)
If $Inhalt_A="" Then
Local $Inhalt_B=_Excel_RangeRead($oZieldatei, Default, $Spalte_B&$Startzeile)
If $Inhalt_B="" Then
Local $Inhalt_C=_Excel_RangeRead($oZieldatei, Default, $Spalte_C&$Startzeile)
If $Inhalt_C="" Then
Local $Inhalt_D=_Excel_RangeRead($oZieldatei, Default, $Spalte_D&$Startzeile)
If $Inhalt_D="" Then
Local $Inhalt_E=_Excel_RangeRead($oZieldatei, Default, $Spalte_E&$Startzeile)
If $Inhalt_E="" Then
Local $Inhalt_F=_Excel_RangeRead($oZieldatei, Default, $Spalte_F&$Startzeile)
If $Inhalt_F="" Then
Local $Inhalt_G=_Excel_RangeRead($oZieldatei, Default, $Spalte_G&$Startzeile)
If $Inhalt_G="" Then
Local $Inhalt_H=_Excel_RangeRead($oZieldatei, Default, $Spalte_H&$Startzeile)
If $Inhalt_H="" Then
Local $Inhalt_I=_Excel_RangeRead($oZieldatei, Default, $Spalte_I&$Startzeile)
If $Inhalt_I="" Then
Local $Inhalt_J=_Excel_RangeRead($oZieldatei, Default, $Spalte_J&$Startzeile)
If $Inhalt_J="" Then
For $i = 1 To 5 Step 1
[/autoit][autoit][/autoit][autoit]If $i = 5 Then ExitLoop 2
[/autoit][autoit][/autoit][autoit]Local $Inhalt_A_darunter = _Excel_RangeRead($oZieldatei, Default, $Spalte_A&$Startzeile + $i)
If $Inhalt_A_darunter<>"" Then ExitLoop
Local $Inhalt_B_darunter = _Excel_RangeRead($oZieldatei, Default, $Spalte_B&$Startzeile + $i)
If $Inhalt_B_darunter<>"" Then ExitLoop
Local $Inhalt_C_darunter = _Excel_RangeRead($oZieldatei, Default, $Spalte_C&$Startzeile + $i)
If $Inhalt_C_darunter<>"" Then ExitLoop
Local $Inhalt_D_darunter = _Excel_RangeRead($oZieldatei, Default, $Spalte_D&$Startzeile + $i)
If $Inhalt_D_darunter<>"" Then ExitLoop
Local $Inhalt_E_darunter = _Excel_RangeRead($oZieldatei, Default, $Spalte_E&$Startzeile + $i)
If $Inhalt_E_darunter<>"" Then ExitLoop
Local $Inhalt_F_darunter = _Excel_RangeRead($oZieldatei, Default, $Spalte_F&$Startzeile + $i)
If $Inhalt_F_darunter<>"" Then ExitLoop
Local $Inhalt_G_darunter = _Excel_RangeRead($oZieldatei, Default, $Spalte_G&$Startzeile + $i)
If $Inhalt_G_darunter<>"" Then ExitLoop
Local $Inhalt_H_darunter = _Excel_RangeRead($oZieldatei, Default, $Spalte_H&$Startzeile + $i)
If $Inhalt_H_darunter<>"" Then ExitLoop
Local $Inhalt_I_darunter = _Excel_RangeRead($oZieldatei, Default, $Spalte_I&$Startzeile + $i)
If $Inhalt_I_darunter<>"" Then ExitLoop
Local $Inhalt_J_darunter = _Excel_RangeRead($oZieldatei, Default, $Spalte_J&$Startzeile + $i)
If $Inhalt_J_darunter<>"" Then ExitLoop
Next
_Excel_RangeDelete($oZieldatei.Worksheets(1), $Startzeile&":"&$Startzeile)
If @error Then MsgBox(0, "Fehler", "Fehler beim Löschen!")
ContinueLoop
EndIf
EndIf
EndIf
EndIf
EndIf
EndIf
EndIf
EndIf
EndIf
EndIf
$Startzeile = $Startzeile + 1
[/autoit][autoit][/autoit][autoit]WEnd
[/autoit][autoit][/autoit][autoit][/autoit][autoit][/autoit]