Share via


Recuperar comentarios de un documento de procesamiento de texto

En este tema se describe cómo usar las clases del SDK de Open XML para Office para recuperar mediante programación los comentarios de la parte principal del documento en un documento de procesamiento de texto.


Apertura del documento existente para acceso de solo lectura

Para abrir un documento existente, cree una instancia de la clase WordprocessingDocument como se muestra en la siguiente instrucción using. En la misma instrucción, abra el archivo de procesamiento de texto en el fileName especificado mediante el método Open(String, Boolean). Para abrir el archivo para su edición, el parámetro booleano se establece en true. En este ejemplo solo tiene que leer el archivo; por lo tanto, puede abrir el archivo para acceso de solo lectura si establece el parámetro booleano en false.

    using (WordprocessingDocument wordDoc = 
           WordprocessingDocument.Open(fileName, false)) 
    { 
       // Insert other code here. 
    }

La instrucción using proporciona una alternativa recomendada a la típica secuencia .Open, .Save, .Close. Garantiza que se llamará automáticamente al método Dispose (un método interno que Open XML SDK usa para limpiar recursos) cuando se llegue a la llave de cierre. El bloque que sigue a la instrucción using establece un ámbito para el objeto que se crea o se nombra en la instrucción using, en este caso wordDoc.


Elemento Comments

Los elementos comments y comment son muy importantes para trabajar con comentarios en un archivo de procesamiento de texto. En este ejemplo de código, es importante familiarizarse con esos elementos.

La siguiente información de la especificación ISO/IEC 29500 presenta el elemento de comentarios.

comments (colección de comentarios)

Este elemento especifica todos los comentarios definidos en el documento actual. Se trata del elemento raíz del elemento de comentarios de un documento WordprocessingML.

Considere el siguiente fragmento de WordprocessingML para el contenido de una parte de comentarios de un documento WordprocessingML:

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

© ISO/IEC29500: 2008.

El siguiente segmento de esquema XML define el contenido del elemento de comentarios.

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

Elemento Comment

La siguiente información de la especificación ISO/IEC 29500 presenta el elemento de comentario.

comment (contenido del comentario)

Este elemento especifica el contenido de un único comentario almacenado en la parte de comentarios de un documento WordprocessingML.

Si el contenido del documento no hace referencia a un comentario mediante un un atributo id coincidente en un uso válido del elemento commentReference, es posible que se ignore dicho comentario al cargar el documento. Si varios comentarios comparten el mismo valor para el atributo id, se puede cargar un único comentario y el resto pueden omitirse.

Considere un documento con texto con un comentario anotado, como se muestra a continuación:

Texto de documento con comentario anotado

Este comentario está representado por el siguiente fragmento de WordprocessingML.

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

El elemento comment especifica la presencia de un único comentario en la parte de comentarios.

© ISO/IEC29500: 2008.

El siguiente segmento de esquema XML define el contenido del elemento de comentario.

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

Funcionamiento del código de ejemplo

Una vez abierto el archivo para acceso de solo lectura, se crea una instancia de la clase WordprocessingCommentsPart. A continuación, se puede mostrar el texto interno del elemento Comment.

    foreach (Comment comment in commentsPart.Comments.Elements<Comment>())
    {
        Console.WriteLine(comment.InnerText);
    }

Código de ejemplo

El siguiente ejemplo de código muestra cómo recuperar comentarios que se insertaron en un documento de procesamiento de texto. Para llamar al método GetCommentsFromDocument se puede usar la siguiente llamada, que recupera los comentarios de un archivo denominado "Word16.docx", a modo de ejemplo.

    string fileName = @"C:\Users\Public\Documents\Word16.docx";
    GetCommentsFromDocument(fileName);

A continuación se incluye el código de ejemplo completo en C# y 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);
            }
        }
    }
}

Vea también