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 die Formatvorlagen oder stylesWithEffects-Teile programmgesteuert aus einem Textverarbeitungsdokument in ein XDocument instance zu extrahieren. Sie enthält eine Beispielmethode ExtractStylesPart
zur Veranschaulichung dieser Aufgabe.
ExtractStylesPart-Methode
Sie können die ExtractStylesPart
Beispielmethode verwenden, um eine XDocument
instance abzurufen, die den Styles- oder stylesWithEffects-Teil für ein Microsoft Word-Dokument enthält. Beachten Sie, dass in einem Dokument, das in Word 2010 erstellt wurde, nur ein einzelner Formatvorlagenteil vorhanden ist. Word 2013+ fügt eine zweite StylesWithEffects-Komponente hinzu. Um ein Dokument von Word 2013+ bis Word 2010 und zurück bereitzustellen, behält Word 2013+ sowohl den ursprünglichen Als auch den neuen Formatvorlagenteil bei. (Die Office Open XML-Dateiformatspezifikation erfordert, dass Microsoft Word alle Teile ignorieren, die es nicht erkennt; Word 2010 bemerkt nicht den Teil stylesWithEffects, der Word 2013+ dem Dokument hinzufügt.) Sie (und Ihre Anwendung) müssen die Ergebnisse des Abrufens der Styles oder stylesWithEffects-Komponente interpretieren.
Die ExtractStylesPart
Prozedur akzeptiert zwei Parameter: Der erste Parameter enthält eine Zeichenfolge, die den Pfad der Datei angibt, aus der Sie Formatvorlagen extrahieren möchten, und der zweite gibt an, ob Sie den Formatvorlagenteil abrufen möchten, oder den neueren StylesWithEffects-Teil (im Grunde müssen Sie diese Prozedur zweimal für Word 2013+ Dokumente aufrufen, wobei jedes Teil abgerufen wird). Die Prozedur gibt einen XDocument
instance zurück, der die vollständigen formatvorlagen oder stylesWithEffects-Teile enthält, die Sie angefordert haben, mit allen Formatvorlageninformationen für das Dokument (oder einem NULL-Verweis, wenn der angeforderte Teil nicht vorhanden ist).
static XDocument? ExtractStylesPart(string fileName, string getStylesWithEffectsPart = "true")
Den vollständigen Codeeintrag für die Methode finden Sie im Abschnitt Beispielcode.
Aufrufen der Beispielmethode
Um die Beispielmethode aufzurufen, übergeben Sie eine Zeichenfolge für den ersten Parameter, der den Dateinamen des Dokuments enthält, aus dem die Formatvorlagen extrahiert werden sollen, und einen Booleschen Wert für den zweiten Parameter, der angibt, ob der Typ des abzurufenden Teils der styleWithEffects-Teil (true
) oder der Formatvorlagenteil (false
) ist. Der folgende Code zeigt ein Beispiel.
Wenn Sie über die XDocument
instance können Sie damit tun, was Sie möchten. Im folgenden Beispielcode wird der Inhalt der XDocument
instance in der Konsole angezeigt.
if (args is [{ } fileName, { } getStyleWithEffectsPart])
{
var styles = ExtractStylesPart(fileName, getStyleWithEffectsPart);
if (styles is not null)
{
Console.WriteLine(styles.ToString());
}
}
else if (args is [{ } fileName2])
{
var styles = ExtractStylesPart(fileName2);
if (styles is not null)
{
Console.WriteLine(styles.ToString());
}
}
Funktionsweise des Codes
Der Code erstellt zunächst eine Variable mit dem Namen styles
, die den Rückgabewert für die -Methode enthält.
Der Code fährt fort, indem das Dokument mit der Open -Methode geöffnet wird und angibt, dass das Dokument für den schreibgeschützten Zugriff geöffnet sein soll (der letzte false-Parameter). Angesichts des geöffneten Dokuments verwendet der Code die MainDocumentPart -Eigenschaft, um zum Standard Dokumentteil zu navigieren, und bereitet dann eine Variable namens stylesPart
vor, die einen Verweis auf den Formatvorlagenteil enthält.
// Declare a variable to hold the XDocument.
XDocument? styles = null;
// Open the document for read access and get a reference.
using (var document = WordprocessingDocument.Open(fileName, false))
{
if (
document.MainDocumentPart is null ||
(document.MainDocumentPart.StyleDefinitionsPart is null && document.MainDocumentPart.StylesWithEffectsPart is null)
)
{
throw new ArgumentNullException("MainDocumentPart and/or one or both of the Styles parts is null.");
}
// Get a reference to the main document part.
var docPart = document.MainDocumentPart;
// Assign a reference to the appropriate part to the
// stylesPart variable.
StylesPart? stylesPart = null;
Suchen des richtigen Formatvorlagenteils
Der Code ruft als Nächstes mithilfe des -Parameters einen Verweis auf den getStylesWithEffectsPart
Boolean angeforderten Formatvorlagenteil ab.
Basierend auf diesem Wert ruft der Code eine bestimmte Eigenschaft der docPart
Variablen ab und speichert sie in der stylesPart
Variablen.
if (getStylesWithEffectsPart.ToLower() == "true")
{
stylesPart = docPart.StylesWithEffectsPart;
}
else
{
stylesPart = docPart.StyleDefinitionsPart;
}
Abrufen des Teileinhalts
Wenn der angeforderte Formatvorlagenteil vorhanden ist, muss der Code den Inhalt des Teils in einem XDocument
instance zurückgeben. Jeder Teil stellt eine GetStream() -Methode bereit, die eine Stream zurückgibt.
Der Code übergibt die Stream instance an die Create -Methode und ruft dann die Load -Methode auf, wobei der XmlNodeReader
als Parameter übergeben wird.
if (stylesPart is not null)
{
using var reader = XmlNodeReader.Create(stylesPart.GetStream(FileMode.Open, FileAccess.Read));
// Create the XDocument.
styles = XDocument.Load(reader);
}
Beispielcode
Im Folgenden finden Sie das vollständige ExtractStylesPart-Codebeispiel in C# und Visual Basic.
using DocumentFormat.OpenXml.Packaging;
using System;
using System.IO;
using System.Xml;
using System.Xml.Linq;
// Extract the styles or stylesWithEffects part from a
// word processing document as an XDocument instance.
static XDocument? ExtractStylesPart(string fileName, string getStylesWithEffectsPart = "true")
{
// Declare a variable to hold the XDocument.
XDocument? styles = null;
// Open the document for read access and get a reference.
using (var document = WordprocessingDocument.Open(fileName, false))
{
if (
document.MainDocumentPart is null ||
(document.MainDocumentPart.StyleDefinitionsPart is null && document.MainDocumentPart.StylesWithEffectsPart is null)
)
{
throw new ArgumentNullException("MainDocumentPart and/or one or both of the Styles parts is null.");
}
// Get a reference to the main document part.
var docPart = document.MainDocumentPart;
// Assign a reference to the appropriate part to the
// stylesPart variable.
StylesPart? stylesPart = null;
if (getStylesWithEffectsPart.ToLower() == "true")
{
stylesPart = docPart.StylesWithEffectsPart;
}
else
{
stylesPart = docPart.StyleDefinitionsPart;
}
if (stylesPart is not null)
{
using var reader = XmlNodeReader.Create(stylesPart.GetStream(FileMode.Open, FileAccess.Read));
// Create the XDocument.
styles = XDocument.Load(reader);
}
}
// Return the XDocument instance.
return styles;
}