Anleitung: Anwenden eines Desigs auf eine Präsentation
Letzte Änderung: Donnerstag, 14. Oktober 2010
Gilt für: Excel 2010 | Office 2010 | PowerPoint 2010 | Word 2010
Inhalt dieses Artikels
Abrufen eines PresentationDocument-Objekts
Grundlegende Präsentationsdokumentstruktur
Struktur des Hyperlinkelements
Funktionsweise des Beispielcodes
Beispielcode
In diesem Thema wird erklärt, wie Sie die Klassen im Open XML SDK 2.0 für Microsoft Office zum programmgesteuerten Anwenden des Designs einer Präsentation auf eine andere Präsentation verwenden.
Die folgenden Assemblydirektiven sind zum Kompilieren des Codes in diesem Thema erforderlich.
using System;
using System.Collections.Generic;
using System.Linq;
using DocumentFormat.OpenXml.Presentation;
using DocumentFormat.OpenXml.Packaging;
Imports System
Imports System.Collections.Generic
Imports System.Linq
Imports DocumentFormat.OpenXml.Presentation
Imports DocumentFormat.OpenXml.Packaging
Abrufen eines PresentationDocument-Objekts
Im Open XML SDK stellt die PresentationDocument-Klasse ein Präsentationsdokumentpaket dar. Zum Arbeiten mit einem Präsentationsdokument müssen Sie zuerst eine Instanz der PresentationDocument-Klasse erstellen und anschließend mit dieser Instanz arbeiten. Rufen Sie zum Erstellen der Klasseninstanz aus dem Dokument die Open(String, Boolean)-Methode auf, die einen Dateipfad und als zweiten Parameter einen booleschen Wert verwendet, um anzugeben, ob das Dokument bearbeitet werden kann. Geben Sie zum Öffnen eines Dokuments mit Schreibschutz den Wert false für diesen Parameter an. Geben Sie zum Öffnen eines Dokuments mit Lese-/Schreibzugriff den Wert true für diesen Parameter an. In der folgenden using-Anweisung werden zwei Präsentationsdateien geöffnet: die Zielpräsentation, auf die ein Design angewendet werden soll, und die Quellpräsentation, auf die das Design bereits angewendet wurde. Die Quellpräsentationsdatei wird mit Schreibschutz geöffnet, und die Zielpräsentationsdatei wird mit Lese-/Schreibzugriff geöffnet. In diesem Code ist der themePresentation-Parameter eine Zeichenfolge, die den Pfad für das Quellpräsentationsdokument darstellt, und der presentationFile-Parameter ist eine Zeichenfolge, die den Pfad für das Zielpräsentationsdokument darstellt.
using (PresentationDocument themeDocument = PresentationDocument.Open(themePresentation, false))
using (PresentationDocument presentationDocument = PresentationDocument.Open(presentationFile, true))
{
// Insert other code here.
}
Using themeDocument As PresentationDocument = PresentationDocument.Open(themePresentation, False)
Using presentationDocument As PresentationDocument = PresentationDocument.Open(presentationFile, True)
' Insert other code here.
End Using
End Using
Die using-Anweisung ist eine empfohlene Alternative zur herkömmlichen Reihenfolge ".Open, .Save, .Close". Sie stellt sicher, dass die Dispose-Methode (vom Open XML SDK verwendete interne Methode zum Bereinigen von Ressourcen) bei Erreichen der schließenden Klammer automatisch aufgerufen wird. Der auf die using-Anweisung folgende Block richtet einen Bereich für das Objekt ein, das in der using-Anweisung erstellt oder benannt wird, in diesem Fall themeDocument und presentationDocument.
Grundlegende Präsentationsdokumentstruktur
Die grundlegende Dokumentstruktur eines PresentationML-Dokuments besteht aus dem Hauptteil, der die Präsentationsdefinition enthält. In dem folgenden Text aus der ISO/IEC 29500-Spezifikation wird das Gesamtformat eines PresentationML-Pakets erläutert.
Der Hauptteil eines PresentationML-Pakets beginnt mit dem Stammelement der Präsentation. Dieses Element enthält eine Präsentation, die wiederum auf eine Folienliste, eine Folienmasterliste, eine Notizenmasterliste und eine Handzettelmasterliste verweist. Die Folienliste verweist auf alle Folien in der Präsentation. Die Folienmasterliste verweist auf sämtliche in der Präsentation verwendeten Folienmaster. Der Notizenmaster enthält Informationen zur Formatierung der Notizenseiten. Und der Handzettelmaster beschreibt das Aussehen eines Handzettels.
Ein Handzettel ist ein gedruckter Foliensatz, der an die Zielgruppe zur späteren Bezugnahme verteilt werden kann.
Neben Text und Grafiken kann jede Folie Kommentare und Notizen enthalten, ein Layout aufweisen und Teil mindestens einer zielgruppenorientierten Präsentation sein. (Ein Kommentar ist eine Anmerkung der Person, die die Foliengruppe der Präsentation verwaltet. Eine Notiz ist eine Erinnerung oder eine kurze Textstelle, die für den Präsentator oder die Zielgruppe bestimmt ist.)
Andere Features, die in einem PresentationML-Dokument enthalten sein können, sind Animationen, Audio, Video und Überblendungen zwischen den Folien.
Ein PresentationML-Dokument wird nicht als ein großer Textkörper in einem einzelnen Teil gespeichert. Die Elemente, mit deren Hilfe bestimmte Funktionsgruppierungen erfolgen, sind stattdessen in mehreren Teilen gespeichert. Beispielsweise sind alle Kommentare in einem Dokument in einem Kommentarteil gespeichert, wobei jede Folie über einen eigenen Teil verfügt.
© ISO/IEC29500: 2008.
Das folgende XML-Codesegment stellt eine Präsentation dar, die zwei Folien mit den IDs 267 und 256 enthält.
<p:presentation xmlns:p="…" … >
<p:sldMasterIdLst>
<p:sldMasterId
xmlns:rel="http://…/relationships" rel:id="rId1"/>
</p:sldMasterIdLst>
<p:notesMasterIdLst>
<p:notesMasterId
xmlns:rel="http://…/relationships" rel:id="rId4"/>
</p:notesMasterIdLst>
<p:handoutMasterIdLst>
<p:handoutMasterId
xmlns:rel="http://…/relationships" rel:id="rId5"/>
</p:handoutMasterIdLst>
<p:sldIdLst>
<p:sldId id="267"
xmlns:rel="http://…/relationships" rel:id="rId2"/>
<p:sldId id="256"
xmlns:rel="http://…/relationships" rel:id="rId3"/>
</p:sldIdLst>
<p:sldSz cx="9144000" cy="6858000"/>
<p:notesSz cx="6858000" cy="9144000"/>
</p:presentation>
Mit dem Open XML SDK 2.0 können Sie eine Dokumentstruktur und Inhalte erstellen, indem Sie stark typisierte Klassen verwenden, die PresentationML-Elementen entsprechen. Diese Klassen sind im DocumentFormat.OpenXml.Presentation-Namespace enthalten. Die folgende Tabelle enthält die Namen der Klassen, die den Elementen sld, sldLayout, sldMaster und notesMaster entsprechen.
PresentationML-Element |
Open XML SDK 2.0-Klasse |
Beschreibung |
---|---|---|
sld |
Präsentationsfolie. Das SlidePart-Stammelement. |
|
sldLayout |
Das Folienlayout. Das SlideLayoutPart-Stammelement. |
|
sldMaster |
Der Folienmaster. Das SlideMasterPart-Stammelement. |
|
notesMaster |
Notizenmaster (oder Handzettelmaster). Das NotesMasterPart-Stammelement. |
Struktur des Hyperlinkelements
Im folgenden Text aus der ISO/IEC 29500-Spezifikation erhalten Sie hierzu nützliche Informationen.
Dieses Element definiert den komplexen Typ auf Stammebene, der einem freigegebenen Stylesheet (oder Design) zugeordnet ist. Es enthält alle verschiedenen Formatierungsoptionen, die für ein Dokument über ein Design verfügbar sind, und es definiert das gesamte Aussehen und Verhalten des Dokuments, wenn Objekte mit Designs innerhalb des Dokuments verwendet werden. [Ein Beispiel: Stellen Sie sich das folgende Bild als ein Beispiel für verschiedene Designs vor, die auf eine Präsentation angewendet sind.
In diesem Beispiel wird gezeigt, wie ein Design die Schriftart, Farben, Hintergründe, Füllungen und Effekte für verschiedene Objekte in einer Präsentation beeinflussen kann. Ende des Beispiels]
© ISO/IEC29500: 2008.
In der folgenden Tabelle sind die möglichen untergeordneten Typen der Theme-Klasse aufgeführt.
PresentationML-Element |
Open XML SDK 2.0-Klasse |
Beschreibung |
---|---|---|
custClrLst |
Benutzerdefinierte Farbliste |
|
extLst |
Erweiterungsliste |
|
extraClrSchemeLst |
Liste zusätzlicher Farbschemata |
|
objectDefaults |
Objektstandardwerte |
|
themeElements |
Designelemente |
Das folgende XML-Schemafragment definiert vier Teile des Designelements. Das themeElements-Element enthält die wichtigste Formatierung, die innerhalb des Designs definiert ist. Die anderen Teile stellen Überschreibungen, Standardwerte und Ergänzungen zu den Informationen in themeElements bereit. Der komplexe Typ, mit dem ein Design definiert ist (CT_OfficeStyleSheet) wird wie folgt definiert:
<complexType name="CT_OfficeStyleSheet">
<sequence>
<element name="themeElements" type="CT_BaseStyles" minOccurs="1" maxOccurs="1"/>
<element name="objectDefaults" type="CT_ObjectStyleDefaults" minOccurs="0" maxOccurs="1"/>
<element name="extraClrSchemeLst" type="CT_ColorSchemeList" minOccurs="0" maxOccurs="1"/>
<element name="custClrLst" type="CT_CustomColorList" minOccurs="0" maxOccurs="1"/>
<element name="extLst" type="CT_OfficeArtExtensionList" minOccurs="0" maxOccurs="1"/>
</sequence>
<attribute name="name" type="xsd:string" use="optional" default=""/>
</complexType>
Dieser komplexe Typ umfasst auch ein CT_OfficeArtExtensionList-Element, das für die zukünftige Erweiterbarkeit dieses komplexen Typs verwendet wird.
Funktionsweise des Beispielcodes
Der Beispielcode besteht aus zwei Überladungen der ApplyThemeToPresentation-Methode und der GetSlideLayoutType-Methode. Das folgende Codesegment zeigt die erste überladene Methode, in der die beiden Präsentationsdateien themePresentation und presentationFile geöffnet und an die zweite überladene Methode als Parameter übergeben werden.
// Apply a new theme to the presentation.
public static void ApplyThemeToPresentation(string presentationFile, string themePresentation)
{
using (PresentationDocument themeDocument = PresentationDocument.Open(themePresentation, false))
using (PresentationDocument presentationDocument = PresentationDocument.Open(presentationFile, true))
{
ApplyThemeToPresentation(presentationDocument, themeDocument);
}
}
' Apply a new theme to the presentation.
Public Shared Sub ApplyThemeToPresentation(ByVal presentationFile As String, ByVal themePresentation As String)
Using themeDocument As PresentationDocument = PresentationDocument.Open(themePresentation, False)
Using presentationDocument As PresentationDocument = PresentationDocument.Open(presentationFile, True)
ApplyThemeToPresentation(presentationDocument, themeDocument)
End Using
End Using
End Sub
In der zweiten überladenen Methode wird zunächst überprüft, ob eine der Präsentationen leer ist. In diesem Fall würde eine Ausnahme ausgegeben. Der Code ruft dann den Präsentationsteil des Präsentationsdokuments ab, indem ein PresentationPart-Objekt deklariert wird und gleich dem Präsentationsteil des übergebenen PresentationDocument-Zielobjekts festgelegt wird. Dann werden die Folienmasterteile aus den Präsentationsteilen der beiden übergebenen Objekte und die Beziehungs-ID des Folienmasterteils der Zielpräsentation abgerufen.
// Apply a new theme to the presentation.
public static void ApplyThemeToPresentation(PresentationDocument presentationDocument, PresentationDocument themeDocument)
{
if (presentationDocument == null)
{
throw new ArgumentNullException("presentationDocument");
}
if (themeDocument == null)
{
throw new ArgumentNullException("themeDocument");
}
// Get the presentation part of the presentation document.
PresentationPart presentationPart = presentationDocument.PresentationPart;
// Get the existing slide master part.
SlideMasterPart slideMasterPart = presentationPart.SlideMasterParts.ElementAt(0);
string relationshipId = presentationPart.GetIdOfPart(slideMasterPart);
// Get the new slide master part.
SlideMasterPart newSlideMasterPart = themeDocument.PresentationPart.SlideMasterParts.ElementAt(0);
Apply a new theme to the presentation.
Public Shared Sub ApplyThemeToPresentation(ByVal presentationDocument As PresentationDocument, ByVal themeDocument As PresentationDocument)
If presentationDocument Is Nothing Then
Throw New ArgumentNullException("presentationDocument")
End If
If themeDocument Is Nothing Then
Throw New ArgumentNullException("themeDocument")
End If
' Get the presentation part of the presentation document.
Dim presentationPart As PresentationPart = presentationDocument.PresentationPart
' Get the existing slide master part.
Dim slideMasterPart As SlideMasterPart = presentationPart.SlideMasterParts.ElementAt(0)
Dim relationshipId As String = presentationPart.GetIdOfPart(slideMasterPart)
' Get the new slide master part.
Dim newSlideMasterPart As SlideMasterPart = themeDocument.PresentationPart.SlideMasterParts.ElementAt(0)
Der Code entfernt dann den vorhandenen Designteil und den Folienmasterteil aus der Zielpräsentation. Durch die Wiederverwendung der alten Beziehungs-ID wird der neue Folienmasterteil aus der Quellpräsentation der Zielpräsentation hinzugefügt. Zudem wird der Designteil der Zielpräsentation hinzugefügt.
// Remove the existing theme part.
presentationPart.DeletePart(presentationPart.ThemePart);
// Remove the old slide master part.
presentationPart.DeletePart(slideMasterPart);
// Import the new slide master part, and reuse the old relationship ID.
newSlideMasterPart = presentationPart.AddPart(newSlideMasterPart, relationshipId);
// Change to the new theme part.
presentationPart.AddPart(newSlideMasterPart.ThemePart);
' Remove the existing theme part.
presentationPart.DeletePart(presentationPart.ThemePart)
' Remove the old slide master part.
presentationPart.DeletePart(slideMasterPart)
' Import the new slide master part, and reuse the old relationship ID.
newSlideMasterPart = presentationPart.AddPart(newSlideMasterPart, relationshipId)
' Change to the new theme part.
presentationPart.AddPart(newSlideMasterPart.ThemePart)
Der Code durchläuft alle Folienlayoutteile im Folienmasterteil und fügt sie der Liste der neuen Folienlayouts hinzu. Er gibt den Standardlayouttyp an. Für dieses Beispiel lautet der Code für den Standardlayouttyp Title and Content.
Dictionary<string, SlideLayoutPart> newSlideLayouts = new Dictionary<string, SlideLayoutPart>();
foreach (var slideLayoutPart in newSlideMasterPart.SlideLayoutParts)
{
newSlideLayouts.Add(GetSlideLayoutType(slideLayoutPart), slideLayoutPart);
}
string layoutType = null;
SlideLayoutPart newLayoutPart = null;
// Insert the code for the layout for this example.
string defaultLayoutType = "Title and Content";
Dim newSlideLayouts As New Dictionary(Of String, SlideLayoutPart)()
For Each slideLayoutPart In newSlideMasterPart.SlideLayoutParts
newSlideLayouts.Add(GetSlideLayoutType(slideLayoutPart), slideLayoutPart)
Next slideLayoutPart
Dim layoutType As String = Nothing
Dim newLayoutPart As SlideLayoutPart = Nothing
' Insert the code for the layout for this example.
Dim defaultLayoutType As String = "Title and Content"
Der Code durchläuft alle Folienteile in der Zielpräsentation und entfernt die Folienlayoutbeziehung in allen Folien. Er verwendet die GetSlideLayoutType-Methode, um nach dem Layouttyp des Folienlayoutteils zu suchen. Für jede Folie mit vorhandenem Folienlayoutteil wird ein neuer Folienlayoutteil entsprechend dem Typ hinzugefügt, der zuvor vorhanden war. Für jede Folie ohne vorhandenen Folienlayoutteil wird ein neuer Folienlayoutteil entsprechend dem Standardtyp hinzugefügt.
// Remove the slide layout relationship on all slides.
foreach (var slidePart in presentationPart.SlideParts)
{
layoutType = null;
if (slidePart.SlideLayoutPart != null)
{
// Determine the slide layout type for each slide.
layoutType = GetSlideLayoutType(slidePart.SlideLayoutPart);
// Delete the old layout part.
slidePart.DeletePart(slidePart.SlideLayoutPart);
}
if (layoutType != null && newSlideLayouts.TryGetValue(layoutType, out newLayoutPart))
{
// Apply the new layout part.
slidePart.AddPart(newLayoutPart);
}
else
{
newLayoutPart = newSlideLayouts[defaultLayoutType];
// Apply the new default layout part.
slidePart.AddPart(newLayoutPart);
}
}
' Remove the slide layout relationship on all slides.
For Each slidePart In presentationPart.SlideParts
layoutType = Nothing
If slidePart.SlideLayoutPart IsNot Nothing Then
' Determine the slide layout type for each slide.
layoutType = GetSlideLayoutType(slidePart.SlideLayoutPart)
' Delete the old layout part.
slidePart.DeletePart(slidePart.SlideLayoutPart)
End If
If layoutType IsNot Nothing AndAlso newSlideLayouts.TryGetValue(layoutType, newLayoutPart) Then
' Apply the new layout part.
slidePart.AddPart(newLayoutPart)
Else
newLayoutPart = newSlideLayouts(defaultLayoutType)
' Apply the new default layout part.
slidePart.AddPart(newLayoutPart)
End If
Next slidePart
Zum Abrufen des Folienlayouttyps verwendet der Code die GetSlideLayoutType-Methode, die den Folienlayoutteil als Parameter enthält, und gibt an die zweite überladene ApplyThemeToPresentation-Methode eine Zeichenfolge zurück, die den Namen des Folienlayouttyps darstellt.
// Get the slide layout type.
public static string GetSlideLayoutType(SlideLayoutPart slideLayoutPart)
{
CommonSlideData slideData = slideLayoutPart.SlideLayout.CommonSlideData;
// Remarks: If this is used in production code, check for a null reference.
return slideData.Name;}
' Get the slide layout type.
Public Shared Function GetSlideLayoutType(ByVal slideLayoutPart As SlideLayoutPart) As String
Dim slideData As CommonSlideData = slideLayoutPart.SlideLayout.CommonSlideData
' Remarks: If this is used in production code, check for a null reference.
Return slideData.Name
End Function
Beispielcode
Es folgt der vollständige Beispielcode, den Sie zum Kopieren eines Designs aus einer Präsentation in eine andere verwenden können. Zur Verwendung des Programms müssen Sie zwei Präsentationen erstellen: eine Quellpräsentation mit dem Design, das Sie kopieren möchten (z. B. Myppt9-theme.pptx), und eine Zielpräsentation (z. B. Myppt9.pptx). Für den Kopiervorgang können Sie den folgenden Aufruf im Programm verwenden.
string presentationFile=@"C:\Users\Public\Documents\myppt2.pptx";
string themePresentation = @"C:\Users\Public\Documents\myppt2-theme.pptx";
ApplyThemeToPresentation(presentationFile, themePresentation);
Dim presentationFile As String = "C:\Users\Public\Documents\myppt2.pptx"
Dim themePresentation As String = "C:\Users\Public\Documents\myppt2-theme.pptx"
ApplyThemeToPresentation(presentationFile, themePresentation)
Nach Durchführung dieses Aufrufs können Sie die Datei Myppt2.pptx überprüfen, und es sollte dasselbe Design angezeigt werden wie in der Datei Myppt9-theme.pptx.
// Apply a new theme to the presentation.
public static void ApplyThemeToPresentation(string presentationFile, string themePresentation)
{
using (PresentationDocument themeDocument = PresentationDocument.Open(themePresentation, false))
using (PresentationDocument presentationDocument = PresentationDocument.Open(presentationFile, true))
{
ApplyThemeToPresentation(presentationDocument, themeDocument);
}
}
// Apply a new theme to the presentation.
public static void ApplyThemeToPresentation(PresentationDocument presentationDocument, PresentationDocument themeDocument)
{
if (presentationDocument == null)
{
throw new ArgumentNullException("presentationDocument");
}
if (themeDocument == null)
{
throw new ArgumentNullException("themeDocument");
}
// Get the presentation part of the presentation document.
PresentationPart presentationPart = presentationDocument.PresentationPart;
// Get the existing slide master part.
SlideMasterPart slideMasterPart = presentationPart.SlideMasterParts.ElementAt(0);
string relationshipId = presentationPart.GetIdOfPart(slideMasterPart);
// Get the new slide master part.
SlideMasterPart newSlideMasterPart = themeDocument.PresentationPart.SlideMasterParts.ElementAt(0);
// Remove the existing theme part.
presentationPart.DeletePart(presentationPart.ThemePart);
// Remove the old slide master part.
presentationPart.DeletePart(slideMasterPart);
// Import the new slide master part, and reuse the old relationship ID.
newSlideMasterPart = presentationPart.AddPart(newSlideMasterPart, relationshipId);
// Change to the new theme part.
presentationPart.AddPart(newSlideMasterPart.ThemePart);
Dictionary<string, SlideLayoutPart> newSlideLayouts = new Dictionary<string, SlideLayoutPart>();
foreach (var slideLayoutPart in newSlideMasterPart.SlideLayoutParts)
{
newSlideLayouts.Add(GetSlideLayoutType(slideLayoutPart), slideLayoutPart);
}
string layoutType = null;
SlideLayoutPart newLayoutPart = null;
// Insert the code for the layout for this example.
string defaultLayoutType = "Title and Content";
// Remove the slide layout relationship on all slides.
foreach (var slidePart in presentationPart.SlideParts)
{
layoutType = null;
if (slidePart.SlideLayoutPart != null)
{
// Determine the slide layout type for each slide.
layoutType = GetSlideLayoutType(slidePart.SlideLayoutPart);
// Delete the old layout part.
slidePart.DeletePart(slidePart.SlideLayoutPart);
}
if (layoutType != null && newSlideLayouts.TryGetValue(layoutType, out newLayoutPart))
{
// Apply the new layout part.
slidePart.AddPart(newLayoutPart);
}
else
{
newLayoutPart = newSlideLayouts[defaultLayoutType];
// Apply the new default layout part.
slidePart.AddPart(newLayoutPart);
}
}
}
// Get the slide layout type.
public static string GetSlideLayoutType(SlideLayoutPart slideLayoutPart)
{
CommonSlideData slideData = slideLayoutPart.SlideLayout.CommonSlideData;
// Remarks: If this is used in production code, check for a null reference.
return slideData.Name;
}
' Apply a new theme to the presentation.
Public Sub ApplyThemeToPresentation(ByVal presentationFile As String, ByVal themePresentation As String)
Dim themeDocument As PresentationDocument = PresentationDocument.Open(themePresentation, False)
Dim presentationDoc As PresentationDocument = PresentationDocument.Open(presentationFile, True)
Using (themeDocument)
Using (presentationDoc)
ApplyThemeToPresentation(presentationDoc, themeDocument)
End Using
End Using
End Sub
' Apply a new theme to the presentation.
Public Sub ApplyThemeToPresentation(ByVal presentationDocument As PresentationDocument, ByVal themeDocument As PresentationDocument)
If (presentationDocument Is Nothing) Then
Throw New ArgumentNullException("presentationDocument")
End If
If (themeDocument Is Nothing) Then
Throw New ArgumentNullException("themeDocument")
End If
' Get the presentation part of the presentation document.
Dim presentationPart As PresentationPart = presentationDocument.PresentationPart
' Get the existing slide master part.
Dim slideMasterPart As SlideMasterPart = presentationPart.SlideMasterParts.ElementAt(0)
Dim relationshipId As String = presentationPart.GetIdOfPart(slideMasterPart)
' Get the new slide master part.
Dim newSlideMasterPart As SlideMasterPart = themeDocument.PresentationPart.SlideMasterParts.ElementAt(0)
' Remove the theme part.
presentationPart.DeletePart(presentationPart.ThemePart)
' Remove the old slide master part.
presentationPart.DeletePart(slideMasterPart)
' Import the new slide master part, and reuse the old relationship ID.
newSlideMasterPart = presentationPart.AddPart(newSlideMasterPart, relationshipId)
' Change to the new theme part.
presentationPart.AddPart(newSlideMasterPart.ThemePart)
Dim newSlideLayouts As Dictionary(Of String, SlideLayoutPart) = New Dictionary(Of String, SlideLayoutPart)()
For Each slideLayoutPart As Object In newSlideMasterPart.SlideLayoutParts
newSlideLayouts.Add(GetSlideLayoutType(slideLayoutPart), slideLayoutPart)
Next
Dim layoutType As String = Nothing
Dim newLayoutPart As SlideLayoutPart = Nothing
' Insert the code for the layout for this example.
Dim defaultLayoutType As String = "Title and Content"
' Remove the slide layout relationship on all slides.
For Each slidePart As Object In presentationPart.SlideParts
layoutType = Nothing
If (Not (slidePart.SlideLayoutPart) Is Nothing) Then
' Determine the slide layout type for each slide.
layoutType = GetSlideLayoutType(slidePart.SlideLayoutPart)
' Delete the old layout part.
slidePart.DeletePart(slidePart.SlideLayoutPart)
End If
If ((Not (layoutType) Is Nothing) AndAlso newSlideLayouts.TryGetValue(layoutType, newLayoutPart)) Then
' Apply the new layout part.
slidePart.AddPart(newLayoutPart)
Else
newLayoutPart = newSlideLayouts(defaultLayoutType)
' Apply the new default layout part.
slidePart.AddPart(newLayoutPart)
End If
Next
End Sub
' Get the type of the slide layout.
Public Function GetSlideLayoutType(ByVal slideLayoutPart As SlideLayoutPart) As String
Dim slideData As CommonSlideData = slideLayoutPart.SlideLayout.CommonSlideData
' Remarks: If this is used in production code, check for a null reference.
Return slideData.Name
End Function