PPPTools-Referenz (AdvancedScriptHelper)

Erstellt: 2026-05-29 · Aktualisiert: 2026-05-31

Advanced Snippet Editor

ppptools ist die einzige Variable im Script, die Zugriff auf PowerPoint gibt. Alle Methoden sind auf der Instanz aufrufbar — kein new, kein direkter COM-Zugriff nötig.


Folie

SlideWidth / SlideHeight

float w = ppptools.SlideWidth;   // z.B. 720f (Punkte)
float h = ppptools.SlideHeight;  // z.B. 540f (Punkte)

Breite und Höhe der aktiven Folie in Punkten (1 Punkt = 1/72 Zoll). Zum Zentrieren:

float left = (ppptools.SlideWidth  - shapeWidth)  / 2f;
float top  = (ppptools.SlideHeight - shapeHeight) / 2f;

Shapes erstellen

AddShape(type, x, y, w, h)

dynamic oShape = ppptools.AddShape(MsoAutoShapeType.msoShape8pointStar, 100f, 80f, 200f, 200f);

Fügt eine AutoShape auf der aktiven Folie ein. Alle verfügbaren Typen mit Beispielen: → AutoShape-Typen (MsoAutoShapeType)

Vollständige Microsoft-Referenz: MsoAutoShapeType auf learn.microsoft.com

Parameter Typ Beschreibung
type MsoAutoShapeType Form-Typ
x float Linke Position in Punkten
y float Obere Position in Punkten
w float Breite in Punkten
h float Höhe in Punkten

AddRect(x, y, w, h)

dynamic oRect = ppptools.AddRect(50f, 50f, 200f, 150f);

Kurzform für AddShape(msoShapeRectangle, ...).


AddOval(x, y, w, h)

dynamic oCircle = ppptools.AddOval(100f, 100f, 80f, 80f);  // Kreis 80×80

Kurzform für AddShape(msoShapeOval, ...). Für einen exakten Kreis: w == h.


BuildFreeform(editingType, x, y)

var ffb = ppptools.BuildFreeform(MsoEditingType.msoEditingCorner, 100f, 50f);
ffb.AddNodes(MsoSegmentType.msoSegmentLine,  MsoEditingType.msoEditingCorner, 200f, 50f);
ffb.AddNodes(MsoSegmentType.msoSegmentLine,  MsoEditingType.msoEditingCorner, 150f, 150f);
var oTriangle = ffb.ConvertToShape();

Startet einen Freeform-Builder. Der Rückgabewert ist ein FreeformBuilder-Objekt mit den Methoden .AddNodes(...) und .ConvertToShape().

Parameter Typ Beschreibung
editingType MsoEditingType msoEditingCorner (scharfe Ecken) oder msoEditingAuto (Kurven)
x, y float Startpunkt des ersten Nodes

AddPolygon(xs, ys)

dynamic oShape = ppptools.AddPolygon(
    new float[] { 100f, 200f, 150f },   // X-Koordinaten
    new float[] {  50f,  50f, 150f });  // Y-Koordinaten

Erstellt ein geschlossenes Polygon aus zwei parallelen Koordinaten-Arrays — alle Segmente sind gerade Linien (Corner-Nodes). Die Form wird automatisch geschlossen (letzter Punkt → erster Punkt).

Parameter Typ Beschreibung
xs float[] X-Koordinaten aller Eckpunkte (mindestens 2)
ys float[] Y-Koordinaten aller Eckpunkte (mindestens 2)

Entspricht BuildFreeform + AddNodes + ConvertToShape mit msoSegmentLine-Segmenten. Für Kurven: direkt BuildFreeform verwenden.

Automatisch generiert

Der ⬇ Code-Button erzeugt AddPolygon(...) automatisch, wenn ein selektiertes FreeForm-Shape nur gerade Segmente (keine Kurven) hat.


AddPolyline(xs, ys)

dynamic oLine = ppptools.AddPolyline(
    new float[] { 50f, 200f, 350f },    // X-Koordinaten
    new float[] { 100f, 200f, 100f });  // Y-Koordinaten

Erstellt einen offenen Pfad — wie AddPolygon, aber ohne das abschliessende Segment. Nützlich für Linien, Pfeile oder offene Umrisse.

Parameter Typ Beschreibung
xs float[] X-Koordinaten aller Punkte (mindestens 2)
ys float[] Y-Koordinaten aller Punkte (mindestens 2)

AddTextBox(x, y, w, h)

dynamic oBox = ppptools.AddTextBox(100f, 80f, 300f, 50f);
ppptools.SetText(oBox, "Beschriftung", fontSize: 14f);

Fügt eine horizontale Textbox ohne Füllfarbe und ohne Rahmen ein. Im Gegensatz zu AddRect hat eine Textbox standardmässig keinen Hintergrund.

