blueeyephoenix
Goto Top

Powershell excel Zeilen entfernen

Hallo Commuity,

ich hab da mal ein Problem bei dem ich nicht weiterkomme.

Ich habe eine Excelliste mit ca 20 zeilen und bearbeite diese über Powershell. Dabei lass ich mir über :

$sheet.cells.item(2,19) ="=Sum(R:R)-Sum(R1)"

eine Summe ausgeben und möchte, dass die Tabelle gelöscht wird wenn diese Summe unter 200 ist.
Dafür habe ich folgendes:

$maxRows = $sheet.UsedRange.Rows.Count
for ($i = $maxRows; $i -ge 1; $i--) {
if ($sheet.Cells.Item(2, 19).Text -lt "200" ) {
$Range = $sheet.Rows.Item($i)
$Range.Delete()
}}

wenn R2 unter 200 ist wird die Tabelle gelöscht wie gewollt. Aber wenn die Tabelle über 200 ist soll er nichts löschen, es werden aber immer ca 10 zeilen trotzdem entfernt.

Kann mir jemand weiterhelfen?

Vielen Dank

Content-ID: 551804

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

Ausgedruckt am: 20.11.2024 um 02:11 Uhr

143127
143127 26.02.2020 aktualisiert um 12:23:50 Uhr
Goto Top
.Text -lt "200"
Naja, wenn ich Birnen mit Bananen vergleiche wundert das nicht 🙃.
.Value2 -lt 200

Du vergleichst hier zwei Strings mit einem numerischen Vergleichsoperator (-lt), dat klappt ned.
erikro
erikro 26.02.2020 um 12:25:28 Uhr
Goto Top
Moin

Zitat von @143127:

.Text -lt "200"
Naja, wenn ich Birnen mit Bananen vergleiche wundert das nicht 🙃.
> .Value2 -lt 200
> 

Du vergleichst hier zwei Strings mit einem numerischen Vergleichsoperator (-lt), dat klappt ned.

Doch, das klappt wunderbar und deshalb werden ja auch zehn Zeilen gelöscht. Man muss nur wissen, wie das funktioniert:

1000 -lt 200 => $false
"1000" -lt "200" => $true  

Liebe Grüße

Erik
143127
143127 26.02.2020 aktualisiert um 13:56:47 Uhr
Goto Top
1000" -lt "200" => $true
Schon klar, ist aber eben kein "numerischer" Vergleich mehr sondern ein Vergleich der Strings nach der jeweiligen Locale Konvention, mehr wollte ich damit nicht ausdrücken.
1000 ist ja auch nicht kleiner als 200, bringt somit ein falsches Ergebnis..
colinardo
Lösung colinardo 26.02.2020 aktualisiert um 17:08:50 Uhr
Goto Top
Servus
if($sheet.Range("R2").Value() -lt 200){   
    write-host "Less than 200, removing table." -F Green  
    $sheet.UsedRange.Offset(2,0).EntireRow.Delete()
}
Grüße Uwe
colinardo
colinardo 06.03.2020 um 16:00:50 Uhr
Goto Top
An den TO:
Wenns das dann war, den Beitrag bitte noch auf gelöst setzen, und Lösungen markieren. Merci.