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-Key: 2858641412

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

Printed on: May 18, 2024 at 03:05 o'clock

Member: SlainteMhath
SlainteMhath Mar 27, 2024 at 14:02:21 (UTC)
Goto Top
Moin,

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

lg,
Slainte
Member: em-pie
em-pie Mar 27, 2024 updated at 14:06:19 (UTC)
Goto Top
Moin,

1. nutze bitte die Code-Tags hier: Formatting instructions in the posts
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.
Member: fragezeichen99
fragezeichen99 Mar 27, 2024 updated at 14:31:58 (UTC)
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
Member: fragezeichen99
fragezeichen99 Mar 27, 2024 updated at 14:38:44 (UTC)
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
Member: em-pie
em-pie Mar 27, 2024 at 14:36:38 (UTC)
Goto Top
Du hast vergessen, das Module im Vorfeld zu installieren:
https://www.powershellgallery.com/packages/ImportExcel/7.8.6
Member: fragezeichen99
fragezeichen99 Mar 27, 2024 updated at 15:09:26 (UTC)
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
Member: Kraemer
Kraemer Mar 27, 2024 at 15:42:46 (UTC)
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ß
Member: em-pie
em-pie Mar 27, 2024 updated at 21:56:05 (UTC)
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…
Mitglied: 12168552861
Solution 12168552861 Mar 28, 2024 updated at 06:13:49 (UTC)
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.
Member: fragezeichen99
fragezeichen99 Mar 28, 2024 at 07:08:28 (UTC)
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 !!!