Compartilhar via


Recuperar comentários de um documento de processamento de texto

Este tópico descreve como utilizar as classes no SDK Open XML para o Office para obter programaticamente os comentários da parte do documento main num documento de processamento de palavras.


Abrir o Documento Existente para Acesso Só de Leitura

Para abrir um documento existente, instanciar a WordprocessingDocument classe conforme mostrado na seguinte using instrução. Na mesma instrução, abra o ficheiro de processamento de palavras no especificado fileName com o Open(String, Boolean, OpenSettings) método . Para abrir o ficheiro para editar o parâmetro Booleano está definido como true. Neste exemplo, só precisa de ler o ficheiro; Por conseguinte, pode abrir o ficheiro para acesso só de leitura ao definir o parâmetro Booleano como 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.");
    }

Com a v3.0.0+ o Close() método foi removido a favor de depender da instrução using. Garante que o Dispose() método é chamado automaticamente quando a chaveta de fecho é atingida. O bloco que segue a instrução using estabelece um âmbito para o objeto que é criado ou nomeado na instrução using. Uma vez que a WordprocessingDocument classe no SDK Open XML guarda e fecha automaticamente o objeto como parte da respetiva IDisposable implementação e porque Dispose() é automaticamente chamada quando sai do bloco, não tem de chamar Save() explicitamente ou Dispose() desde que utilize uma using instrução.


Elemento Comments

Os comments elementos e comment são cruciais para trabalhar com comentários num ficheiro de processamento de palavras. Neste exemplo de código, é importante familiarizar-se com esses elementos.

As seguintes informações da especificação ISO/IEC 29500 introduzem o elemento de comentários.

comentários (Coleção de Comentários)

Este elemento especifica todos os comentários definidos no documento atual. É o elemento raiz da parte dos comentários de um documento do WordprocessingML.

Considere o seguinte fragmento do WordprocessingML para o conteúdo de uma parte de comentários num documento do WordprocessingML:

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

© ISO/IEC 29500: 2016

O seguinte segmento de esquema XML define o conteúdo do elemento de comentários.

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

Elemento de Comentário

As seguintes informações da especificação ISO/IEC 29500 introduzem o elemento de comentário.

comentário (Conteúdo do Comentário)

Este elemento especifica o conteúdo de um único comentário armazenado na parte dos comentários de um documento do WordprocessingML.

Se um comentário não for referenciado pelo conteúdo do documento através de um atributo ID correspondente numa utilização válida do elemento commentReference , poderá ser ignorado ao carregar o documento. Se mais do que um comentário partilhar o mesmo valor para o atributo ID , só será carregado um comentário e os outros poderão ser ignorados.

Considere um documento com texto com um comentário anotado da seguinte forma:

Document text with annotated comment

Este comentário é representado pelo seguinte fragmento wordprocessingML.

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

O elemento de comentário especifica a presença de um único comentário na parte dos comentários.

© ISO/IEC 29500: 2016

O seguinte segmento de esquema XML define o conteúdo do elemento de comentário.

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

Como funciona o código de exemplo

Depois de abrir o ficheiro para acesso só de leitura, instancia a WordprocessingCommentsPart classe . Em seguida, pode apresentar o texto interno do Comment elemento .

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

Código de exemplo

Este é o código de exemplo completo em C# e em 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);
            }
        }
    }
}

Confira também