Freigeben über


Arbeiten mit Notizenfolien

In diesem Thema wird die Open XML SDK für Office-Klasse NotesSlide und ihre Beziehung zum PresentationML-Schema des Open XML-Dateiformats erläutert.


Notizenfolien in PresentationML

Die SPEZIFIKATION ISO/IEC 29500 beschreibt das Open XML PresentationML-Element <notes/> , das zur Darstellung von Notizenfolien in einem PresentationML-Dokument verwendet wird, wie folgt:

Dieses Element gibt das Vorhandensein einer Notizenfolie zusammen mit den entsprechenden Daten an. Auf einer Notizenfolie befinden sich alle allgemeinen Folienelemente sowie weitere Eigenschaften, die spezifisch für das Notizenelement sind.

Beispiel: Betrachten Sie die folgende PresentationML-Notizenfolie:

<p:notes>
    <p:cSld>
        …
    </p:cSld>
    …
</p:notes>

Im obigen Beispiel gibt ein Notes-Element an, dass eine Notizenfolie mit allen teilen vorhanden ist. Beachten Sie das cSld-Element, das die allgemeinen Elemente angibt, die auf jedem Folientyp angezeigt werden können, und dann geben alle Elemente zusätzliche nicht allgemeine Eigenschaften für diese Notizenfolie an.

© ISO/IEC 29500: 2016

Das <notes/> -Element ist das Stammelement des PresentationML-Notizenfolienteils. Weitere Informationen zur Gesamtstruktur der Teile und Elemente eines PresentationML-Dokuments finden Sie unter Struktur eines PresentationML-Dokuments.

In der folgenden Tabelle sind die untergeordneten Elemente des Elements aufgeführt, die <notes/> beim Arbeiten mit Notizenfolien verwendet werden, und die Open XML SDK-Klassen, die ihnen entsprechen.

PresentationML-Element Open XML SDK-Klasse
<clrMapOvr/> ColorMapOverride
<cSld/> CommonSlideData
<extLst/> ExtensionListWithModification

The following table from the ISO/IEC 29500 specification describes the attributes of the <notes/> element.

Attribute Beschreibung
showMasterPhAnim (Masterplatzhalteranimationen anzeigen) Gibt an, ob Animationen für Platzhalter aus der Masterfolie angezeigt werden sollen.

Die möglichen Werte für dieses Attribut werden durch den W3C-XML-Schemadatentyp boolean definiert.
showMasterSp (Master-Shapes anzeigen) Gibt an, ob Formen von der Masterfolie auf Folien angezeigt werden sollen.

Die möglichen Werte für dieses Attribut werden durch den W3C-XML-Schemadatentyp boolean definiert.

© ISO/IEC 29500: 2016


Open XML SDK NotesSlide-Klasse

Die OXML SDK-Klasse NotesSlide stellt das Element dar, das <notes/> im Open XML-Dateiformatschema für PresentationML-Dokumente definiert ist. Verwenden Sie die NotesSlide -Klasse, um einzelne <notes/> Elemente in einem PresentationML-Dokument zu bearbeiten.

Klassen, die untergeordnete Elemente des <notes/> Elements darstellen und daher häufig der NotesSlide Klasse zugeordnet sind, werden in der folgenden Liste angezeigt.

  • ColorMapOverride-Klasse

    Die ColorMapOverride -Klasse entspricht dem <clrMapOvr/> -Element. Die folgenden Informationen aus der SPEZIFIKATION ISO/IEC 29500 führen das <clrMapOvr/> Element ein:

    Dieses Element stellt einen Mechanismus bereit, mit dem die im <ClrMap/> -Element aufgeführten Farbschemas überschrieben werden. Wenn das <masterClrMapping/> untergeordnete Element vorhanden ist, wird das vom master definierte Farbschema verwendet. Wenn das <overrideClrMapping/> untergeordnete Element vorhanden ist, definiert es ein neues Farbschema, das für die übergeordnete Notizenfolie, die Präsentationsfolie oder das Folienlayout spezifisch ist.