Parameter Typ Standard Beschreibung
x float Linke Position in Punkten
y float Obere Position in Punkten
w float Breite in Punkten
h float 36f Höhe in Punkten (optional, Standard 36pt)

AddLine(x1, y1, x2, y2)

// Horizontale Trennlinie
dynamic oLine = ppptools.AddLine(50f, 200f, 670f, 200f);
ppptools.SetLine(oLine, Color.FromArgb(180, 180, 180), 1f);

// Diagonale Linie
dynamic oDiag = ppptools.AddLine(100f, 100f, 400f, 300f);

Fügt eine gerade Linie zwischen zwei Punkten ein. Für mehrsegmentige Linien → AddPolyline.

Parameter Typ Beschreibung
x1, y1 float Startpunkt
x2, y2 float Endpunkt

AddConnector(x1, y1, x2, y2, type)

// Einfacher gerader Verbindungspfeil (Standard)
dynamic oConn = ppptools.AddConnector(150f, 100f, 400f, 250f);

// Geknickter Verbindungspfeil (Elbow = Typ 3)
dynamic oElbow = ppptools.AddConnector(150f, 100f, 400f, 250f, type: 3);

Fügt einen Verbindungspfeil (Connector) ein. Im Gegensatz zu AddLine kann ein Connector an Shape-Verbindungspunkte angedockt werden.

Parameter Typ Standard Beschreibung
x1, y1 float Startpunkt
x2, y2 float Endpunkt
type int 2 Connector-Typ: 1=Straight, 2=Curved, 3=Elbow, 4=Double-Elbow

Selektion

GetSelected(index = 1)

ppptools.Union();
dynamic oResult = ppptools.GetSelected();     // erstes Shape in der Selektion
dynamic oSecond = ppptools.GetSelected(2);    // zweites Shape (selten benötigt)

Gibt das Shape an Position index (1-basiert) der aktuellen Selektion zurück. Wird typischerweise nach Boolean-Operationen eingesetzt, um das Ergebnis-Shape zu greifen.


GetSelectedRange()

foreach (dynamic sh in ppptools.GetSelectedRange())
{
    sh.Name = "MyShape";
}

Gibt das gesamte ShapeRange-Objekt der aktuellen Selektion zurück.


Boolean-Operationen

Alle vier Operationen arbeiten auf der aktuellen Selektion. Shapes vorher selektieren:

oA.Select(MsoTriState.msoTrue);   // erstes Shape (Replace = true → Selektion neu starten)
oB.Select(MsoTriState.msoFalse);  // weiteres Shape (Replace = false → zur Selektion hinzufügen)
ppptools.Union();
dynamic oResult = ppptools.GetSelected();

Die beteiligten Original-Shapes existieren nach der Operation nicht mehr — nur das Ergebnis bleibt.

Union()

Vereinigt alle selektierten Shapes zu einem. Die Aussenfläche aller Formen ergibt die neue Form.

oStar.Select(MsoTriState.msoTrue);
oCircle.Select(MsoTriState.msoFalse);
ppptools.Union();
dynamic oUnion = ppptools.GetSelected();

Intersect()

Behält nur den Bereich, der in allen selektierten Shapes liegt.

oLargeShape.Select(MsoTriState.msoTrue);
oClip.Select(MsoTriState.msoFalse);
ppptools.Intersect();
dynamic oClipped = ppptools.GetSelected();

Combine()

Kombiniert Shapes zu einem Pfad — Überschneidungsbereiche werden ausgestanzt (Loch).

oOuter.Select(MsoTriState.msoTrue);
oHole.Select(MsoTriState.msoFalse);
ppptools.Combine();

Subtract()

Subtrahiert das zweite Shape vom ersten. Überlappender Bereich wird aus dem ersten entfernt.

oBase.Select(MsoTriState.msoTrue);
oCut.Select(MsoTriState.msoFalse);
ppptools.Subtract();
dynamic oResult = ppptools.GetSelected();

Gruppieren

GroupSelected()

oA.Select(MsoTriState.msoTrue);
oB.Select(MsoTriState.msoFalse);
dynamic oGroup = ppptools.GroupSelected();

Gruppiert die aktuelle Selektion. Gibt die Gruppe zurück.

Group(shape1, shape2, ...)

dynamic oGroup = ppptools.Group(oBody, oHead, oText);
oGroup.Name = "Persona";

Selektiert alle übergebenen Shapes und gruppiert sie in einem Aufruf. Kurzform für manuelles Select + GroupSelected(). Gibt die Gruppe zurück.


Duplizieren

Duplicate(shape)

dynamic oCopy = ppptools.Duplicate(oOriginal);
oCopy.Left = (float)oOriginal.Left + 50f;

