Excel zu PDF Datei exportieren mit PowerShell
PDF als Dateiformat ist aus bekannten Gründen sehr beliebt. So können inzwischen alle gängigen Dateiformate als PDF gespeichert werden. Hat man viele Dokumente, möchte man diese Prozesse automatisieren. Das Exportieren einer Excel Datei zu PDF ist mit Powershell ganz einfach. Egal ob es sich um die Dateiendung .xls oder .xlsx handelt: Mit einem einfachen Befehl lässt sich das Excel Sheet zu einer PDF Datei wandeln.
Excel zu PDF mit PowerShell
Um Excel Dateien in eine PDF Datei zu konvertieren, kann PowerShell verwendet werden. Hier sollte man auf ein automatisiertes Script setzen, wenn man viele Dateien per Knopfdruck verarbeiten möchte. Übrigens ist es nicht relevant, ob es sich um das neue oder alte Excel-Format handelt. Folgende Dateitypen können in das PDF-Format exportiert werden:
- .xls
- .xlsx
Im folgenden PowerShell Script werden alle Excel-Dateien aus einem Verzeichnis gelesen und danach als PDF Datei exportiert. Ein richtiges konvertieren findet nicht statt, da die Dateien technisch gesehen neu abgespeichert werden. Nun aber zur Vorgehensweise:
- Excel-Dateien aus dem Input-Ordner lesen
- Excel (unsichtbar) öffnen
- Jede Datei öffnen und im PDF-Format exportieren
Nachfolgend findet ihr das PowerShell Script, mit dem der Vorgang komplett automatisiert abgearbeitet wird. Jeder einzelne Schritt wurde kommentiert, um den Code besser zu verstehen. Abgepasst werden muss lediglich in Zeile 2 der Input-Pfad. Die PDF-Dateien werden übrigens ebenfalls in diesem Pfad gespeichert, beziehungsweise exportiert.
# INPUT PATH $inputPath = "C:\inputfolder" # SET EXCEL FORMAT $xlFixedFormat = "Microsoft.Office.Interop.Excel.xlFixedFormatType" -as [type] # GET EXCEL FILES FROM INPUT-PATH $excelFiles = Get-ChildItem -Path $inputPath -include *.xls, *.xlsx -recurse # CREATE EXCEL OBJECT $objExcel = New-Object -ComObject excel.application # EXCEL UNVISIBLE $objExcel.visible = $false # FOR EACH FILE...EXPORT foreach($singleFile in $excelFiles) { # CREATE PDF FILEPATH $filepath = Join-Path -Path $inputPath -ChildPath ($singleFile.BaseName + ".pdf") # OPEN EXCEL FILE $workbook = $objExcel.workbooks.open($singleFile.fullname, 3) # SAVE FILE $workbook.Saved = $true # EXPORT XLS to PDF $workbook.ExportAsFixedFormat($xlFixedFormat::xlTypePDF, $filepath) # CLOSE FILE $objExcel.Workbooks.close() } # END OBJECT $objExcel.Quit()
Sollte der Speicherort der neu erstellten Dateien ein anderer sein, dann ist das natürlich auch kein Problem. In Zeile 19 wird der neue Pfad der PDF Datei zusammengesetzt. Hier kann natürlich ein anderer Output-Pfad angegeben werden. Es kann auch ein fester Pfad vergeben werden:
$filepath = "C:\Users\huberj\Desktop\Excel2PDF\out\"+$singleFile.Name+".pdf"
Wird veröffentlicht…
Wird eine (Excel) Datei als PDF Datei gespeichert, wird diese veröffentlicht. So kann es beim Ausführen des PowerShell Scripts bei größeren Dateien vorkommen, dass die Meldung Wird veröffentlicht… erscheint. Diese Meldung ist aber beim Exportieren ganz normal – die Datei wird natürlich nicht veröffentlicht in dem Sinne, wie wir es kennen, sondern lediglich als PDF gespeichert. 🙂
Außerdem werden bei diesem Vorgang temporäre Dateien (.tmp) angelegt, welche aber automatisch verschwinden. Davon sollte man sich nicht irritieren lassen.
Exportierte Dateien drucken
Sobald der Export von Microsoft Excel zu PDF abgeschlossen ist, könnte man die Dateien direkt drucken lassen. Das ist in einem PowerShell Script sehr einfach. Wir haben hierzu einen eigenen Beitrag, kurz und knapp – versprochen 🙂