Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Este tópico descreve como usar as classes no Open XML SDK for Office para recuperar programaticamente os comentários da parte principal do documento em um documento de processamento de texto.
Abrir o documento existente para acesso somente leitura
Para abrir um documento existente, instancie a WordprocessingDocument classe conforme mostrado na instrução a seguir using . Na mesma instrução, abra o arquivo de processamento de texto no especificado fileName usando o Open(String, Boolean, OpenSettings) método. Para abrir o arquivo para edição, o parâmetro booleano é 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 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 v3.0.0+, o Close() método foi removido em favor de confiar na instrução using.
Ele garante que o Dispose() método seja chamado automaticamente quando a chave de fechamento for atingida. O bloco que segue a instrução using estabelece um escopo para o objeto que é criado ou nomeado na instrução using. Como a WordprocessingDocument classe no Open XML SDK salva e fecha automaticamente o objeto como parte de sua IDisposable implementação e porque Dispose() é chamada automaticamente quando você sai do bloco, você não precisa chamar Save() explicitamente ou Dispose() desde que use uma using instrução.
Elemento Comentários
Os comments elementos e comment são cruciais para trabalhar com comentários em um arquivo de processamento de texto. É importante neste exemplo de código 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)
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 de WordprocessingML para o conteúdo de uma parte de comentários em um documento WordprocessingML:
<w:comments>
<w:comment … >
…
</w:comment>
</w:comments>
© ISO/IEC 29500: 2016
O segmento de esquema XML a seguir define o conteúdo do elemento comments.
<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.
comment (Conteúdo do 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 deverá ser carregado e os outros poderão ser ignorados.
Considere um documento com texto com um comentário anotado da seguinte maneira:
Esse comentário é representado pelo fragmento WordprocessingML a seguir.
<w:comment w:id="1" w:initials="User">
…
</w:comment>
O elemento comment especifica a presença de um único comentário na parte de comentários.
© ISO/IEC 29500: 2016
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, você instancia a WordprocessingCommentsPart classe. Em seguida, você pode exibir 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);
}
}
}
}