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-Key: 621117

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

Printed on: April 26, 2024 at 14:04 o'clock

Member: Pat.bat
Pat.bat Nov 10, 2020 at 13:05:44 (UTC)
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
Mitglied: 146189
Solution 146189 Nov 10, 2020 updated at 13:28:49 (UTC)
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.
Member: Pat.bat
Pat.bat Nov 10, 2020 at 13:06:55 (UTC)
Goto Top
Hat es schon :D Man hats richtig hören können ;)