Home » Tipps & Tricks » COM/OLE/DDE » Andere Office-Anwendungen » Powerpoint mit OLE-Automation steuern

Powerpoint mit OLE-Automation steuern

Wie kann ich Powerpoint starten?

Powerpoint öffnen (frühe Bindung):

Bevor Sie diese Methode verwenden können, müssen Sie die Typbibliothek (MSPpt8.olb für Powerpoint 97) importiert haben.
Eine Art, Powerpoint zu starten, ist den Aufruf von GetActiveObject auszuprobieren (try-Abschnitt), um eine bereits laufende Powerpoint-Instanz zu erhalten, es sollte aber ein Aufruf von CoApplication.Create im except-Teil stehen. Aber except-Klauseln sind langsam und können bei Leuten, die gerne „Bei Exceptions anhalten“ aktiviert haben, Probleme innerhalb der IDE auslösen. Der folgende Code benötigt keine try-except-Konstruktion, weil die Verwendung von OleCheck bei GetActiveObject im Fall, dass Powerpoint nicht läuft, vermieden wird.

uses Windows, ComObj, ActiveX, OfficePowerPoint_TLB;

var
  PowerPoint: _Application;
  AppWasRunning: boolean; // tells you if you can close PowerPoint when you've finished
  Unknown: IUnknown;
  Result: HResult;
begin
  AppWasRunning := False;
  Result := GetActiveObject(CLASS_Application, nil, Unknown);
  if (Result = MK_E_UNAVAILABLE) then
    PowerPoint := CoApplication.Create
  else begin
    { make sure no other error occurred during GetActiveObject }
    OleCheck(Result);
    OleCheck(Unknown.QueryInterface(_Application, PowerPoint));
    AppWasRunning := True;
  end;
  PowerPoint.Visible := TOleEnum(msoTrue);

Ohne Verwendung der Typbibliothek:

Automation ist sehr viel schneller und einfacher, wenn Typbibliotheken (frühe Bindung) verwendet werden, deshalb sollten Sie es, wenn immer möglich, vermeiden, ohne sie zu arbeiten. Aber wenn es wirklich nicht anders geht, hier, wie vorzugehen ist:

var
  PowerPoint: Variant;
begin
  try
    PowerPoint := GetActiveOleObject('PowerPoint.Application');
  except
    PowerPoint := CreateOleObject('PowerPoint.Application');
  end;
  PowerPoint.Visible := True;

Wie kann ich Powerpoint schließen?

Frühe Bindung:

  PowerPoint.Quit;
  PowerPoint := nil;

Späte Bindung:

  PowerPoint.Quit;
  PowerPoint := UnAssigned;

Wie kann ich eine neue Präsentation beginnen?

PowerPoint.Presentations.Add(TOleEnum(msoTrue));

Das Casten in ein TOleEnum ist einfach, um zu vermeiden, dass der Compiler wegen eines Konstantenausdrucks, der die Unterbereichsgrenzen verletzt, warnt. Wenn Sie späte Bindung verwenden, können Sie einfach ein Boolean verwenden:

PowerPoint.Presentations.Add(True);

Wie kann ich eine Präsentation öffnen?

PowerPoint.Presentations.Open('PresName.ppt', msoFalse, msoFalse, msoTrue);

Der zweite Parameter gibt an, ob die Präsentation im Read-Only-Modus geöffnet werden soll. Wenn der dritte Parameter true ist, wird eine unbenannte Kopie der Datei gemacht. Der letzte Parameter gibt an, ob die geöffnete Präsentation sichtbar sein soll. Sie können diese Parameter bei später Bindung weglassen, wenn Ihnen die Standardwerte genügen (false, false, true, bzw. wie im Code gezeigt).

Wie kann ich eine Präsentation speichern?

PowerPoint.Save;

Oder für Speichern unter:

var
  EmbedFonts: OleVariant;
begin
  EmbedFonts := False;
  PowerPoint.ActivePresentation.SaveAs('PresName.ppt', ppSaveAsPresentation, EmbedFonts);

Der zweite Parameter von SaveAs bestimmt das Format – mögliche Werte sind ppSaveAsAddIn, ppSaveAsPowerPoint3, ppSaveAsPowerPoint4, ppSaveAsPowerPoint7, ppSaveAsPresentation, ppSaveAsRTF oder ppSaveAsTemplate. Dies sind Konstanten, die in der Typbibliothek definiert sind. Wenn Sie die Typbibliothek nicht verwenden, können Sie sie selbst definieren:

const
  ppSaveAsPresentation = $00000001;
  ppSaveAsPowerPoint7 = $00000002;
  ppSaveAsPowerPoint4 = $00000003;
  ppSaveAsPowerPoint3 = $00000004;
  ppSaveAsTemplate = $00000005;
  ppSaveAsRTF = $00000006;
  ppSaveAsShow = $00000007;
  ppSaveAsAddIn = $00000008;
  ppSaveAsWizard = $00000009;
  ppSaveAsPowerPoint4FarEast = $0000000A;
  ppSaveAsDefault = $0000000B;

Wie kann ich eine Präsentation schließen?

PowerPoint.ActivePresentation.Close;