© ISO/IEC 29500: 2016

  • CommonSlideData-Klasse

    Die CommonSlideData -Klasse entspricht dem <cSld/> -Element. Die folgenden Informationen aus der SPEZIFIKATION ISO/IEC 29500 führen das <cSld/> Element ein:

    Dieses Element gibt einen Container für den Folieninformationstyp an, der für alle Folientypen relevant ist. Alle Folien verwenden einen gemeinsamen Satz von Eigenschaften, die unabhängig vom Folientyp sind. Die Beschreibung dieser Eigenschaften für eine bestimmte Folie wird im Container der Folie <cSld/> gespeichert. Foliendaten, die für den vom übergeordneten Element angegebenen Folientyp spezifisch sind, werden an anderer Stelle gespeichert.

    Die tatsächlichen Daten in <cSld/> beschreiben nur die jeweilige übergeordnete Folie. Es ist nur der Typ der gespeicherten Informationen, der für alle Folien gilt.

    © ISO/IEC 29500: 2016

  • ExtensionListWithModification-Klasse

    Die ExtensionListWithModification -Klasse entspricht dem <extLst/>-Element. Die folgenden Informationen aus der SPEZIFIKATION ISO/IEC 29500 führen das <extLst/> Element ein:

    Dieses Element gibt die Erweiterungsliste mit Änderungsmöglichkeit an, in der alle zukünftigen Erweiterungen des Elementtyps <ext/> definiert sind. Die Erweiterung wird gemeinsam mit den entsprechenden künftigen Erweiterungen genutzt, um die Speicherfähigkeit des PresentationML-Frameworks zu vergrößern. Dadurch können verschiedene neue Arten von Daten systeminhärent im Framework gespeichert werden.

    [Hinweis: Die Verwendung dieses Elements extLst ermöglicht es der generierenden Anwendung, zu speichern, ob diese Erweiterungseigenschaft geändert wurde. Ende des Hinweises]

    © ISO/IEC 29500: 2016


Arbeiten mit der NotesSlide-Klasse

Wie im folgenden Codebeispiel des Open XML SDK gezeigt, ist jede instance der NotesSlide Klasse einem instance der -Klasse zugeordnet, die NotesSlidePart einen Notizenfolienteil, einen der Teile eines PresentationML-Präsentationsdateipakets und einen Teil darstellt, der für jede Notizenfolie in einer Präsentationsdatei erforderlich ist. Jede NotesSlide Klasse instance kann auch einem instance der Klasse zugeordnet sein, der NotesMaster wiederum einem ähnlich benannten Präsentationsteil zugeordnet ist, der von der NotesMasterPart -Klasse dargestellt wird.

Die NotesSlide -Klasse, die das <notes/> -Element darstellt, ist daher auch einer Reihe anderer Klassen zugeordnet, die die untergeordneten Elemente des <notes/> Elements darstellen. Zu diesen Klassen gehören, wie im folgenden Codebeispiel gezeigt, die CommonSlideData -Klasse und die ColorMapOverride -Klasse. Die ShapeTree -Klasse und die Shape -Klasse werden wiederum der CommonSlideData -Klasse zugeordnet.


Open XML SDK-Codebeispiel

In den folgenden Codeausschnitten P wird der DocumentFormat.OpenXml.Presentation Namespace und D der Namespace dargestellt.

Im folgenden Codeausschnitt wird eine Präsentation mit Presentation.Open geöffnet, und die erste SlidePart wird abgerufen oder hinzugefügt, wenn die Präsentation noch nicht über einen SlidePartverfügt.

