springstil
Goto Top

Powershell die ersten Zeilen in CSV löschen

Hallo zusammen,


ich bekomme vom Kunden eine xlsx datei, diese wandel ich mit Folgendem Code in eine CSV um:

$excelwb = New-Object -ComObject excel.application
$workbook = $excelwb.Workbooks.Open($sourceFile)
$workbook.SaveAs($targetFile,6)
$workbook.Close($false)
$ExcelWB.quit()

Das klappt auch soweit gut, nur habe ich im Anschluss Probleme die CSV zu bearbeiten. Zumindest anständig face-smile

Die CSV sieht im anschluss etwa so aus:
XXXX Handels GmbH & Co. KG;;;;Zahlungsavis;;
BLABLA;;;;Beleg / Datum;;
BLABLA;;;;XXX / 30.11.2022;;
XXXX;;;;Ihr Konto bei uns;;
;;;;XXXXX;;
;;;;;;
XXXXX;;;;;;
XXXXX;;;;;;
51147 KÖLN;;;;;;
Deutschland;;;;;;
XXXXX;;;;;;
;;;;;;
Sehr geehrte Damen und Herren,;;;;;;
mit der Zahlung vom 30.11.2022 wurden folgende Rechnungen bezahlt:;;;;;;
;;;;;;
ReNr.;-;Re-Datum;Re-Betrag;Skonto%;Skonto;Betrag EUR  
XXXXX;ER;05.10.2022;132.95 ;14.740 ;19.60 ;113.35 
XXXXX;ER;05.10.2022;505.84 ;14.740 ;74.57 ;431.27 
XXXXX;ER;05.10.2022;190.39 ;14.740 ;28.05 ;162.34 
;;;;;;
Gesamt-Summe;;;829.18 ;;122.22 ;706.96 
;;;;;;
;;;;;;
Zahlungsbeleg;;;Datum;Währung;Zahl-Betrag;
XXXXX;;;30.11.2022;EUR;706.96 ;

Allerdings möchte ich den Rest rauslöschen und quasi mit "ReNr.;-;Re-Datum;Re-Betrag;Skonto%;Skonto;Betrag EUR " beginnen. Alles was nach der Gesamt summe kommt muss auch raus. Ich komme hier leider nicht weiter ohne einfach ständig einen Replace zu nutzen. Und das möchte ich eben verhindern und es auch mal anständig hin bekommen.

In einem anderen Skript löse ich sowas in der Art mit Skip, allerdings bleibt dann auch immer der Header stehen... Wäre über jede Hilfe dankbar face-smile

Content-ID: 4968997755

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

Ausgedruckt am: 24.11.2024 um 10:11 Uhr

4863114660
4863114660 15.12.2022 aktualisiert um 10:41:09 Uhr
Goto Top
https://tio.run/##dVLbbtswDH3PV/ChW9qiYS1f4jjC0C5rkQwp@uBgW7FLASfh7GCWPc ...

$inhalt = Get-Content "d:\datei.csv" -Raw  
[regex]::match($inhalt,'(?ism)^ReNr\..*^Gesamt-Summe.*?$').Value | set-content "d:\datei_neu.csv"  
Gruß s.
Springstil
Springstil 15.12.2022 um 14:26:37 Uhr
Goto Top
Sehr geil Danke ich hab wohl einfach zu kompliziert gedacht. Bekomme ich allerdings auch hin das er -1 eine spalte entfernt, damit die spalte mit der gesamt summe auch entfernt wird?
4863114660
4863114660 15.12.2022 aktualisiert um 14:44:57 Uhr
Goto Top
Zitat von @Springstil:

Sehr geil Danke ich hab wohl einfach zu kompliziert gedacht. Bekomme ich allerdings auch hin das er -1 eine spalte entfernt, damit die spalte mit der gesamt summe auch entfernt wird?

Du meinst das "Gesamt-Summe" am Anfang weg?, joa, replace es einfach mit nichts
$inhalt = Get-Content "d:\datei.csv" -Raw  
[regex]::match($inhalt,'(?ism)^ReNr\..*^Gesamt-Summe.*?$').Value -replace '(?im)^Gesamt-Summe' | set-content "d:\datei_neu.csv"  
Springstil
Springstil 15.12.2022 um 14:41:42 Uhr
Goto Top
Zitat von @4863114660:

Zitat von @Springstil:

Sehr geil Danke ich hab wohl einfach zu kompliziert gedacht. Bekomme ich allerdings auch hin das er -1 eine spalte entfernt, damit die spalte mit der gesamt summe auch entfernt wird?

Du meinst das "Gesamt-Summe" am Anfang weg?, joa, replace es einfach mit nichts
$inhalt = Get-Content "d:\datei.csv" -Raw  
[regex]::match($inhalt,'(?ism)^ReNr\..*^Gesamt-Summe.*?$').Value -replace '(?im)^Gesamt-Summe' | set-content "d:\datei_neu.csv"  
Gruß s.

Genau die soll weg, allerdings komplett und nicht nur das wort. Also die gesamte Zeile. Allerdings ändern sich die Daten hinten immer wieder
4863114660
Lösung 4863114660 15.12.2022 aktualisiert um 14:46:46 Uhr
Goto Top
Zitat von @Springstil:


Genau die soll weg, allerdings komplett und nicht nur das wort. Also die gesamte Zeile. Allerdings ändern sich die Daten hinten immer wieder
Dann musst du das auch schreiben du hast oben nämlich "Spalte" statt "Zeile" geschrieben und das sind zwei paar Schuhe ...!
In dem Fall dann so.
$inhalt = Get-Content "d:\datei.csv" -Raw  
[regex]::match($inhalt,'(?ism)^ReNr\..*(?=^Gesamt-Summe.*?$)').Value | set-content "d:\datei_neu.csv"  
Ende Wunschkonzert from my side.
Springstil
Springstil 15.12.2022 um 14:48:13 Uhr
Goto Top
Zitat von @4863114660:

Zitat von @Springstil:


Genau die soll weg, allerdings komplett und nicht nur das wort. Also die gesamte Zeile. Allerdings ändern sich die Daten hinten immer wieder
Dann musst du das auch schreiben du hast oben nämlich "Spalte" statt "Zeile" geschrieben und das sind zwei paar Schuhe ...!
In dem Fall dann so.
$inhalt = Get-Content "d:\datei.csv" -Raw  
[regex]::match($inhalt,'(?ism)^ReNr\..*(?=^Gesamt-Summe.*?$)').Value | set-content "d:\datei_neu.csv"  
Ende Wunschkonzert from my side.

Entschuldige face-smile Vielen dank klappt wunderbar!