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
Please also mark the comments that contributed to the solution of the article
Content-Key: 83740261362
Url: https://administrator.de/contentid/83740261362
Printed on: April 28, 2024 at 15:04 o'clock
3 Comments
Latest comment
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.
How can I mark a post as solved?
VIELEN DANK ! Das erspart und sehr viel Arbeit :D
👌 Na dannHow can I mark a post as solved?