Recuperar comentários de um documento de processamento de texto
Este tópico descreve como usar as classes no SDK do Open XML para Office para recuperar programaticamente os comentários da parte do documento main em um documento de processamento de palavras.
Abrir o documento existente para acesso somente leitura
Para abrir um documento existente, instancie a classe WordprocessingDocument , conforme mostrado na instrução de uso a seguir. Na mesma instrução, abra o arquivo de processamento de palavras no arquivo especificadoName usando o método Open(String, Boolean). Para abrir o arquivo para edição, o parâmetro booliano é definido como true. Neste exemplo, você só precisa ler o arquivo; Portanto, você pode abrir o arquivo para acesso somente leitura definindo o parâmetro booliano como false.
using (WordprocessingDocument wordDoc =
WordprocessingDocument.Open(fileName, false))
{
// Insert other code here.
}
A instrução using fornece uma alternativa recomendada para a sequência típica de .Open, .Save e .Close. Ela garante que o método Dispose (método interno usado pelo SDK do Open XML para limpar recursos) seja chamado automaticamente quando a chave de fechamento for atingida. O bloco que vem após a instrução using estabelece um escopo para o objeto que é criado ou nomeado na instrução using, neste caso, wordDoc.
Elemento Comments
Os comentários e os elementosde comentário são cruciais para trabalhar com comentários em um arquivo de processamento de palavras. É importante neste exemplo de código familiarizar-se com esses elementos.
As informações a seguir da especificação ISO/IEC 29500 introduzem o elemento de comentários.
comentários (Coleção de Comentários)
Esse elemento especifica todos os comentários definidos no documento atual. É o elemento raiz da parte de comentários de um documento WordprocessingML.
Considere o seguinte fragmento wordprocessingML para o conteúdo de uma parte de comentários em um documento WordprocessingML:
<w:comments>
<w:comment … >
…
</w:comment>
</w:comments>
© ISO/IEC29500: 2008.
O segmento de esquema XML a seguir 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 Comment
As informações a seguir da especificação ISO/IEC 29500 introduzem o elemento de comentário.
comentário (Conteúdo de Comentário)
Esse elemento especifica o conteúdo de um único comentário armazenado na parte de comentários de um documento wordprocessingML.
Se um comentário não for referenciado pelo conteúdo do documento por meio de um atributo id correspondente em um uso válido do elemento commentReference , ele poderá ser ignorado ao carregar o documento. Se mais de um comentário compartilhar o mesmo valor para o atributo id , somente um comentário será carregado e os outros poderão ser ignorados.
Considere um documento com texto com um comentário anotado da seguinte maneira:
Este comentário é representado pelo fragmento wordprocessingML a seguir.
<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 de comentários.
© ISO/IEC29500: 2008.
O segmento de esquema XML a seguir 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 arquivo para acesso somente leitura, instancie a classe WordprocessingCommentsPart . Em seguida, você pode exibir o texto interno do elemento Comentário .
foreach (Comment comment in commentsPart.Comments.Elements<Comment>())
{
Console.WriteLine(comment.InnerText);
}
Código de exemplo
O exemplo de código a seguir mostra como recuperar comentários inseridos em um documento de processamento de palavras. Para chamar o método GetCommentsFromDocument , você pode usar a chamada a seguir, que recupera comentários de um arquivo chamado "Word16.docx", como exemplo.
string fileName = @"C:\Users\Public\Documents\Word16.docx";
GetCommentsFromDocument(fileName);
Este é o código de exemplo completo em C# e em 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);
}
}
}
}