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 classe WordprocessingDocument comme indiqué dans l'instruction using suivante. Dans la même instruction, ouvrez le fichier de traitement de texte à l’emplacement fileName spécifié à l’aide de la méthode Open(String, Boolean). Pour permettre l’ouverture du fichier de sorte qu’il puisse être modifié, le paramètre Boolean a la valeur true. Dans cet exemple, seule la lecture du fichier est nécessaire ; par conséquent, vous pouvez ouvrir le fichier pour un accès en lecture seule en affectant au paramètre booléen la valeur false.
using (WordprocessingDocument wordDoc =
WordprocessingDocument.Open(fileName, false))
{
// Insert other code here.
}
L'instruction using offre une alternative recommandée pour la séquence .Open, .Save, .Close standard. Elle garantit que la méthode Dispose (méthode interne utilisée par le kit de développement Open XML pour nettoyer les ressources) est automatiquement appelée lorsque l'accolade de fermeture est atteinte. Le bloc qui suit l’instruction using établit une étendue pour l’objet créé ou nommé dans l’instruction using, dans le cas présent wordDoc.
Élément comments
Les éléments comments et comment sont indispensables pour travailler avec 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/IEC29500: 2008.
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 :
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/IEC29500: 2008.
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
Après avoir ouvert le fichier en lecture seule, vous instanciez la classe WordprocessingCommentsPart. Vous pouvez ensuite afficher le texte intérieur de l’élément Comment.
foreach (Comment comment in commentsPart.Comments.Elements<Comment>())
{
Console.WriteLine(comment.InnerText);
}
Exemple de code
L’exemple de code suivant montre comment extraire des commentaires qui ont été insérés dans un document de traitement de texte. Pour appeler la méthode GetCommentsFromDocument , vous pouvez utiliser l’appel suivant, qui récupère les commentaires d’un fichier nommé « Word16.docx », à titre d’exemple.
string fileName = @"C:\Users\Public\Documents\Word16.docx";
GetCommentsFromDocument(fileName);
Voici un exemple de code complet en C# et Visual Basic.
using DocumentFormat.OpenXml.Packaging;
using DocumentFormat.OpenXml.Wordprocessing;
using System;
GetCommentsFromDocument(args[0]);
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);
}
}
}
}