Suchen der standardmäßigen Absatzformatvorlage (C#)Finding the Default Paragraph Style (C#)

Die erste Aufgabe im Tutorial „Bearbeiten des Inhalts eines WordprocessingML-Dokuments“ besteht darin, die Standardabsatzformatvorlage im Dokument zu ermitteln.The first task in the Manipulating Information in a WordprocessingML Document tutorial is to find the default style of paragraphs in the document.

BeispielExample

BeschreibungDescription

Das folgende Beispiel öffnet ein Office Open XML-WordprocessingML-Dokument, bestimmt den Dokument- und den Formatvorlagenteil des Pakets und führt dann eine Abfrage aus, um den Namen der Standardformatvorlage zu ermitteln.The following example opens an Office Open XML WordprocessingML document, finds the document and style parts of the package, and then executes a query that finds the default style name. Informationen zu Office Open-XML-Dokumentpaketen und deren Bestandteilen finden Sie unter Details of Office Open XML WordprocessingML Documents (C#) (Details eines Office Open-XML-WordprocessingML-Dokuments (C#)).For information about Office Open XML document packages, and the parts they consist of, see Details of Office Open XML WordprocessingML Documents (C#).

Die Abfrage sucht nach einem Knoten mit dem Namen w:style, der ein w:type-Attribut mit dem Wert "paragraph" und ein w:default-Attribut mit dem Wert "1" besitzt.The query finds a node named w:style that has an attribute named w:type with a value of "paragraph", and also has an attribute named w:default with a value of "1". Da es nur einen XML-Knoten mit diesen Attributen gibt, verwendet die Abfrage den Enumerable.First-Operator, um eine Auflistung in ein Singleton umzuwandeln.Because there will be only one XML node with these attributes, the query uses the Enumerable.First operator to convert a collection to a singleton. Dann ruft die Abfrage den Wert des Attributs mit dem Namen w:styleId ab.It then gets the value of the attribute with the name w:styleId.

Dieses Beispiel verwendet Klassen aus der WindowsBase-Assembly.This example uses classes from the WindowsBase assembly. Außerdem werden Typen im System.IO.Packaging-Namespace verwendet.It uses types in the System.IO.Packaging namespace.

CodeCode

const string fileName = "SampleDoc.docx";  

const string documentRelationshipType =  
  "http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument";  
const string stylesRelationshipType =  
  "http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles";  
const string wordmlNamespace =  
  "http://schemas.openxmlformats.org/wordprocessingml/2006/main";  
XNamespace w = wordmlNamespace;  

XDocument xDoc = null;  
XDocument styleDoc = null;  

using (Package wdPackage = Package.Open(fileName, FileMode.Open, FileAccess.Read))  
{  
    PackageRelationship docPackageRelationship =  
      wdPackage.GetRelationshipsByType(documentRelationshipType).FirstOrDefault();  
    if (docPackageRelationship != null)  
    {  
        Uri documentUri = PackUriHelper.ResolvePartUri(new Uri("/", UriKind.Relative),  
          docPackageRelationship.TargetUri);  
        PackagePart documentPart = wdPackage.GetPart(documentUri);  

        //  Load the document XML in the part into an XDocument instance.  
        xDoc = XDocument.Load(XmlReader.Create(documentPart.GetStream()));  

        //  Find the styles part. There will only be one.  
        PackageRelationship styleRelation =  
          documentPart.GetRelationshipsByType(stylesRelationshipType).FirstOrDefault();  
        if (styleRelation != null)  
        {  
            Uri styleUri = PackUriHelper.ResolvePartUri(documentUri, styleRelation.TargetUri);  
            PackagePart stylePart = wdPackage.GetPart(styleUri);  

            //  Load the style XML in the part into an XDocument instance.  
            styleDoc = XDocument.Load(XmlReader.Create(stylePart.GetStream()));  
        }  
    }  
}  

// The following query finds all the paragraphs that have the default style.  
string defaultStyle =   
    (string)(  
        from style in styleDoc.Root.Elements(w + "style")  
        where (string)style.Attribute(w + "type") == "paragraph"&&  
              (string)style.Attribute(w + "default") == "1"  
              select style  
    ).First().Attribute(w + "styleId");  

Console.WriteLine("The default style is: {0}", defaultStyle);  

KommentareComments

Dieses Beispiel erzeugt die folgende Ausgabe:This example produces the following output:

The default style is: Normal  

Nächste SchritteNext Steps

Im nächsten Beispiel erstellen Sie eine ähnliche Abfrage. Diese Abfrage sucht nach allen Absätzen eines Dokuments und deren Formatvorlagen:In the next example, you'll create a similar query that finds all the paragraphs in a document and their styles:

Siehe auchSee Also

Tutorial: Bearbeiten von Inhalten in einem WordprocessingML-DokumentTutorial: Manipulating Content in a WordprocessingML Document