fragezeichen99
Goto Top

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?

# 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

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

SlainteMhath
SlainteMhath 27.03.2024 um 15:02:21 Uhr
Goto Top
Moin,

wenn du < code > Tags verwenden würdest, wäre dein Source Code etwas besser zu lesen...

lg,
Slainte
em-pie
em-pie 27.03.2024 aktualisiert um 15:06:19 Uhr
Goto Top
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:
$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.
fragezeichen99
fragezeichen99 27.03.2024 aktualisiert um 15:31:58 Uhr
Goto Top
ja gerne - danke für die Informationen,werde ich beim nächsten Mal beachten. Oben geändert!
DANKE !!! em-pie
Ich wollte nur eine Frage stellen face-smile
Und eben wegen, löschen der Datei wenn umgewandelt.

Gruß
Oliver
fragezeichen99
fragezeichen99 27.03.2024 aktualisiert um 15:38:44 Uhr
Goto Top
@em-pie, wenn ich darf noch die Nachfrage, es kommt ein Fehler als Meldung.
Liegt es daran das ich xls statt xlsx nutze?
fehler
em-pie
em-pie 27.03.2024 um 15:36:38 Uhr
Goto Top
Du hast vergessen, das Module im Vorfeld zu installieren:
https://www.powershellgallery.com/packages/ImportExcel/7.8.6
fragezeichen99
fragezeichen99 27.03.2024 aktualisiert um 16:09:26 Uhr
Goto Top
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!!!
fehler_2
Kraemer
Kraemer 27.03.2024 um 16:42:46 Uhr
Goto Top
Moin,

liest du die Fehlermeldungen auch?
Die Lösung steht da nämlich drin.

Und xls kannst du damit nicht bearbeiten. Nur xlsx.

Gruß
em-pie
em-pie 27.03.2024 aktualisiert um 22:56:05 Uhr
Goto Top
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!!!

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…
12168552861
Lösung 12168552861 28.03.2024 aktualisiert um 07:13:49 Uhr
Goto Top
# 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)
Gruß pp.
fragezeichen99
fragezeichen99 28.03.2024 um 08:08:28 Uhr
Goto Top
Zitat von @puderpader:

# 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)
Gruß pp.

PERFEKT !! DANKE DIR !!!