Partager via


Extraire les commentaires d’un document de traitement de texte

Cette rubrique explique comment utiliser les classes du Kit de développement logiciel (SDK) Open XML pour Office afin de récupérer par programmation les commentaires à partir de la partie de document main dans un document de traitement de texte.


Ouvrir le document existant pour un accès en lecture seule

Pour ouvrir un document existant, instanciez la WordprocessingDocument classe comme indiqué dans l’instruction suivante using . Dans la même instruction, ouvrez le fichier de traitement de texte au spécifié fileName à l’aide de la Open(String, Boolean, OpenSettings) méthode . Pour ouvrir le fichier afin de modifier le paramètre booléen est défini sur true. Dans cet exemple, il vous suffit de lire le fichier ; Par conséquent, vous pouvez ouvrir le fichier pour un accès en lecture seule en définissant le paramètre booléen sur false.

using (WordprocessingDocument wordDoc = WordprocessingDocument.Open(fileName, false))
{
    if (wordDoc.MainDocumentPart is null || wordDoc.MainDocumentPart.WordprocessingCommentsPart is null)
    {
        throw new System.ArgumentNullException("MainDocumentPart and/or WordprocessingCommentsPart is null.");
    }

Avec v3.0.0+ la Close() méthode a été supprimée au profit de l’instruction using. Il garantit que la Dispose() méthode est automatiquement appelée lorsque l’accolade fermante est atteinte. Le bloc qui suit l’instruction using établit une étendue pour l’objet créé ou nommé dans l’instruction using. Étant donné que la WordprocessingDocument classe du Kit de développement logiciel (SDK) Open XML enregistre et ferme automatiquement l’objet dans le cadre de son IDisposable implémentation, et que Dispose() est appelée automatiquement lorsque vous quittez le bloc, vous n’avez pas à appeler Save() explicitement ou Dispose() tant que vous utilisez une using instruction.


Élément comments

Les comments éléments et comment sont essentiels à l’utilisation des commentaires dans un fichier de traitement de texte. Il est important de vous familiariser avec ces éléments, dans cet exemple de code.

Les informations suivantes de la spécification ISO/IEC 29500 présentent l’élément comments.

comments (collection de commentaires)

Cet élément spécifie tous les commentaires définis dans le document actuel. C’est l’élément racine du composant commentaires d’un document WordprocessingML.

Considérons le fragment WordprocessingML suivant pour le contenu d’un composant commentaires dans un document WordprocessingML :

    <w:comments>
      <w:comment … >
        …
      </w:comment>
    </w:comments>

© ISO/IEC 29500 : 2016

Le segment de schéma XML suivant définit le contenu de l’élément commentaires.

    <complexType name="CT_Comments">
       <sequence>
           <element name="comment" type="CT_Comment" minOccurs="0" maxOccurs="unbounded"/>
       </sequence>
    </complexType>

Élément Comment

Les informations suivantes de la spécification ISO/IEC 29500 introduisent l’élément comment.

comment (contenu de commentaire)

Cet élément spécifie le contenu d’un commentaire unique stocké dans le composant commentaires d’un document WordprocessingML.

Si un commentaire n’est pas référencé par un contenu de document via un attribut id correspondant dans une utilisation valide de l’élément commentReference, il peut être ignoré au chargement du document. Si plusieurs commentaires partagent la même valeur pour l’attribut id, un seul commentaire sera chargé et les autres seront ignorés.

Considérons un document comprenant du texte annoté d’un commentaire, de la manière suivante :

Texte du document avec commentaire annoté

Ce commentaire est représenté par le fragment WordprocessingML suivant.

    <w:comment w:id="1" w:initials="User">
      …
    </w:comment>

L’élément comment spécifie la présence d’un commentaire unique dans le composant commentaires.

© ISO/IEC 29500 : 2016

Le segment de schéma XML suivant définit le contenu de l’élément comment.

    <complexType name="CT_Comment">
       <complexContent>
           <extension base="CT_TrackChange">
              <sequence>
                  <group ref="EG_BlockLevelElts" minOccurs="0" maxOccurs="unbounded"/>
              </sequence>
              <attribute name="initials" type="ST_String" use="optional"/>
           </extension>
       </complexContent>
    </complexType>

Fonctionnement de l’exemple de code

Une fois que vous avez ouvert le fichier pour l’accès en lecture seule, vous instanciez la WordprocessingCommentsPart classe . Vous pouvez ensuite afficher le texte interne de l’élément Comment .

WordprocessingCommentsPart commentsPart = wordDoc.MainDocumentPart.WordprocessingCommentsPart;

if (commentsPart is not null && commentsPart.Comments is not null)
{
    foreach (Comment comment in commentsPart.Comments.Elements<Comment>())
    {
        Console.WriteLine(comment.InnerText);
    }
}

Exemple de code

Voici un exemple de code complet en C# et Visual Basic.

using DocumentFormat.OpenXml.Packaging;
using DocumentFormat.OpenXml.Wordprocessing;
using System;

static void GetCommentsFromDocument(string fileName)
{
    using (WordprocessingDocument wordDoc = WordprocessingDocument.Open(fileName, false))
    {
        if (wordDoc.MainDocumentPart is null || wordDoc.MainDocumentPart.WordprocessingCommentsPart is null)
        {
            throw new System.ArgumentNullException("MainDocumentPart and/or WordprocessingCommentsPart is null.");
        }

        WordprocessingCommentsPart commentsPart = wordDoc.MainDocumentPart.WordprocessingCommentsPart;

        if (commentsPart is not null && commentsPart.Comments is not null)
        {
            foreach (Comment comment in commentsPart.Comments.Elements<Comment>())
            {
                Console.WriteLine(comment.InnerText);
            }
        }
    }
}

Voir aussi