Dupliziert ein Shape und gibt das neue Shape direkt zurück (nicht den Duplicate-Range wie PowerPoint's .Duplicate()). Das Duplikat erscheint minimal versetzt (PowerPoint-Standard).


Z-Order

ppptools.SendBackward(oShape);   // eine Ebene nach hinten
ppptools.BringForward(oShape);   // eine Ebene nach vorne
ppptools.SendToBack(oShape);     // ganz nach hinten
ppptools.BringToFront(oShape);   // ganz nach vorne

Beispiel: Schatten hinter das Hauptobjekt schieben:

var oShadow = ppptools.Duplicate(oMain);
// ... Schatten formatieren ...
ppptools.SendBackward(oShadow);

Spiegeln

ppptools.FlipH(oShape);  // horizontal spiegeln
ppptools.FlipV(oShape);  // vertikal spiegeln

Position & Grösse

CenterOnSlide(shape)

ppptools.CenterOnSlide(oGroup);

Zentriert ein Shape horizontal und vertikal auf der Folie. Äquivalent zu:

oShape.Left = (ppptools.SlideWidth  - (float)oShape.Width)  / 2f;
oShape.Top  = (ppptools.SlideHeight - (float)oShape.Height) / 2f;

Scale(shape, factor)

ppptools.Scale(oGroup, 1.5f);   // auf 150 % vergrössern
ppptools.Scale(oGroup, 0.5f);   // auf 50 % verkleinern

Skaliert Breite und Höhe proportional um den angegebenen Faktor.


Styling

SetFill(shape, color, transparency = 0f)

ppptools.SetFill(oShape, Color.FromArgb(68, 114, 196));           // opake Farbe
ppptools.SetFill(oShape, Color.FromArgb(68, 114, 196), 0.3f);    // 30 % transparent
Parameter Typ Standard Beschreibung
color Color Füllfarbe
transparency float 0f 0.0 = opak, 1.0 = vollständig transparent

SetGradient(shape, color1, color2, angle, pos1, pos2)

// Standard: vertikaler Verlauf (90°), dunkel→hell
ppptools.SetGradient(oShadow,
    Color.FromArgb(38,  38,  38),   // color1 — Startfarbe
    Color.FromArgb(241, 241, 241)); // color2 — Endfarbe

// Eigener Winkel
ppptools.SetGradient(oShape,
    Color.FromArgb(70, 130, 180),
    Color.FromArgb(135, 206, 235),
    angle: 45f, pos1: 0.1f, pos2: 0.9f);
Parameter Typ Standard Beschreibung
color1 Color Farbe an Position pos1
color2 Color Farbe an Position pos2
angle float 90f 0° = links→rechts, 90° = oben→unten
pos1 float 0.16f Position von color1 (0.0–1.0)
pos2 float 0.89f Position von color2 (0.0–1.0)

SetLine(shape, color, weight, visible)

ppptools.SetLine(oShape, Color.FromArgb(90, 60, 180));          // Standardstärke 1.5pt
ppptools.SetLine(oShape, Color.FromArgb(90, 60, 180), 2.5f);    // Stärke 2.5pt
ppptools.SetLine(oShape, Color.Black, visible: false);           // Linie verstecken
Parameter Typ Standard Beschreibung
color Color Linienfarbe
weight float 1.5f Linienstärke in Punkten
visible bool true false → Linie wird versteckt (wie HideLine)

HideLine(shape)

ppptools.HideLine(oShape);

Versteckt die Konturlinie (Rahmen) eines Shapes. Kurzform für SetLine(..., visible: false).


SetLine(shape, LineSpec)

var b = Params.GetLine("Rahmen");     // aus @param line
ppptools.SetLine(oShape, b);           // Farbe + Stärke + Strichart + Sichtbarkeit

Overload zu SetLine: wendet eine komplette LineSpec (aus dem @param line-Picker) an — Farbe, Stärke, Strichart und Sichtbarkeit in einem Aufruf.


ApplyFill(shape, FillSpec)

var f = Params.GetFill("Fuellung");   // aus @param fill
ppptools.ApplyFill(oShape, f);         // Vollton / Verlauf / keine

Wendet eine FillSpec (aus dem @param fill-Picker) an und verzweigt intern: VolltonSetFill, VerlaufSetGradient, Keine → Füllung aus.


SetText(shape, text, fontName, fontSize, color, bold, align)

// Kurzform — nur Text
ppptools.SetText(oShape, "Hallo Welt");

// Mit Formatierung
ppptools.SetText(oShape, "Titel",
    fontName: "Calibri",
    fontSize: 16f,
    color: Color.FromArgb(38, 38, 38),
    bold: true,
    align: PowerPoint.PpParagraphAlignment.ppAlignCenter);
Parameter Typ Standard Beschreibung
text string Anzuzeigender Text
fontName string "Arial" Schriftart
fontSize float 12f Schriftgrösse in Punkten
color Color? null Textfarbe; null = unverändert
bold bool false Fettschrift
align PpParagraphAlignment ppAlignLeft Textausrichtung

Setzt ausserdem: VerticalAnchor = msoAnchorMiddle, AutoSize = msoAutoSizeTextToFitShape.

SetFont(shape, font)

Wendet eine komplette Schrift (Name, Größe, Fett, Kursiv, Unterstrichen) auf den Text eines Shapes an — typischerweise aus einem @param font-Dialog.

var f = Params.GetFont("schrift");        // System.Drawing.Font aus @param font
ppptools.SetFont(oShape, f);               // ganze Schrift anwenden

// Nur Teile: Eigenschaften einzeln setzen
oShape.TextFrame.TextRange.Font.Size = f.Size;   // nur die Größe
Parameter Typ Beschreibung
shape dynamic Ziel-Shape (muss einen Textrahmen haben)
font System.Drawing.Font Schrift, z. B. aus Params.GetFont(...)

Siehe Schrift-Parameter (@param font) für den Dialog und weitere Beispiele.


Snippets & Farben

InsertSnippet(ref)

Fügt ein per @param snippet gewähltes Fragment- oder Picture-Snippet auf der aktuellen Folie ein und gibt das eingefügte Shape (bei mehreren Objekten die Gruppe) zurück. Code-Snippets werden nicht ausgeführt → Rückgabe null.

Parameter Typ Beschreibung
ref SnippetRef aus Params.GetSnippet("…")

ReplaceShape(target, ref, scale, keepName)

Ersetzt ein bestehendes Shape durch das gewählte Snippet: platziert das neue Objekt am Zentrum des Originals, skaliert gemäss scale und löscht das Original.

Parameter Typ Standard Beschreibung
target Shape zu ersetzendes Shape (z. B. GetSelected())
ref SnippetRef aus Params.GetSnippet("…")
scale string "Breite" Breite | Höhe | Einpassen | Strecken | Original
keepName bool true neues Objekt übernimmt den Namen des Originals

ReplaceColor(shape, from, to, tolerance, aspect)

Ersetzt in einem Shape eine Quellfarbe durch eine Zielfarbe.

Parameter Typ Standard Beschreibung
shape Shape zu bearbeitendes Shape
from Color Quellfarbe (z. B. Params.GetColor("Von"))
to Color Zielfarbe
tolerance int 0 erlaubte RGB-Abweichung je Kanal (0 = exakt)
aspect string "Füllung" Füllung | Linie | Text | Alle

Siehe Snippet-Parameter (@param snippet) und Beispiel: Farbe suchen & ersetzen.


Dialoge

ShowResult(title, markup, buttons, kind)

ppptools.ShowResult("Fertig", "<b>3</b> Elemente ersetzt.", "OK", "success");

Zeigt einen Ergebnis-Dialog mit formatiertem Text (HTML-Subset). buttons pipe-getrennt, kindinfo/warn/error/success. Rückgabe = geklicktes Button-Label. Details: Ergebnis-Dialog.

ResultDialog(title)

ppptools.ResultDialog("Fertig")
    .Line("3 Elemente ersetzt.", bold: true, color: "#137333")
    .Link("Mehr", "https://ppptools.help.happy-pc.ch")
    .Show();

Fluent-Builder für den Ergebnis-Dialog: Kind · Heading · Line · Bold · Bullet · Link · Html · Buttons · Show.

Progress(text, total)

var p = ppptools.Progress("Verarbeite…", ppptools.SlideCount);
for (int s = 1; s <= ppptools.SlideCount; s++) p.Report(s, $"Folie {s}");

Fortschrittsanzeige (Balken 0…total) mit Abbrechen. Report(value, text) aktualisiert; bricht per OperationCanceledException ab, wenn „Abbrechen" geklickt wurde. Details: Fortschrittsanzeige.


Tipp: Folie zentrieren mit allen Methoden

// Variante 1 — CenterOnSlide
ppptools.CenterOnSlide(oGroup);

// Variante 2 — manuell (wenn vorher skaliert wurde)
oGroup.Left = (ppptools.SlideWidth  - (float)oGroup.Width)  / 2f;
oGroup.Top  = (ppptools.SlideHeight - (float)oGroup.Height) / 2f;

Beispiele

Beispiel Zeigt
Zahnrad AddShape, AddOval, GetSelected, Boolean-Ops, SlideWidth/Height
PostIt BuildFreeform, Duplicate, FlipH, SendBackward, SetGradient, Group
Persona BuildFreeform, AddOval, AddRect, Group, Scale, CenterOnSlide

Zurück: Advanced Snippet Editor