pat.bat
Goto Top

Powershell Excel - Loop durch Array findet nicht alles

Hallo zusammen,

ich habe ein Array mit Spaltennamen die gelöscht werden sollen. Nun löscht er allerdings in meinem Test nur 2 von 3 Spalten die im Array vorkommen. Die Bezeichnung ist sauber. Warum löscht er den Vornamen nicht?

$SpalteLoeschen = 'Nachname','Vorname','If-Nr.'  

$MaxAnzSpalten = $xls.UsedRange.Columns.Count

For($i=1; $i -lt $MaxAnzSpalten; $i++)
{
    if($xls.Cells.Item(1,$i).Text -in $SpalteLoeschen)
        {[void]$xls.Cells.Item(1,$i).EntireColumn.Delete()}
}

Nachname und lf-Nr. werden gelöscht aber der Vorname nicht. Es gibt auch keine Leerzeichen hinter oder vor der Bezeichnung.

Content-ID: 621117

Url: https://administrator.de/contentid/621117

Ausgedruckt am: 05.11.2024 um 17:11 Uhr

Pat.bat
Pat.bat 10.11.2020 um 14:05:44 Uhr
Goto Top
OK Logikfehler,

man muss von hinten anfangen zu löschen:

# Spalten löschen die nicht benöptigt werden
#Anzahl Gesamtspalten herausfinden
$count = $xls.UsedRange.Columns.Count
$count..1|ForEach-Object{
    if($xls.Cells.Item(1,$_).Text -notin $SpaltenBehalten)
        {[void]$xls.Cells.Item(1,$_).EntireColumn.Delete()}
    }

damit funktioniert es wie ne 1
146189
Lösung 146189 10.11.2020 aktualisiert um 14:28:49 Uhr
Goto Top
Weil du die Spalte ja zwischen drin löschst und dann stimmt für alle folgenden Spalten der Index nicht mehr, macht's jetzt bei dir klick face-wink?!
Ein Einzeiler...
$xls.UsedRange.Columns | ?{$_.Cells[1].Text -notin $SpaltenBehalten} | sort Column -Descending | %{$_.Delete()}

EDIT: Hat wohl Klick gemacht face-smile.
Pat.bat
Pat.bat 10.11.2020 um 14:06:55 Uhr
Goto Top
Hat es schon :D Man hats richtig hören können ;)