Per Batch in Aufgabeplanung XLS in CSV umwandeln
Hallo und guten Morgen,
leider habe ich in den zahlreichen Beiträgen zu dem Thema nichts passendes gefunden.
Ich bekomme wöchentlich eine XLS zugesandt, kann diese aber nur als CSV verarbeiten. Die XLS liegt in einem Ordner auf dem WIN Server. Die Konvertierung in CSV sollte per Batch automatisch funktionieren. Schreibe ich da am besten eine .cmd und führe diese einfach per Aufgabenplanung aus? Wie schaffe ich es, dass die CSV richtig konvertiert wird. Also mit ";" getrennt und als Dezimaltrennzeichen ein ","...
Kann mir da möglicherweise jemand einen Tipp geben?
Schon einmal vielen Dank und schöne Grüße
leider habe ich in den zahlreichen Beiträgen zu dem Thema nichts passendes gefunden.
Ich bekomme wöchentlich eine XLS zugesandt, kann diese aber nur als CSV verarbeiten. Die XLS liegt in einem Ordner auf dem WIN Server. Die Konvertierung in CSV sollte per Batch automatisch funktionieren. Schreibe ich da am besten eine .cmd und führe diese einfach per Aufgabenplanung aus? Wie schaffe ich es, dass die CSV richtig konvertiert wird. Also mit ";" getrennt und als Dezimaltrennzeichen ein ","...
Kann mir da möglicherweise jemand einen Tipp geben?
Schon einmal vielen Dank und schöne Grüße
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 324542
Url: https://administrator.de/contentid/324542
Ausgedruckt am: 05.11.2024 um 19:11 Uhr
21 Kommentare
Neuester Kommentar
Hi,
warum keine Pòwershell?
Lass mal das als Powershellscript laufen.
ggf. die Option 23 ausprobieren.
Was bekommst du als Ausgabe?
VG
warum keine Pòwershell?
$xlCSV = 6
$Excel = New-Object -Com Excel.Application
$Excel.visible = $False
$Excel.displayalerts=$False
$WorkBook = $Excel.Workbooks.Open("DEINEEXCELDATEI.XLS")
$Workbook.SaveAs("DEINEEXCELDATEIALSCSV.csv",$xlCSV)
$Excel.quit()
Lass mal das als Powershellscript laufen.
ggf. die Option 23 ausprobieren.
$xlCSV = 23
Was bekommst du als Ausgabe?
VG
$Excel.displayalerts=$False
Nur zur Info: Das solltest du vor dem Quit wieder rückgängig machen, da diese Einstellung permanent ist und der User sonst nach dem Ausführen überhaupt keine Warndialoge mehr zu Gesicht bekommt Gruß mik
Gib die kompletten absoluten Pfade zu den Dateien in Zeile 5 und 6 an!
Gruß
Gruß
Hast du das Script in der Aufgabenplanung so eingetragen?
https://www.antary.de/2013/08/16/powershell-skript-als-geplante-aufgabe- ...
-command "Laufwerk:\Pfad\Skript.ps1"
https://www.antary.de/2013/08/16/powershell-skript-als-geplante-aufgabe- ...
Über die Aufgabenplanung sind Prozesse erstens nicht sichtbar wenn man sie mit einem anderen Account ausführt, nur über den Taskmanager.
Zweitens sollte entweder die Executionpolicy angepasst sein oder man startet sie per Bypass-Command.
Als Exe eintragen
powershell.exe
Unter Argumente:
-Executionpolicy Bypass -File "c:\script.ps1"
Wenn man stattdessen -command nutzt muss man bei Pfaden mit Leerzeichen beachten
-command "&'c:\pfad mit Leerzeichen\script.ps1'"
Zweitens sollte entweder die Executionpolicy angepasst sein oder man startet sie per Bypass-Command.
Als Exe eintragen
powershell.exe
Unter Argumente:
-Executionpolicy Bypass -File "c:\script.ps1"
Wenn man stattdessen -command nutzt muss man bei Pfaden mit Leerzeichen beachten
-command "&'c:\pfad mit Leerzeichen\script.ps1'"
Typische Angängerprobleme.
Bau ein Logging in die PS1 ein (Start-Transcript) und du weißt sofort was Sache ist.
Gruß und frohes Fest.
Bau ein Logging in die PS1 ein (Start-Transcript) und du weißt sofort was Sache ist.
Gruß und frohes Fest.
Das Excel dafür auf der Maschine installiert sein muss sollte klar sein, es wird ja das COM-Objekt von Excel benutzt welches nur verfügbar ist wenn Excel installiert ist. . Geht hier testweise ohne Probleme auch im Taskplaner, also hast du entweder ein Berechtigungsproblem, Excel ist nicht installiert oder du hast den Task falsch eingestellt.
Die Executionpolicy gibt es für 64-Bit sowie 32-BIt-Konsolen. Für deinen Fall bei dem du ein 32-Bit Office nutzt solltest du auch die 32-Bit Konsole nutzen also auch dort die Executionpolicy freischalten und im Task die 32-Bit Powershell exe angeben.
Um beide Policies auf einen Schlag zu setzen gebe folgendes ein
Dann ist die policy für beide Konsolen-Typen freigeschaltet.
Jetzt brauchst du nur noch die 32bit exe im Task angeben, fertig, läuft.
Gruß
Um beide Policies auf einen Schlag zu setzen gebe folgendes ein
Set-ExecutionPolicy RemoteSigned -Force; start-job {Set-ExecutionPolicy RemoteSigned -Force } -RunAs32
Jetzt brauchst du nur noch die 32bit exe im Task angeben, fertig, läuft.
Gruß
Wie ich schon oben geschrieben habe, gebe in der Aufgabenplanung den Pfad zu 32-Bit Powershell exe an. Und ich hoffe die UAC ist aus.
Hier getestet sowohl auf SRV2012R2 als auch 2016, alles einwandfrei. Sorry du scheinst einfach einen Fehler zu machen den ich hier nicht sehen kann.
Gibt es dort event. andere Sicherheitsrichtlinien für PS?
Nein.Hier getestet sowohl auf SRV2012R2 als auch 2016, alles einwandfrei. Sorry du scheinst einfach einen Fehler zu machen den ich hier nicht sehen kann.
Erstelle mal in folgenden Verzeichnissen einen Ordner namens Desktop:
Oder alternativ dazu öffne mit WIN+R - > dcomcnfg
Öffne dann die Eigenschaften von Microsoft Excel Application
Und stelle auf dem TAB Identity den User ein unter dem du den Task ausführst
Dann muss es definitiv laufen.
Wenn nicht statte es mit Logging aus wie ich oben geschrieben habe:
Pfad zum Logfile und den Dateien bitte anpassen.
Gruß mik
C:\Windows\SysWOW64\config\systemprofile\Desktop
C:\Windows\system32\config\systemprofile\Desktop
Oder alternativ dazu öffne mit WIN+R - > dcomcnfg
Öffne dann die Eigenschaften von Microsoft Excel Application
Und stelle auf dem TAB Identity den User ein unter dem du den Task ausführst
Dann muss es definitiv laufen.
Wenn nicht statte es mit Logging aus wie ich oben geschrieben habe:
Pfad zum Logfile und den Dateien bitte anpassen.
Start-Transcript -Path "C:\temp\error.log"
# Quelldatei
$quelle = 'C:\temp\daten.xlsx'
# Zieldatei
$ziel = 'C:\temp\daten.csv'
$objExcel = New-Object -Com "Excel.Application"
$wb = $objExcel.Workbooks.Open($quelle)
$objExcel.Visible = $false
$objExcel.DisplayAlerts = $false
$objExcel.AutomationSecurity = 'msoAutomationSecurityForceDisable'
$wb.SaveAs($ziel,6)
$objExcel.DisplayAlerts = $true
$wb.Close($false)
$objExcel.Quit()
[System.Runtime.InteropServices.Marshal]::ReleaseComObject($objExcel)
Stop-Transcript
Gruß mik