using (PresentationDocument presentationDocument = PresentationDocument.Open(pptxPath, true) ?? throw new Exception("Presentation Document does not exist"))
{
    // Get the first slide in the presentation or use the InsertNewSlide.InsertNewSlideIntoPresentation helper method to insert a new slide.
    SlidePart slidePart = presentationDocument.PresentationPart?.SlideParts.FirstOrDefault() ?? InsertNewSlideNS.InsertNewSlide(presentationDocument, 1, "my new slide");

    // Add a new NoteSlidePart if one does not already exist
    NotesSlidePart notesSlidePart = slidePart.NotesSlidePart ?? slidePart.AddNewPart<NotesSlidePart>();

In diesem Codeausschnitt wird der a NoteSlide hinzugefügt NoteSlidePart , wenn noch keine vorhanden ist. Der NotesSlide Klassenkonstruktor erstellt Instanzen der CommonSlideData -Klasse. Der CommonSlideData Klassenkonstruktor erstellt eine instance der ShapeTree Klasse, deren Konstruktor wiederum zusätzliche Klasseninstanzen erstellt: eine instance der NonVisualGroupShapeProperties Klasse, eine instance der GroupShapeProperties Klasse und eine instance der Shape Klasse.

// Add a NoteSlide to the NoteSlidePart if one does not already exist.
notesSlidePart.NotesSlide ??= new P.NotesSlide(
    new P.CommonSlideData(
        new P.ShapeTree(
            new P.NonVisualGroupShapeProperties(
                new P.NonVisualDrawingProperties() { Id = 1, Name = "" },
                new P.NonVisualGroupShapeDrawingProperties(),
                new P.ApplicationNonVisualDrawingProperties()),
            new P.GroupShapeProperties(
                new D.Transform2D(
                    new D.Offset() { X = 0, Y = 0 },
                    new D.Extents() { Cx = 0, Cy = 0 },
                    new D.ChildOffset() { X = 0, Y = 0 },
                    new D.ChildExtents() { Cx = 0, Cy = 0 })),

Der Shape Konstruktor erstellt eine instance der NonVisualShapePropertiesKlassen , ShapePropertiesund TextBody zusammen mit den erforderlichen untergeordneten Elementen. Enthält TextBody den , der Paragraphüber einen Runverfügt, der den Text der Notiz enthält. Der Folienteil wird dann dem Notizenfolienteil hinzugefügt.

            new P.Shape(
                new P.NonVisualShapeProperties(
                    new P.NonVisualDrawingProperties() { Id = 3, Name = "test Placeholder 3" },
                    new P.NonVisualShapeDrawingProperties(),
                    new P.ApplicationNonVisualDrawingProperties(
                        new P.PlaceholderShape() { Type = PlaceholderValues.Body, Index = 1 })),
                new P.ShapeProperties(),
                new P.TextBody(
                    new D.BodyProperties(),
                    new D.Paragraph(
                        new D.Run(
                            new D.Text("This is a test note!"))))))));

notesSlidePart.AddPart(slidePart);

Der mit dem obigen Code erstellte Notizenfolienteil enthält den folgenden XML-Code.

<?xml version="1.0" encoding="utf-8"?>
<p:notes xmlns:p="http://schemas.openxmlformats.org/presentationml/2006/main">
  <p:cSld>
    <p:spTree>
      <p:nvGrpSpPr>
        <p:cNvPr id="1" name=""/>
        <p:cNvGrpSpPr/>
        <p:nvPr/>
      </p:nvGrpSpPr>
      <p:grpSpPr>
        <a:xfrm xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main">
          <a:off x="0" y="0"/>
          <a:ext cx="0" cy="0"/>
          <a:chOff x="0" y="0"/>
          <a:chExt cx="0" cy="0"/>
        </a:xfrm>
      </p:grpSpPr>
      <p:sp>
        <p:nvSpPr>
          <p:cNvPr id="3" name="test Placeholder 3"/>
          <p:cNvSpPr/>
          <p:nvPr/>
        </p:nvSpPr>
        <p:spPr/>
        <p:txBody>
          <a:bodyPr xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main"/>
          <a:p xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main">
            <a:r>
              <a:t>This is a test note!</a:t>
            </a:r>
          </a:p>
        </p:txBody>
      </p:sp>
    </p:spTree>
  </p:cSld>
</p:notes>

Die folgenden Codeausschnitte fügen die erforderlichen NotesMasterPart und ThemePart hinzu, wenn sie fehlen.

// Add the required NotesMasterPart if it is missing
NotesMasterPart notesMasterPart = notesSlidePart.NotesMasterPart ?? notesSlidePart.AddNewPart<NotesMasterPart>();

// Add a NotesMaster to the NotesMasterPart if not present
notesMasterPart.NotesMaster ??= new NotesMaster(
new P.CommonSlideData(
    new P.ShapeTree(
        new P.NonVisualGroupShapeProperties(
            new P.NonVisualDrawingProperties() { Id = 1, Name = "New Placeholder" },
            new P.NonVisualGroupShapeDrawingProperties(),
            new P.ApplicationNonVisualDrawingProperties()),
        new P.GroupShapeProperties())),
new P.ColorMap()
{
    Background1 = D.ColorSchemeIndexValues.Light1,
    Background2 = D.ColorSchemeIndexValues.Light2,
    Text1 = D.ColorSchemeIndexValues.Dark1,
    Text2 = D.ColorSchemeIndexValues.Dark2,
    Accent1 = D.ColorSchemeIndexValues.Accent1,
    Accent2 = D.ColorSchemeIndexValues.Accent2,
    Accent3 = D.ColorSchemeIndexValues.Accent3,
    Accent4 = D.ColorSchemeIndexValues.Accent4,
    Accent5 = D.ColorSchemeIndexValues.Accent5,
    Accent6 = D.ColorSchemeIndexValues.Accent6,
    Hyperlink = D.ColorSchemeIndexValues.Hyperlink,
    FollowedHyperlink = D.ColorSchemeIndexValues.FollowedHyperlink,
});

// Add a new ThemePart for the NotesMasterPart
ThemePart themePart = notesMasterPart.ThemePart ?? notesMasterPart.AddNewPart<ThemePart>();

// Add the Theme if it is missing
themePart.Theme ??= new Theme(
    new ThemeElements(
        new ColorScheme(
            new Dark1Color(
                new SystemColor() { Val = SystemColorValues.WindowText }),
            new Light1Color(
                new SystemColor() { Val = SystemColorValues.Window }),
            new Dark2Color(
                new RgbColorModelHex() { Val = "f1d7be" }),
            new Light2Color(
                new RgbColorModelHex() { Val = "171717" }),
            new Accent1Color(
                new RgbColorModelHex() { Val = "ea9f7d" }),
            new Accent2Color(
                new RgbColorModelHex() { Val = "168ecd" }),
            new Accent3Color(
                new RgbColorModelHex() { Val = "e694db" }),
            new Accent4Color(
                new RgbColorModelHex() { Val = "f0612a" }),
            new Accent5Color(
                new RgbColorModelHex() { Val = "5fd46c" }),
            new Accent6Color(
                new RgbColorModelHex() { Val = "b158d1" }),
            new D.Hyperlink(
                new RgbColorModelHex() { Val = "699f82" }),
            new FollowedHyperlinkColor(
                new RgbColorModelHex() { Val = "699f82" }))
        { Name = "Office2" },
        new D.FontScheme(
            new MajorFont(
                new LatinFont(),
                new EastAsianFont(),
                new ComplexScriptFont()),
            new MinorFont(
                new LatinFont(),
                new EastAsianFont(),
                new ComplexScriptFont()))
        { Name = "Office2" },
        new FormatScheme(
            new FillStyleList(
                new NoFill(),
                new SolidFill(),
                new D.GradientFill(),
                new D.BlipFill(),
                new D.PatternFill(),
                new GroupFill()),
            new LineStyleList(
                new D.Outline(),
                new D.Outline(),
                new D.Outline()),
            new EffectStyleList(
                new EffectStyle(
                    new EffectList()),
                new EffectStyle(
                    new EffectList()),
                new EffectStyle(
                    new EffectList())),
            new BackgroundFillStyleList(
                new NoFill(),
                new SolidFill(),
                new D.GradientFill(),
                new D.BlipFill(),
                new D.PatternFill(),
                new GroupFill()))
        { Name = "Office2" }),
    new ObjectDefaults(),
    new ExtraColorSchemeList());

Beispielcode

Nachstehend ist der vollständige Beispielcode in C# und Visual Basic aufgeführt.

using (PresentationDocument presentationDocument = PresentationDocument.Open(pptxPath, true) ?? throw new Exception("Presentation Document does not exist"))
{
    // Get the first slide in the presentation or use the InsertNewSlide.InsertNewSlideIntoPresentation helper method to insert a new slide.
    SlidePart slidePart = presentationDocument.PresentationPart?.SlideParts.FirstOrDefault() ?? InsertNewSlideNS.InsertNewSlide(presentationDocument, 1, "my new slide");

    // Add a new NoteSlidePart if one does not already exist
    NotesSlidePart notesSlidePart = slidePart.NotesSlidePart ?? slidePart.AddNewPart<NotesSlidePart>();

    // Add a NoteSlide to the NoteSlidePart if one does not already exist.
    notesSlidePart.NotesSlide ??= new P.NotesSlide(
        new P.CommonSlideData(
            new P.ShapeTree(
                new P.NonVisualGroupShapeProperties(
                    new P.NonVisualDrawingProperties() { Id = 1, Name = "" },
                    new P.NonVisualGroupShapeDrawingProperties(),
                    new P.ApplicationNonVisualDrawingProperties()),
                new P.GroupShapeProperties(
                    new D.Transform2D(
                        new D.Offset() { X = 0, Y = 0 },
                        new D.Extents() { Cx = 0, Cy = 0 },
                        new D.ChildOffset() { X = 0, Y = 0 },
                        new D.ChildExtents() { Cx = 0, Cy = 0 })),
                new P.Shape(
                    new P.NonVisualShapeProperties(
                        new P.NonVisualDrawingProperties() { Id = 3, Name = "test Placeholder 3" },
                        new P.NonVisualShapeDrawingProperties(),
                        new P.ApplicationNonVisualDrawingProperties(
                            new P.PlaceholderShape() { Type = PlaceholderValues.Body, Index = 1 })),
                    new P.ShapeProperties(),
                    new P.TextBody(
                        new D.BodyProperties(),
                        new D.Paragraph(
                            new D.Run(
                                new D.Text("This is a test note!"))))))));

    notesSlidePart.AddPart(slidePart);

    // Add the required NotesMasterPart if it is missing
    NotesMasterPart notesMasterPart = notesSlidePart.NotesMasterPart ?? notesSlidePart.AddNewPart<NotesMasterPart>();

    // Add a NotesMaster to the NotesMasterPart if not present
    notesMasterPart.NotesMaster ??= new NotesMaster(
    new P.CommonSlideData(
        new P.ShapeTree(
            new P.NonVisualGroupShapeProperties(
                new P.NonVisualDrawingProperties() { Id = 1, Name = "New Placeholder" },
                new P.NonVisualGroupShapeDrawingProperties(),
                new P.ApplicationNonVisualDrawingProperties()),
            new P.GroupShapeProperties())),
    new P.ColorMap()
    {
        Background1 = D.ColorSchemeIndexValues.Light1,
        Background2 = D.ColorSchemeIndexValues.Light2,
        Text1 = D.ColorSchemeIndexValues.Dark1,
        Text2 = D.ColorSchemeIndexValues.Dark2,
        Accent1 = D.ColorSchemeIndexValues.Accent1,
        Accent2 = D.ColorSchemeIndexValues.Accent2,
        Accent3 = D.ColorSchemeIndexValues.Accent3,
        Accent4 = D.ColorSchemeIndexValues.Accent4,
        Accent5 = D.ColorSchemeIndexValues.Accent5,
        Accent6 = D.ColorSchemeIndexValues.Accent6,
        Hyperlink = D.ColorSchemeIndexValues.Hyperlink,
        FollowedHyperlink = D.ColorSchemeIndexValues.FollowedHyperlink,
    });

    // Add a new ThemePart for the NotesMasterPart
    ThemePart themePart = notesMasterPart.ThemePart ?? notesMasterPart.AddNewPart<ThemePart>();

    // Add the Theme if it is missing
    themePart.Theme ??= new Theme(
        new ThemeElements(
            new ColorScheme(
                new Dark1Color(
                    new SystemColor() { Val = SystemColorValues.WindowText }),
                new Light1Color(
                    new SystemColor() { Val = SystemColorValues.Window }),
                new Dark2Color(
                    new RgbColorModelHex() { Val = "f1d7be" }),
                new Light2Color(
                    new RgbColorModelHex() { Val = "171717" }),
                new Accent1Color(
                    new RgbColorModelHex() { Val = "ea9f7d" }),
                new Accent2Color(
                    new RgbColorModelHex() { Val = "168ecd" }),
                new Accent3Color(
                    new RgbColorModelHex() { Val = "e694db" }),
                new Accent4Color(
                    new RgbColorModelHex() { Val = "f0612a" }),
                new Accent5Color(
                    new RgbColorModelHex() { Val = "5fd46c" }),
                new Accent6Color(
                    new RgbColorModelHex() { Val = "b158d1" }),
                new D.Hyperlink(
                    new RgbColorModelHex() { Val = "699f82" }),
                new FollowedHyperlinkColor(
                    new RgbColorModelHex() { Val = "699f82" }))
            { Name = "Office2" },
            new D.FontScheme(
                new MajorFont(
                    new LatinFont(),
                    new EastAsianFont(),
                    new ComplexScriptFont()),
                new MinorFont(
                    new LatinFont(),
                    new EastAsianFont(),
                    new ComplexScriptFont()))
            { Name = "Office2" },
            new FormatScheme(
                new FillStyleList(
                    new NoFill(),
                    new SolidFill(),
                    new D.GradientFill(),
                    new D.BlipFill(),
                    new D.PatternFill(),
                    new GroupFill()),
                new LineStyleList(
                    new D.Outline(),
                    new D.Outline(),
                    new D.Outline()),
                new EffectStyleList(
                    new EffectStyle(
                        new EffectList()),
                    new EffectStyle(
                        new EffectList()),
                    new EffectStyle(
                        new EffectList())),
                new BackgroundFillStyleList(
                    new NoFill(),
                    new SolidFill(),
                    new D.GradientFill(),
                    new D.BlipFill(),
                    new D.PatternFill(),
                    new GroupFill()))
            { Name = "Office2" }),
        new ObjectDefaults(),
        new ExtraColorSchemeList());
}

Siehe auch

Informationen zum Open XML SDK für Office

Gewusst wie: Erstellen einer Präsentation durch Bereitstellen eines Dateinamens

Vorgehensweise: Einfügen einer neuen Folie in eine Präsentation

Vorgehensweise: Löschen einer Folie aus einer Präsentation

Vorgehensweise: Anwenden eines Designs auf eine Präsentation