blueeyephoenix
Goto Top

Powershell zeile ohne inhalt löschen

Hallo Community,


ich versuche über PowerShell eine Excelliste zu bearbeiten. Diese wird als xlsx geöffnet soll bearbeitet werden und danach gespeichert werden.


soweit ganz gut, dass bekomme ich auch alles soweit hin, bis auf
$xlCSV = 6 
$Excel = New-Object -Com Excel.Application  
$Excel.visible = $true 
$Excel.displayalerts=$False  
$WorkBook = $Excel.Workbooks.Open("Datei")    
$sheet = $WorkBook.WorkSheets(1)
$Sheet.Cells.Item(1,5).Value2 = "Feld1"  
$range1 = $sheet.Range("E2:E200")  
$range1.Formula = "=IF(D2=""teil"",""n"",if(D2=""teil2"",""n"",if(D2=""teil3"",""n"",if(D2=""teil4"",""n"",""""))))"  



nun möchte ich noch alle Zeilen die im Feld E2:E200 ohne "n" sind, quasi leer bleiben, gelöscht werden. Leider bekomme ich da nicht die Richtige Lösung.

zudem habe ich noch ein zweites Problem.

ich versuche noch in einem zweiten Part eine Kalender Woche in ein datum umzuwandeln dabei bekomme ich zahelen wie 43407 ausgegeben wenn ich diese in excel als Datum umwandle bekomme ich alles korrekt aus gegeben wenn ich es über PowerShell

$range2 = $sheet.Range("F2:F200").NumberFormat = "TT.mm.JJJJ"  



gibt er den Code immer mit datum 25.00.2018 aus. Also der Monat wird immer auf Null gesetzt.


Hilfestellung wäre sehr nett da ich im Netz nichts passendes gefunden habe.


Vielen Dank

Content-ID: 387051

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

Ausgedruckt am: 20.11.2024 um 02:11 Uhr

erikro
Lösung erikro 20.09.2018 um 14:24:38 Uhr
Goto Top
Moin,

allgemein, wenn Du viel mit PS und Excel machen willst, dann google mal nach ExcelImport Powershell. Das Modul ist genial. Damit arbeite ich nur noch, wenn es um Excel geht.

Zur zweiten Frage:

m - Minuten
M - Monat

TT.mm.JJJJ heißt also: Tag zweistellig, Minuten zweistellig, Jahr vierstellig. Schreibe die beiden Ms groß und dann passt das.

Liebe Grüße

Erik
Nebellicht
Nebellicht 20.09.2018 aktualisiert um 14:25:30 Uhr
Goto Top
Hi, guck' mal ggf. hilft Dir das etwas weiter ? (kl. Workaround)

for ($i = 1; $i -ile 200; $i += 1) {
$h=$Excel.cells.item($i,1).text

    switch -Regex ($h) {  
      "[n]" { $Excel.cells.item($i,1)="";;}  
    }
}

$range2 = $sheet.Range("F2:F200").NumberFormat = "tt.MM.jjjj"  
BlueEyePhoenix
BlueEyePhoenix 20.09.2018 um 16:27:26 Uhr
Goto Top
Danke hat soweit funktioniert.

jetzt hänge ich nur noch daran die Zeilen (rows) zu löschen.

Irgendwie komme ich nicht an die passende delete Funktion für PowerShell die es mir ermöglicht alle betroffenen Felder zu löschen..

versucht habe ich das:
$maxRows = $sheet.UsedRange.Rows.Count
for ($i = $maxRows; $i -ge 5; $i--) {
    if ($sheet.Cells.Item($i, 1).Text -eq "") {  
        $Range = $sheet.Rows.Item($i).Delete()
    }
}
aber irgendwie passiert nichts
colinardo
Lösung colinardo 21.09.2018 aktualisiert um 12:03:49 Uhr
Goto Top
Servus.
jetzt hänge ich nur noch daran die Zeilen (rows) zu löschen.jetzt hänge ich nur noch daran die Zeilen (rows) zu löschen.
Das ist schnell gemacht und es braucht auch keine Extra Formel dafür, indem man die Begriffe simplerweise direkt in Powershell vergleicht:
($ws.Range("D2:D200") | ?{$_.Value() -notmatch '^(teil1|teil2|teil3|teil4)$'}) | %{$_.EntireRow.Delete() | out-null}  
Grüße Uwe