borussemd
Goto Top

PPT zu PNG PS Script

Hallo allerseits,

ich versuche mich gerade step by step einer Automatisierung zu nähern und würde gerne das geballte Schwarmwissen dieses Boards anzapfen.
Die Situation sieht wie folgt aus:

Diverse Mitarbeiter erstellen PowerPoint Folien in einem bestimmten Ordner. Für jeden Tag (Mo. - Sa.) je eine eigene Datei mit nur einer Folie.
Die Folien zb für KW 30 sind spätestens Donnerstag in KW 29 fertig.
Nun möchte ich Freitags eine Automatisierung die:
- Jede ppt Datei der Folgewoche öffnet (ppt´s sind schreibgeschützt. Das Script müsste also das Passwort absetzen können)
- ppt in png exportieren
- Irfanview Batch-Konvertierung starten (hier soll jedes png zugeschnitten und skaliert werden)
- Alle 6 png´s in einem Netzwerkshare ablegen

Da ich selbst kein Programmierer bin, kann ich mir den Ablauf nur theoretisch vorstellen. Wenn mir gesagt wird, dass das so nicht gehen kann, ok, dann akzeptiere ich das und suche eine andere Lösung.
Wenn aber jemand diesen Ablauf für programmierbar hält, wäre ich sehr dankbar, wenn derjenige Lust hat mich bei dem Script zu unterstützen.

Danke und Gruß
bmd

Content-ID: 979525182

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

Ausgedruckt am: 26.11.2024 um 06:11 Uhr

colinardo
colinardo 12.07.2021 aktualisiert um 14:25:21 Uhr
Goto Top
Servus bmd,
ja das ist möglich, hier mal ein erster Ansatz für dich zum Anpassen per Powershell dazu (Kommentare siehe Code)
Btw. den Schritt über das externe Tool Irfanview könnte man sich mit der Powershell auch sparen, die kann nämlich auch problemlos Bilder bearbeiten und verkleinern,/vergrößern face-wink.
# source path for presentations
$ppt_source = 'D:\Presentationen'  
# target share path
$networkshare ='\\Server\Share'  
# open and edit passwords for presentations
$openpassword = '123456'  
$editpassword = '123456'  
# path to irfanview executable
$irfanviewpath = 'D:\iview\i_view64.exe'  
# --------------------
Add-Type -A System.Drawing
# create powerpoint com object
$pp = New-Object -Com Powerpoint.Application
# disable dialogs
$pp.DisplayAlerts = 1
# for each pptx file in source folder
ls $ppt_source -Filter *.pptx -File | %{
    # open presentation in protected view window (workaround to open file with password protection)
    $docview = $pp.ProtectedViewWindows.Open($_.FullName,$openpassword)
    # enter edit password (needed to export slides from presentation)
    $doc = $docview.Edit($editpassword)
    # if presentation has slides
    if ($doc.slides.Count -gt 0 ){
	$pngpath = "$ppt_source\$($_.Basename).png"  
        # export first slide to same path as presentation with *.png file extension
        $doc.slides[1].Export($pngpath,'png')  
        # get size from png
        $png = [System.Drawing.Image]::FromFile($pngpath)
        # crop 50px from bottom
        $w = $png.Width;$h = $png.Height - 50
        # free png ressources
        $png.Dispose()
        # process png with irfanview (crop 50px from bottom, rotate right 90° resample and resize longest side to 1080px)
        &$irfanviewpath "$pngpath" "/crop=(0,0,$w,$h)" /rotate_r /resample /resize_long=1080 /aspectratio /convert="$pngpath"  
    }
    # close presentation
    $doc.Close()
}
# enable dialogs
$pp.DisplayAlerts = 2
# cleanup
[void][System.Runtime.InteropServices.Marshal]::ReleaseComObject($pp)
Stop-Process -Name POWERPNT -EA SilentlyContinue

# finally move png's to network share 
move-item "$ppt_source\*.png" -Destination $networkshare -Verbose  
Persönliche Anpassungen und Support dazu dazu gibt es von meiner Seite nur per PN

Grüße Uwe
borussemd
borussemd 12.07.2021 um 11:46:37 Uhr
Goto Top
Mega!
Erstmal 1000 Dank für´s teilen. Ich klamüser das mal auseinander, passe die Variablen an und würde dich kontaktieren, wenn es irgendwo zwickt oder kneift.

Danke und Gruß
bmd