XLS in CSV mit Powershell aber variablen Namen der Datei?
Hallo zusammen,
ich habe schon einiges gelesen und ein wenig selber gemacht, aber mir fehlt der "letzte Kniff".
Ausgangslage. Wir bekommen von Kunden die Bestellungen als Mail mit Dateianhang.
In der Regel pdf oder xls. Nehmen wir mal die Exceldatei als Vorlage, die Datei ist zu speichern, ok das geht.
Die gespeicherten Dateien sind aus xls in csv zu wandeln.
Hierzu habe ich folgendes angelegt, das klappt auch, aber wie kann ich den Dateinamen, statt einer festen Datei, "alle" Dateien nehmen? ein *.xls geht nicht als Platzhalter
Denn die Dateinamen ändern sich täglich bzw. mit jeder Bestellung.
Zudem, kann ich auch einbauen, dass gleich auch die xls gelöscht wird?
Danke Oliver
ich habe schon einiges gelesen und ein wenig selber gemacht, aber mir fehlt der "letzte Kniff".
Ausgangslage. Wir bekommen von Kunden die Bestellungen als Mail mit Dateianhang.
In der Regel pdf oder xls. Nehmen wir mal die Exceldatei als Vorlage, die Datei ist zu speichern, ok das geht.
Die gespeicherten Dateien sind aus xls in csv zu wandeln.
Hierzu habe ich folgendes angelegt, das klappt auch, aber wie kann ich den Dateinamen, statt einer festen Datei, "alle" Dateien nehmen? ein *.xls geht nicht als Platzhalter
Denn die Dateinamen ändern sich täglich bzw. mit jeder Bestellung.
Zudem, kann ich auch einbauen, dass gleich auch die xls gelöscht wird?
# Quelldatei
$quelle = 'C:\Bestellung-2024-326.XLS'
# Zieldatei
$ziel = 'C:\Bestellung-2024-326.csv'
# Excel Objekt
$objExcel = New-Object -Com Excel.Application
# Mappe öffnen
$wb = $objExcel.Workbooks.Open($quelle)
# Excel anzeigen
$objExcel.Visible = $true
$objExcel.DisplayAlerts = $false
# Sheet-Referenz holen
$ws = $wb.Sheets.Item(1)
# Datei als CSV speichern
$wb.SaveAs($ziel,6)
$objExcel.DisplayAlerts = $true
# Dokument schließen
$wb.Close($false) | out-null
# Excel schließen
$objExcel.Quit() | out-null
# Ressourcen freigeben
[System.Runtime.InteropServices.Marshal]::ReleaseComObject($objExcel) | out-null
Danke Oliver
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 2858641412
Url: https://administrator.de/forum/xls-in-csv-mit-powershell-aber-variablen-namen-der-datei-2858641412.html
Ausgedruckt am: 06.04.2025 um 00:04 Uhr
10 Kommentare
Neuester Kommentar
Moin,
1. nutze bitte die Code-Tags hier: Formatierungen in den Beiträgen
2. Lies alle Dateien mit Get-ChildIten() ein.
3. Dann mit foreach() jede Datei, die gefunden wurde, abarbeiten
4. mit Export-CSV() alles abspeichern
Oder es, sowie wie hier demsonstriert bearbeiten:
Edit: einige Formatierungsprobleme korrigiert.
1. nutze bitte die Code-Tags hier: Formatierungen in den Beiträgen
2. Lies alle Dateien mit Get-ChildIten() ein.
3. Dann mit foreach() jede Datei, die gefunden wurde, abarbeiten
4. mit Export-CSV() alles abspeichern
Oder es, sowie wie hier demsonstriert bearbeiten:
$Files = Get-ChildItem -Path "C:\Scripts\Excel" -Include *.xlsx -Recurse
ForEach ($File in $Files)
{
Import-Excel -Path $File.FullName | Export-Csv ($file.FullName -replace '\.xlsx$', '.csv') -NoTypeInformation
}
Edit: einige Formatierungsprobleme korrigiert.
Du hast vergessen, das Module im Vorfeld zu installieren:
https://www.powershellgallery.com/packages/ImportExcel/7.8.6
https://www.powershellgallery.com/packages/ImportExcel/7.8.6
Zitat von @fragezeichen99:
Danke @em-pie -> hilft leider nicht weiter. Ich habe jetzt geschafft mit der Anleitung und Adminrechten
das zu installieren. Wenn ich nun den Befehl laufen lasse:
Ich danke dir für die Hilfe!!!
Danke @em-pie -> hilft leider nicht weiter. Ich habe jetzt geschafft mit der Anleitung und Adminrechten
das zu installieren. Wenn ich nun den Befehl laufen lasse:
Ich danke dir für die Hilfe!!!
Naja, die Meldung sagt ja, dass du noch kein
Load-Module ExcelImport
durchgeführt hast.Bezugnehmend auf die Anmerkung des Kollegen @Kraemer
Könnte durchaus sein, das XLS nicht klappt. Selbst hab ich das noch nicht klappt. Aber dein Weg funktioniert ja. Adaptiere beides und dann solltest du zum Ziel kommen…

# Quellordner
$quelle = 'C:\Quelle'
# Excel öffnen
$objExcel = New-Object -Com Excel.Application -Property @{Visible = $true;DisplayAlerts = $false}
foreach($file in Get-ChildItem $quelle -File -Filter *.xls){
try{
# Mappe öffnen
$wb = $objExcel.Workbooks.Open($file.Fullname)
# Datei als CSV speichern
$wb.SaveAs(($file.Fullname -replace '\.xls$','.csv'),6)
# Dokument schließen
$wb.Close($false) | out-null
[void][System.Runtime.InteropServices.Marshal]::ReleaseComObject($wb)
# Excel File löschen
Remove-Item -Path $file.Fullname
}catch{
write-host $_.Exception.Message -F Red
}
}
$objExcel.DisplayAlerts = $true
# Excel schließen
[void]$objExcel.Quit()
# Ressourcen freigeben
[void][System.Runtime.InteropServices.Marshal]::ReleaseComObject($objExcel)