Mit Powershell Excel auslesen und in CSV schreiben
Hallo zusammen,
ich komme leider absolut nicht weiter daher brauche ich bitte hilfe.
Wir bekommen eine Excel liste geschickt, in der steht ab Zeile 14 der Name usw.
Ab Zeile 31 steht die Bestellung drin, hieraus brauche ich allerdings nur die Infos aus C und I, natürlich kann es vorkommen das es mehre Artikel sind, also müsste geprüft werden wie oft ab Zeile 31 gefüllt ist und dem entsprechend oft ausgelesen werden.
Die CSV soll dann so ausziehen:
Name;Straße;PLZ;Ort;Land;Artikel;Menge
Ohne Worte;Musterstraße 14;51147;Köln;Deutschland;141648;1
Ohne Worte;Musterstraße 14;51147;Köln;Deutschland;11984;6
Ich kriege es aber einfach nicht hin die Spalten richtig auszulesen. Daher hoffe ich hier auf hilfe An bei einmal der Screenshot wie die Datei aussieht
ich komme leider absolut nicht weiter daher brauche ich bitte hilfe.
Wir bekommen eine Excel liste geschickt, in der steht ab Zeile 14 der Name usw.
Ab Zeile 31 steht die Bestellung drin, hieraus brauche ich allerdings nur die Infos aus C und I, natürlich kann es vorkommen das es mehre Artikel sind, also müsste geprüft werden wie oft ab Zeile 31 gefüllt ist und dem entsprechend oft ausgelesen werden.
Die CSV soll dann so ausziehen:
Name;Straße;PLZ;Ort;Land;Artikel;Menge
Ohne Worte;Musterstraße 14;51147;Köln;Deutschland;141648;1
Ohne Worte;Musterstraße 14;51147;Köln;Deutschland;11984;6
Ich kriege es aber einfach nicht hin die Spalten richtig auszulesen. Daher hoffe ich hier auf hilfe An bei einmal der Screenshot wie die Datei aussieht
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 83740261362
Url: https://administrator.de/contentid/83740261362
Ausgedruckt am: 21.11.2024 um 19:11 Uhr
3 Kommentare
Neuester Kommentar
Hi.
Gruß Katrin
Add-Type -A Microsoft.Office.Interop.Excel
# Quelldatei
$excelfile = 'C:\temp\orders.xlsx'
# Zieldatei
$csvfile = 'C:\temp\orders.csv'
# -----
# Excel öffnen
$objExcel = New-Object -Com Excel.Application -Property @{
# unsichtbar starten
Visible = $false
# Dialoge unterdrücken
DisplayAlerts = $false
}
# Workbook öffnen
$wb = $objExcel.Workbooks.Open($excelfile)
# Erstes Worksheet auswählen
$ws = $wb.Sheets.Item(1)
# Gemeinsame Werte auslesen
$name = $ws.Range("B14:B15").Value() -join ' '
$street = $ws.Range("B19").Value()
$postalcode = $ws.Range("B20").Value()
$city = $ws.Range("B21").Value()
$country = $ws.Range("B22").Value()
# Bestellungen auslesen
$orders = $ws.Range("A31:A" + $ws.Cells($ws.Rows.Count,"A").End([Microsoft.Office.Interop.Excel.XlDirection]::xlUp).Row) | %{
[pscustomobject][ordered]@{
Name = $name
Straße = $street
PLZ = $postalcode
Ort = $city
Land = $country
Artikel = $_.Offset(0,2).Value()
Menge = $_.Offset(0,8).Value()
}
}
# Bestellungen in CSV speichern
$orders | export-csv -LiteralPath $csvfile -Delimiter ";" -NoTypeInformation -Encoding UTF8
# Mappe und Excel schließen
$wb.Close($false)
$objExcel.DisplayAlerts = $true
$objExcel.Quit()
# COM-Müll zur Tonne bringen
[void][System.Runtime.InteropServices.Marshal]::ReleaseComObject($objExcel)
Gruß Katrin
Dann war die Zelle in Spalte A nicht leer, z.B. Leerzeichen. Code sucht letzte belegte Zelle in Spalte A für die untere Begrenzung bzw. letzten Datensatz.
Wie kann ich einen Beitrag als gelöst markieren?
VIELEN DANK ! Das erspart und sehr viel Arbeit :D
👌 Na dannWie kann ich einen Beitrag als gelöst markieren?