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