Powerpoint 2007 - Officemenü ansteuern

  • Hi all,

    ich baue gerade an einer Automatisierung unterschiedlicher Buildroutinen für ein Projekt, dass aus einigen PPT-Präsentationen besteht.

    Aufgabe 1
    Setzen von Fusszeileninformationen

    Und schon gescheitert.

    In einem Script öffne ich die Präsentation, öffne den Dialog [Kopf- und Fusszeile], setze manuelle Texte und schliesse den Dialog mit {Für alle übernehmen}.
    Den Dialog habe ich mal angehängt.

    Der Queltext

    [autoit]

    Global $PresentationName

    [/autoit][autoit][/autoit][autoit]

    ;---- Öffnen einer Präsentation - Default = slides.pptx ----
    Func OpenPPT($name = "slides")
    $PresentationName = $name & ".pptx"
    ShellExecute($PresentationName)
    WinWaitActive("Microsoft PowerPoint")
    EndFunc ;==>OpenPPT

    [/autoit][autoit][/autoit][autoit]

    ;---- setzt Fußzeile der Folien ----
    Func SetFooterPPT($versiontext, $versiondate)
    Opt("sendKeyDelay", 50)

    [/autoit][autoit][/autoit][autoit]

    Send("!I!P")
    WinWaitActive("Kopf- und Fußzeile") ;Dialog "Kopf- und Fußzeile" öffnen

    [/autoit][autoit][/autoit][autoit]

    ;----- Manuelles Datum in Fußzeile -----
    ControlCommand("Kopf- und Fußzeile", "", "Button2", "Check") ;Datum einfügen

    [/autoit][autoit][/autoit][autoit]

    Send("!S^A") ;manuelles Datum aktivieren und altes Datum markieren
    ControlSend("Kopf- und Fußzeile", "", 104, $versiondate)

    [/autoit][autoit][/autoit][autoit]

    ;----- Foliennummer in Fußzeile -----
    ControlCommand("Kopf- und Fußzeile", "", "Button5", "Check") ;Foliennummer anzeigen

    [/autoit][autoit][/autoit][autoit]

    ;----- Versionstext als Fußzeile -----
    Send("!F")
    ControlCommand("Kopf- und Fußzeile", "", "Button6", "Check") ;Versionstext einfügen

    [/autoit][autoit][/autoit][autoit]

    Send("^A") ;Versionstext markieren
    ControlSend("Kopf- und Fußzeile", "", 107, $versiontext)

    [/autoit][autoit][/autoit][autoit]

    ControlCommand("Kopf- und Fußzeile", "", "Button7", "UnCheck") ;auch auf erster Folien anzeigen
    Send("!A") ;für alle Folien übernehmen

    [/autoit][autoit][/autoit][autoit]

    WinWaitActive("Microsoft PowerPoint - [" & $PresentationName & "]")

    [/autoit][autoit][/autoit][autoit]

    ;Variante 1
    ;Send("^S") ;STRG-S

    [/autoit][autoit][/autoit][autoit]

    ;Variante 2
    ;Sleep(5000)
    Send("!D!S");Office-Symbol + ALT-S

    [/autoit][autoit][/autoit][autoit]

    Opt("sendKeyDelay", "Default")
    EndFunc ;==>SetFooterPPT

    [/autoit][autoit][/autoit][autoit][/autoit][autoit]

    OpenPPT()
    SetFooterPPT("1.05","28.08.2011")

    [/autoit]

    Nach dem Setzen möchte ich den Dialog speichern. Dazu fallen mir zunächst die Varianten
    1. STRG-S
    2. über das Office-Symbol ALT-D + ALT-S

    Bei Variante 1 passiert scheinbar nix - in jedem Fall wird nicht gespeichert.
    Bei Variante 2 öffnet sich der Dialog [Kopf- Fußzeile]?????

    Ich hab es mit unterschiedlichen Pausen versucht aber bekomme immer die gleiche Reaktion.

    Zwei Fragen:
    a) warum erscheint der Dialog [Kopf- Fusszeile] bei ALT-D + ALT-S ???
    b) wie kann ich die Präsentation sicher zwischenspreichern?

    -----------------------------------------------------------------------------------------------
    Nachtrag:
    Gerade versuche ich Aufgabe 2 zu lösen - Druck in eine PDF.

    Dazu versuche ich mit ALT-D das Officemenü zu öffnen. Das funktioniert auch einige male. Aber plötzlich und unerwartet erscheint statt dem Office-Menü der Dialog [Kopf- Fußzeile]????. Das ändert sich erst wieder nach einem Reboot des Rechners. Dann erscheint zunächst einige male das Office-Menü, bis irgendwann wieder [Kopf- und Fußzeile] erscheint. Dabei habe ich den Dialog [Kopf- und Fußzeile] nach dem Boot NICHT aufgerufen!!

    [autoit]

    Global $PresentationName

    [/autoit][autoit][/autoit][autoit][/autoit][autoit]

    Func GenPDF_PPT()
    Opt("sendKeyDelay", 25)
    WinWaitActive("Microsoft PowerPoint - [" & $PresentationName & ".pptx]")

    [/autoit][autoit][/autoit][autoit]

    ControlSend("Microsoft PowerPoint - [" & $PresentationName & ".pptx]","","[CLASS:paneClassDC; INSTANCE:2]","!D")
    Send("!D")

    ;Hier erscheint x mal das Office-Menü. Irgendwann erscheint der Dialog [Kopf- Fußzeile]

    [/autoit][autoit][/autoit][autoit]

    WinWaitActive("Drucken")
    ControlCommand("Drucken", "", "REComboBox20W4", "SelectString", "Adobe")

    [/autoit][autoit][/autoit][autoit]

    Send("!A") ;Alles drucken

    [/autoit][autoit][/autoit][autoit]

    ControlCommand("Drucken", "", "REComboBox20W1", "SelectString", "Folien") ;Folien Drucken
    ControlCommand("Drucken", "", "REComboBox20W3", "SelectString", "Farbe") ; in Farbe
    ControlClick("Drucken", "", "Button13")

    [/autoit][autoit][/autoit][autoit]

    WinWaitActive("PDF-Datei speichern unter")
    ControlSend("PDF-Datei speichern unter", "", "Edit1", "^A")
    ControlSend("PDF-Datei speichern unter", "", "Edit1", @WorkingDir & $PresentationName & ".PDF")

    [/autoit][autoit][/autoit][autoit][/autoit][autoit][/autoit][autoit]

    Opt("sendKeyDelay", "Default")
    EndFunc

    [/autoit][autoit][/autoit][autoit]

    ;---- Öffnen einer Präsentation - Default = slides.pptx ----
    Func OpenPPT($name = "slides")
    $PresentationName = $name
    ShellExecute($PresentationName & ".pptx")
    WinWaitActive("Microsoft PowerPoint")
    EndFunc ;==>OpenPPT

    [/autoit][autoit][/autoit][autoit][/autoit][autoit]

    OpenPPT()
    GenPDF_PPT()

    [/autoit]


    Gruss
    RaBe

    Dateien

    Einmal editiert, zuletzt von Rabe62 (28. August 2011 um 15:29) aus folgendem Grund: Neue Erkenntnis: Dialog [Kopf- Fußzeile] erscheint bei ALT-D scheinbar wahllos statt dem Office-Menü

  • Also Ich würde das mit dem COM-Interface von PowerPoint machen. Das ist einfacher und zuverlässiger. So in der Art:

    Spoiler anzeigen
    [autoit]

    Global $oPPT = ObjCreate("PowerPoint.Application")

    [/autoit] [autoit][/autoit] [autoit]

    Func _SetzeFusszeile($sPfad, $sFusszeile) ; Fusszeile Setzten

    [/autoit] [autoit][/autoit] [autoit]

    $oPPT.Visible = True
    $oPPT.Presentations.Open($sPfad)
    $oPPT.ActivePresentation.SlideMaster.HeadersFooters.Footer.Text = $sFusszeile
    $oPPT.ActivePresentation.Save()

    [/autoit] [autoit][/autoit] [autoit]

    EndFunc ;==>_SetzeFusszeile

    [/autoit] [autoit][/autoit] [autoit]

    $oPPT.ActivePresentation.PrintOut() ; Ausdrucken

    [/autoit]

    Das müsste eigentlich auch gehen (kanns grad nicht ausprobieren). Falls du noch mehr machen willst kannst du Hier nachschlagen.

    Gruss Shadowigor

  • Hallo,

    hab mir mal Drucken über COM angeschaut.

    $oPPT.ActivePresentation.PrintOut() ; Ausdrucken

    Problem:
    Es soll eigentlich eine PDF erstellt werden. Und das, über einen "Adobe PDF"-Drucker. Es ist nicht sichergestellt, das dieser der Standarddrucker ist. also muss dieser als Drucker ausgewählt werden. Noch dazu muss der Pfad für die PDF-Datei angegeben werden. Für all dies kann ich nichts im COM finden...

    Andere Ideen?