Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
In diesem Thema wird gezeigt, wie Sie die Klassen im Open XML SDK für Office verwenden, um alle externen Links in einer Präsentation programmgesteuert abzurufen.
Abrufen eines PresentationDocument-Objekts
Im Open XML SDK stellt die PresentationDocument -Klasse ein Präsentationsdokumentpaket dar. Um mit einem Präsentationsdokument zu arbeiten, erstellen Sie zuerst eine instance der PresentationDocument
Klasse, und arbeiten Sie dann mit diesem instance. Um die Klasse instance aus dem Dokument zu erstellen, rufen Sie die Open -Methode auf, die einen Dateipfad verwendet, und einen booleschen Wert als zweiten Parameter, um anzugeben, ob ein Dokument bearbeitet werden kann. Legen Sie diesen zweiten Parameter auf fest false
, um die Datei für schreibgeschützten Zugriff zu öffnen, oder true
wenn Sie die Datei für Lese-/Schreibzugriff öffnen möchten. In diesem Thema empfiehlt es sich, die Datei für den schreibgeschützten Zugriff zu öffnen, um die Datei vor versehentlichem Schreiben zu schützen. Die folgende using
Anweisung öffnet die Datei für den schreibgeschützten Zugriff. In diesem Codesegment ist der fileName
Parameter eine Zeichenfolge, die den Pfad für die Datei darstellt, aus der Sie das Dokument öffnen möchten.
// Open the presentation file as read-only.
using (PresentationDocument document = PresentationDocument.Open(fileName, false))
Mit v3.0.0 und höher wurde die Close() -Methode entfernt, um sich auf die using-Anweisung zu verlassen.
Dadurch wird sichergestellt, dass die Dispose() -Methode automatisch aufgerufen wird, wenn die schließende Klammer erreicht ist. Der Block, der auf die using
-Anweisung folgt, richtet einen Bereich für das Objekt ein, das in der using
-Anweisung erstellt oder benannt wird, in diesem Fall document
.
Grundlegende Präsentationsdokumentstruktur
Die grundlegende Dokumentstruktur eines PresentationML
Dokuments besteht aus einer Reihe von Teilen, darunter der Standard Teil, der die Präsentationsdefinition enthält. Der folgende Text aus der SPEZIFIKATION ISO/IEC 29500 stellt die Gesamtform eines Pakets vor PresentationML
.
Der Standard Teil eines
PresentationML
Pakets beginnt mit einem Präsentationsstammelement. Dieses Element enthält eine Präsentation, die wiederum auf eine Folienliste, eine Folie master Liste, eine Notizen- master Liste und ein Handzettel master Liste verweist. Die Folienliste bezieht sich auf alle Folien in der Präsentation; Die Folie master Liste bezieht sich auf die gesamten Folienmaster, die in der Präsentation verwendet werden; die Notizen master enthält Informationen zur Formatierung von Notizenseiten; und die Handzettel master beschreibt, wie ein Handzettel aussieht.Ein Handzettel ist ein gedruckter Foliensatz, der an das Publikum 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 an die Person, die die Präsentationsfolien verwaltet, gerichtete Anmerkung. Eine Notiz ist eine Erinnerung oder eine kurze Textstelle, die für den Präsentator oder das Publikum bestimmt ist.
Weitere Features, die ein
PresentationML
Dokument umfassen kann: Animation, Audio, Video und Übergänge zwischen Folien.Ein
PresentationML
Dokument wird nicht als ein großer Text in einem einzelnen Teil gespeichert. Die Elemente, mit deren Hilfe bestimmte Funktionsgruppierungen erfolgen, sind stattdessen in mehreren Teilen gespeichert. Beispielsweise werden alle Autoren in einem Dokument in einem Autorenteil gespeichert, während jede Folie über einen eigenen Teil verfügt.ISO/IEC 29500: 2016
Das folgende XML-Codebeispiel 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="https://…/relationships" rel:id="rId1"/>
</p:sldMasterIdLst>
<p:notesMasterIdLst>
<p:notesMasterId
xmlns:rel="https://…/relationships" rel:id="rId4"/>
</p:notesMasterIdLst>
<p:handoutMasterIdLst>
<p:handoutMasterId
xmlns:rel="https://…/relationships" rel:id="rId5"/>
</p:handoutMasterIdLst>
<p:sldIdLst>
<p:sldId id="267"
xmlns:rel="https://…/relationships" rel:id="rId2"/>
<p:sldId id="256"
xmlns:rel="https://…/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 können Sie Dokumentstrukturen und -inhalte mithilfe stark typisierter Klassen erstellen, die PresentationML-Elementen entsprechen. Sie finden diese Klassen im DocumentFormat.OpenXml.Presentation -Namespace. In der folgenden Tabelle sind die Klassennamen der Klassen aufgeführt, die den sld
Elementen , sldLayout
, sldMaster
und notesMaster
entsprechen.
PresentationML-Element | Open XML SDK-Klasse | Beschreibung |
---|---|---|
<sld/> |
Slide | Präsentationsfolie. Das SlidePart-Stammelement. |
<sldLayout/> |
SlideLayout | Das Folienlayout. Das SlideLayoutPart-Stammelement. |
<sldMaster/> |
SlideMaster | Der Folienmaster. Das SlideMasterPart-Stammelement. |
<notesMaster/> |
NotesMaster | Notizenmaster (oder Handzettelmaster). Das NotesMasterPart-Stammelement. |
Struktur des Hyperlinkelements
In diesem Codebeispiel vom Typ "Gewusst wie" verwenden Sie externe Hyperlinks. Daher sollten Sie das Hyperlinkelement näher kennenlernen. Im folgenden Text aus der SPEZIFIKATION ISO/IEC 29500 wird ( id
Hyperlinkziel) eingeführt.
Es gibt die ID der Beziehung an, deren Ziel als Ziel für diesen Hyperlink verwendet werden soll.
Wenn dieses Attribut nicht angegeben wird, darf kein externes Hyperlinkziel für den aktuellen Link vorhanden sein. Eine Position im aktuellen Dokument kann weiterhin über das Anker-Attribut als Ziel verwendet werden. Wenn dieses Attribut vorhanden ist, ersetzt es den Wert im Ankersattribut.
[Beispiel: Betrachten Sie das folgende
PresentationML
Fragment für einen Link:
<w:hyperlink r:id="rId9">
<w:r>
<w:t>https://www.example.com</w:t>
</w:r>
</w:hyperlink>
Der
id
Attributwert vonrId9
gibt an, dass die Beziehung im zugeordneten Beziehungsteilelement mit einem entsprechenden Id-Attributwert zu navigiert werden muss, wenn dieser Link aufgerufen wird. Wenn beispielsweise der folgende XML-Code im zugeordneten Beziehungsteilelement vorhanden ist:
<Relationships xmlns="…">
<Relationship Id="rId9" Mode="External" Target="https://www.example.com" />
</Relationships>
Das Ziel dieses Links wäre daher das Ziel der Beziehung
rId9
–https://www.example.com
in diesem Fall . Ende des Beispiels]Die möglichen Werte dieses Attributs werden durch den einfachen Typ ST_RelationshipId (§22.8.2.1) definiert.
© ISO/IEC 29500: 2016
Funktionsweise des Beispielcodes
Der Beispielcode in diesem Thema besteht aus einer Methode, die den vollständigen Pfad der Präsentationsdatei als Parameter verwendet. Sie durchläuft alle Folien der Präsentation und gibt eine Liste der Zeichenfolgen zurück, die URIs (Universal Resource Identifiers) aller externen Hyperlinks in der Präsentation darstellen.
// Iterate through all the slide parts in the presentation part.
foreach (SlidePart slidePart in document.PresentationPart.SlideParts)
{
IEnumerable<Drawing.HyperlinkType> links = slidePart.Slide.Descendants<Drawing.HyperlinkType>();
// Iterate through all the links in the slide part.
foreach (Drawing.HyperlinkType link in links)
{
// Iterate through all the external relationships in the slide part.
foreach (HyperlinkRelationship relation in slidePart.HyperlinkRelationships)
{
// If the relationship ID matches the link ID…
if (relation.Id.Equals(link.Id))
{
// Add the URI of the external relationship to the list of strings.
ret.Add(relation.Uri.AbsoluteUri);
}
}
}
}
Beispielcode
Es folgt das vollständige Codebeispiel, das Sie zum Zurückgeben der Liste aller externen Hyperlinks in einer Präsentation verwenden können. Sie können die folgende Schleife in Ihrem Programm verwenden, um die GetAllExternalHyperlinksInPresentation
-Methode aufzurufen, um die Liste der URIs in Ihrer Präsentation abzurufen.
if (args is [{ } fileName])
{
foreach (string link in GetAllExternalHyperlinksInPresentation(fileName))
{
Console.WriteLine(link);
}
}
Nachstehend ist der vollständige Beispielcode in C# und Visual Basic aufgeführt.
// Returns all the external hyperlinks in the slides of a presentation.
static IEnumerable<String> GetAllExternalHyperlinksInPresentation(string fileName)
{
// Declare a list of strings.
List<string> ret = new List<string>();
// Open the presentation file as read-only.
using (PresentationDocument document = PresentationDocument.Open(fileName, false))
{
// If there is no PresentationPart then there are no hyperlinks
if (document.PresentationPart is null)
{
return ret;
}
// Iterate through all the slide parts in the presentation part.
foreach (SlidePart slidePart in document.PresentationPart.SlideParts)
{
IEnumerable<Drawing.HyperlinkType> links = slidePart.Slide.Descendants<Drawing.HyperlinkType>();
// Iterate through all the links in the slide part.
foreach (Drawing.HyperlinkType link in links)
{
// Iterate through all the external relationships in the slide part.
foreach (HyperlinkRelationship relation in slidePart.HyperlinkRelationships)
{
// If the relationship ID matches the link ID…
if (relation.Id.Equals(link.Id))
{
// Add the URI of the external relationship to the list of strings.
ret.Add(relation.Uri.AbsoluteUri);
}
}
}
}
}
// Return the list of strings.
return ret;
}