Partager via


Extraire des styles à partir d’un document de traitement de texte

Cette rubrique montre comment utiliser les classes du Kit de développement logiciel (SDK) Open XML pour Office afin d’extraire par programmation la partie styles ou stylesWithEffects d’un document de traitement de texte vers un XDocument instance. Il contient un exemple ExtractStylesPart de méthode pour illustrer cette tâche.


ExtractStylesPart, méthode

Vous pouvez utiliser l’exemple ExtractStylesPart de méthode pour récupérer un XDocument instance qui contient le composant styles ou stylesWithEffects d’un document Microsoft Word. N’oubliez pas que dans un document créé dans Word 2010, il n’y aura qu’une seule partie de styles ; Word 2013+ ajoute une deuxième partie stylesWithEffects. Pour permettre l'« aller-retour » d’un document de Word 2013 à Word 2010 et 2010, Word 2013+ conserve à la fois la partie des styles d’origine et la partie des nouveaux styles. (La spécification des formats de fichiers Open XML Office exige que Microsoft Word ignorer les parties qu’il ne reconnaît pas ; Word 2010 ne remarque pas la partie stylesWithEffects que Word 2013+ ajoute au document.) Vous (et votre application) devez interpréter les résultats de la récupération de la partie styles ou stylesWithEffects.

La ExtractStylesPart procédure accepte deux paramètres : le premier paramètre contient une chaîne indiquant le chemin d’accès du fichier à partir duquel vous souhaitez extraire les styles, et le second indique si vous souhaitez récupérer la partie styles, ou la partie stylesWithEffects plus récente (en fait, vous devez appeler cette procédure deux fois pour les documents Word 2013 et plus, en récupérant chaque partie). La procédure retourne une XDocument instance qui contient la partie styles ou stylesWithEffects complète que vous avez demandée, avec toutes les informations de style pour le document (ou une référence null, si le composant que vous avez demandé n’existe pas).

static XDocument? ExtractStylesPart(string fileName, string getStylesWithEffectsPart = "true")

La liste de code complète pour la méthode se trouve dans la section Exemple de code.


Appel de la méthode de l’exemple

Pour appeler l’exemple de méthode, transmettez une chaîne pour le premier paramètre qui contient le nom de fichier du document à partir duquel extraire les styles, et une valeur Boolean pour le deuxième paramètre qui spécifie si le type de composant à récupérer est la partie styleWithEffects (true) ou la partie styles (false). Le code suivant est fourni à titre d'exemple. Lorsque vous disposez de l’instance XDocument vous pouvez faire ce que vous souhaitez . Dans l’exemple de code suivant, le contenu du XDocument instance s’affiche sur la console.

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());
    }
}

Fonctionnement du code

Le code commence par créer une variable nommée styles pour contenir la valeur de retour de la méthode . Le code continue en ouvrant le document à l’aide de la Open méthode et en indiquant que le document doit être ouvert pour l’accès en lecture seule (paramètre false final). Étant donné le document ouvert, le code utilise la MainDocumentPart propriété pour accéder au composant de document main, puis prépare une variable nommée stylesPart pour contenir une référence au composant styles.

// 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;

Rechercher la partie styles correcte

Le code récupère ensuite une référence à la partie de styles demandée à l’aide du getStylesWithEffectsPartBoolean paramètre . En fonction de cette valeur, le code récupère une propriété spécifique de la variable et la docPart stocke dans la stylesPart variable.

if (getStylesWithEffectsPart.ToLower() == "true")
{
    stylesPart = docPart.StylesWithEffectsPart;
}
else
{
    stylesPart = docPart.StyleDefinitionsPart;
}

Récupérer le contenu du composant

Si le composant styles demandé existe, le code doit retourner le contenu du composant dans un XDocument instance. Chaque partie fournit une GetStream() méthode, qui retourne une Stream. Le code passe le Stream instance à la Create méthode, puis appelle la Load méthode, en passant le XmlNodeReader en tant que paramètre.

if (stylesPart is not null)
{
    using var reader = XmlNodeReader.Create(stylesPart.GetStream(FileMode.Open, FileAccess.Read));

    // Create the XDocument.
    styles = XDocument.Load(reader);
}

Exemple de code

Voici l’exemple de code ExtractStylesPart complet en C# et 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;
}

Voir aussi