Advanced Snippet Editor
Der Advanced Snippet Editor ermöglicht es, PowerPoint-Shapes direkt mit C#-Code zu erstellen, zu testen und als Snippet in der Bibliothek zu speichern. Scripts werden mit Roslyn (Microsoft C# Scripting) zur Laufzeit ausgeführt.
Kein Support
Der Advanced Snippet Editor richtet sich an erfahrene Nutzer mit C#-Kenntnissen.
PPPTools bietet für selbst erstellte Scripts keinen Support.
Fehlerhafte Scripts können unerwartete Auswirkungen auf die geöffnete Präsentation haben.
Aufrufen
- Burger-Menü ≡ → Advanced Snippet Editor
- oder: Ribbon → Content Manager → Advanced Snippet Editor
Die Taskpane öffnet sich automatisch in der breiten Ansicht.
Interface
| Bereich | Beschreibung |
|---|---|
| Zeilennummern | Schmales Panel links vom Code-Feld — zeigt Zeilennummern synchron beim Scrollen |
| Code-Feld | C#-Script eingeben oder einfügen |
| Cursor-Anzeige | Zeigt aktuelle Zeile und Spalte (rechts in der Toolbar: Ln 1 Col 1) |
| Fehler-Panel | Zeigt Compiler- und Laufzeitfehler (erscheint automatisch bei Fehler) |
Toolbar
Die Toolbar ist in Schaltflächen-Gruppen organisiert. Schaltflächen mit einem kleinen Pfeil ▾ öffnen ein Dropdown mit Optionen.
Ausführen & Speichern
| Schaltfläche | Funktion |
|---|---|
| ▶ Ausführen | Script auf der aktiven Folie ausführen |
| 💾 Speichern ▾ | Dropdown: Snippet speichern oder als Draft zur öffentlichen Bibliothek hochladen |
Dropdown «💾 Speichern»:
| Option | Beschreibung |
|---|---|
| Als Snippet speichern | Script ausführen, Vorschaubild generieren, Metadaten eingeben und lokal speichern |
| Als Draft hochladen | Snippet als Entwurf zur öffentlichen Bibliothek senden (zur Freigabe durch Admin) |
Analyse & Code
| Schaltfläche | Funktion |
|---|---|
| 📂 Laden | Code eines bestehenden Snippets in den Editor laden |
| 🔍 Analyse ▾ | Dropdown mit Analyse- und Code-Werkzeugen |
Dropdown «🔍 Analyse»:
| Option | Beschreibung |
|---|---|
| Code analysieren | Script statisch analysieren: erkannte @param-Definitionen, Compiler-Warnungen und -Fehler im Dialog anzeigen |
| Code generieren (ersetzen) | ppptools.*-Code aus dem selektierten Shape generieren und den Editor-Inhalt ersetzen (nur wenn leer oder Starter-Template) |
| Code generieren (anfügen) | Generierten Code an den bestehenden Editor-Inhalt anhängen (mit Trennkommentar) |
| Nodes anzeigen | Knotenpunkte des selektierten Shapes als farbige Markierungen auf der Folie visualisieren |
| Editor zurücksetzen | Code auf das Starter-Template zurücksetzen und Fehler-Panel leeren |
Zeilennummern & Cursor-Position
Das schmale Panel links vom Code-Feld zeigt automatisch die Zeilennummern — synchron beim vertikalen Scrollen. Rechts in der Toolbar wird die aktuelle Cursor-Position angezeigt:
Ln 12 Col 5
Die Anzeige aktualisiert sich bei jeder Cursor-Bewegung.
Verfügbare Variablen
Im Script stehen folgende Variablen direkt zur Verfügung:
| Variable | Typ | Beschreibung |
|---|---|---|
ppptools |
AdvancedScriptHelper |
Alle PowerPoint-Operationen (Shape-Erstellung, Selektion, Boolean-Ops, Styling …) |
Params |
SnippetParamBag |
Parameter-Werte aus dem @param-Dialog (bei parametrisierten Snippets) |
Kein direkter COM-Zugriff
oSlide und aPowerPoint sind im Script nicht verfügbar — alle Operationen erfolgen
über ppptools.*-Methoden. Das verhindert unkontrollierten Zugriff auf die PowerPoint-Anwendung.
ppptools-Methoden (Übersicht)
→ Vollständige Referenz mit Parametern und Codebeispielen: PPPTools-Referenz
| Kategorie | Methoden |
|---|---|
| Folie | SlideWidth, SlideHeight |
| Erstellen | AddShape, AddRect, AddOval, BuildFreeform, AddPolygon, AddPolyline |
| Selektion | GetSelected, GetSelectedRange |
| Boolean-Ops | Union, Intersect, Combine, Subtract |
| Gruppieren | GroupSelected, Group |
| Duplizieren | Duplicate |
| Z-Order | SendBackward, BringForward, SendToBack, BringToFront |
| Spiegeln | FlipH, FlipV |
| Position | CenterOnSlide, Scale |
| Styling | SetFill, SetGradient, SetLine, HideLine, SetText |
| Animationen | AddAnimation |
Wichtige Scripting-Regeln
Roslyn-Scripts laufen in einem speziellen Kontext. Folgende Regeln müssen eingehalten werden:
var / dynamic statt Shape
Der Typ Shape existiert in zwei Namespaces gleichzeitig (Microsoft.Office.Core und Microsoft.Office.Interop.PowerPoint) — das führt zu einem Compiler-Fehler.
// ❌ Fehler — ambiguous reference (wenn Shape-Typen gemischt verwendet werden)
Shape oRect = ppptools.AddRect(...);
// ✅ Korrekt
var oRect = ppptools.AddRect(...);
Lokale Funktion statt Action<T>
Action<> liegt im System-Namespace, der nicht automatisch importiert ist.
// ❌ Fehler
Action<Shape> style = sh => { sh.Fill.ForeColor.RGB = ...; };
// ✅ Korrekt — lokale void-Funktion
void ApplyStyle(dynamic sh)
{
sh.Fill.ForeColor.RGB = ...;
}
Selektion für Boolean-Operationen
List<Shape> ist wegen des Namespace-Konflikts nicht direkt verwendbar. Shapes werden stattdessen über .Select() selektiert:
// ✅ Korrekt
oShape1.Select(MsoTriState.msoTrue); // erstes Shape: Replace = true
oShape2.Select(MsoTriState.msoFalse); // weiteres Shape: Replace = false
ppptools.Union();
dynamic oResult = ppptools.GetSelected(); // Ergebnis-Shape abgreifen
Beispiele
Jedes Beispiel hat eine eigene Seite mit Ergebnis-Vorschau, vollständigem Code und Schritt-für-Schritt-Erklärung.
Grundlagen-Beispiele (Boolean-Operationen):
| # | Beispiel | Themen |
|---|---|---|
| 1 | Rechteck | ppptools.AddRect, Füllfarbe, Rahmen entfernen |
| 2 | Kreis | ppptools.AddOval, Mittelpunkt-Berechnung, Rahmenfarbe |
| 3 | Union | Selektions-Muster, ppptools.Union(), ppptools.GetSelected() |
| 4 | Quadrat mit Loch | ppptools.Combine(), echte geometrische Löcher |
| 5 | Zahnrad | 3 Boolean-Ops verketten, Adjustments[1], alle Zahnzahlen |
Vollständige parametrisierte Beispiele (alle ppptools-Methoden):
| Beispiel | ppptools-Methoden |
|---|---|
| Zahnrad (parametrisiert) | AddShape, AddOval, GetSelected, GetSelectedRange, Union, Intersect, Combine, SlideWidth/Height |
| PostIt (parametrisiert) | BuildFreeform, AddRect, GetSelected, Duplicate, Intersect, Subtract, FlipH, SendBackward, SetGradient, HideLine, Group |
| Persona (parametrisiert) | BuildFreeform, AddOval, AddRect, Group, Scale, SlideWidth/Height |
Workflow
Code aus selektiertem Shape generieren
Die Optionen Code generieren (ersetzen) und Code generieren (anfügen) lesen das aktuell in PowerPoint selektierte Shape und erzeugen sofort ausführbaren ppptools.*-Code.
Ersetzen vs. Anfügen:
| Option | Verhalten |
|---|---|
| Code generieren (ersetzen) | Editor ist leer oder zeigt nur das Starter-Template → Code wird direkt eingefügt und ersetzt den Inhalt |
| Code generieren (anfügen) | Vorhandener Code bleibt erhalten → neuer Code wird mit Trennkommentar angehängt |
Was wird generiert:
| Shape-Typ | Generierter Code |
|---|---|
| Rechteck | ppptools.AddRect(...) |
| Oval / Kreis | ppptools.AddOval(...) |
| Anderes AutoShape | ppptools.AddShape(MsoAutoShapeType.xxx, ...) |
| FreeForm (nur gerade Segmente) | ppptools.AddPolygon(new float[]{...}, new float[]{...}) |
| FreeForm (mit Kurven) | ppptools.BuildFreeform(...) + AddNodes(...) |
| Gruppe | Rekursiver Code für alle Elemente + ppptools.Group(...) |
| Füllung | ppptools.SetFill(...) oder ppptools.SetGradient(...) |
| Rahmen | ppptools.SetLine(...) oder ppptools.HideLine(...) |
| Text | ppptools.SetText(...) |
| Animationen | ppptools.AddAnimation(...) inkl. Timing |
Idealer Workflow
Shape in PowerPoint manuell zeichnen → Code generieren (ersetzen) → Editor zeigt den exakten Code zum Nacherstellen → Parameter anpassen → ▶ Ausführen zum Testen → 💾 Als Snippet speichern.
Nodes anzeigen
Die Option Nodes anzeigen platziert farbige Markierungen direkt auf der Folie für jeden Knotenpunkt des selektierten Shapes.
FreeForm-Shapes
Bei FreeForm-Shapes wird jeder Knoten mit Koordinaten, Index, Segment-Typ (Line / Curve) und Editing-Typ (Corner / Auto) beschriftet.
Farb-Kodierung:
| Farbe | Bedeutung |
|---|---|
| 🟢 Grün | Start-Knoten (Index 0) |
| 🔴 Rot | Zwischenknoten |
| 🔵 Blau | Letzter Knoten |
Standard-Shapes (Rechteck, Oval, AutoShape …)
Bei Standard-Shapes werden die 4 Eckpunkte (TL / TR / BR / BL) und der Mittelpunkt (C) angezeigt:
| Marker | Position | Form |
|---|---|---|
| TL / TR / BR / BL | Ecken | Kleiner blauer Kreis |
| C | Mittelpunkt | Kleiner orangefarbener Diamant |
Darüber erscheint ein Info-Label mit Name, Typ und Abmessungen des Shapes.
Aufräumen
Markierungen nach der Analyse löschen: Alle Shapes mit dem Namen Node_*, NodeLabel_* oder NodeInfo_* markieren und löschen, oder Ctrl+Z verwenden.
Code analysieren
Die Option Code analysieren prüft das aktuelle Script statisch und zeigt das Ergebnis in einem Dialog:
- Erkannte
@param-Definitionen (Name, Typ, Standardwert) - Compiler-Warnungen
- Compiler-Fehler
Nützlich um zu prüfen, ob alle @param-Deklarationen korrekt sind, bevor das Script ausgeführt wird.
→ Mehr zu @param: Parametrisierte Snippets
Script testen
- Code in das Code-Feld eingeben oder per 📂 Laden ein bestehendes Snippet öffnen
- ▶ Ausführen klicken — das Shape erscheint auf der aktiven Folie
- Bei Fehlern: Fehler-Panel lesen, Code korrigieren, erneut ausführen
- Testweise erstellte Shapes manuell löschen (Entf-Taste)
Hinweis
Es muss eine Präsentation geöffnet und eine Folie aktiv sein.
Als Snippet speichern
- 💾 Speichern ▾ → Als Snippet speichern klicken
- Script wird ausgeführt — neu erstellte Shapes werden automatisch erkannt
- Vorschaubild wird aus den neuen Shapes generiert
- Shapes werden nach dem Vorschaubild-Export wieder gelöscht
- Metadaten-Dialog: Name*, Kategorie, Tags, Beschreibung usw. eingeben
- Speichern — Snippet erscheint sofort in der Galerie
Als Draft zur öffentlichen Bibliothek hochladen
Fertige Snippets können direkt aus dem Editor als Entwurf (Draft) zur öffentlichen Bibliothek gesendet werden:
- 💾 Speichern ▾ → Als Draft hochladen klicken
- Script wird ausgeführt und ein Vorschaubild generiert
- Metadaten-Dialog ausfüllen (Name*, Kategorie, Tags, Beschreibung)
- Snippet wird als Draft an den Library-Server übertragen
- Ein Admin prüft und veröffentlicht das Snippet
Draft-Status
Nach dem Upload ist das Snippet noch nicht öffentlich — es muss zuerst von einem Admin geprüft und freigegeben werden.
Microsoft-Dokumentation
| Thema | Link |
|---|---|
| Alle Shape-Typen (MsoAutoShapeType) | learn.microsoft.com |
| Shapes.AddShape Methode | learn.microsoft.com |
| Shape-Objekt (alle Eigenschaften) | learn.microsoft.com |
| FillFormat (Füllung) | learn.microsoft.com |
| LineFormat (Rahmen) | learn.microsoft.com |