Obter o conteúdo da uma parte do documento de um pacote
Este tópico mostra como utilizar as classes no SDK Open XML para o Office para obter o conteúdo de uma peça de documento num documento do Wordprocessar programaticamente.
Pacotes e partes do documento
Um documento Open XML é armazenado como um pacote, cujo formato é definido por ISO/IEC 29500. O pacote pode ter várias partes com relações entre elas. A relação entre as partes controla a categoria do documento. Um documento pode ser definido como um documento de processamento de texto caso seu item de relação do pacote contiver uma relação com uma parte do documento principal. Caso seu item de relação do pacote contenha uma relação com uma parte da apresentação, ela poderá ser definida como um documento de apresentação. Caso seu item de relação do pacote contenha uma relação com uma parte da pasta de trabalho, ela é definida como um documento de planilha. Neste tópico de tutorial, você usará um pacote de documentos de processamento de texto.
Como obter um objeto WordprocessingDocument
O código começa por abrir um ficheiro de pacote ao transmitir um nome de ficheiro para um dos métodos sobrecarregados Open (método partilhado .NET do Visual Basic ou método estático C#) da WordprocessingDocument classe que utiliza uma cadeia e um valor Booleano que especifica se o ficheiro deve ou não ser aberto no modo de leitura/escrita. Neste caso, o valor Booleano está false
a especificar que o ficheiro deve ser aberto no modo só de leitura para evitar alterações acidentais.
using (WordprocessingDocument wordDoc = WordprocessingDocument.Open(document, false))
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.
Estrutura de um Documento wordProcessingML
A estrutura de documentos básica de um WordProcessingML
documento consiste nos document
elementos e body
, seguidos por um ou mais elementos de nível de bloco, como p
, que representa um parágrafo. Um parágrafo contém um ou mais r
elementos. Significa r
execução, que é uma região de texto com um conjunto comum de propriedades, como formatação. Uma execução contém um ou mais t
elementos. O t
elemento contém um intervalo de texto. O seguinte exemplo de código mostra a WordprocessingML
marcação de um documento que contém o texto "Texto de exemplo".
<w:document xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main">
<w:body>
<w:p>
<w:r>
<w:t>Example text.</w:t>
</w:r>
</w:p>
</w:body>
</w:document>
Com o SDK Open XML, pode criar estrutura e conteúdo de documentos com classes com tipos fortes que correspondem a WordprocessingML
elementos. Encontrará estas classes no espaço de nomes. A tabela seguinte lista os nomes das classes que correspondem aos document
elementos , body
, p
, r
e t
.
WordprocessingML Element | Abrir Classe SDK XML | Descrição |
---|---|---|
<document/> |
Document | O elemento raiz para a parte do documento principal. |
<body/> |
Body | O contentor para as estruturas de nível de bloco, como parágrafos, tabelas, anotações e outros especificados na especificação ISO/IEC 29500 . |
<p/> |
Paragraph | Um parágrafo. |
<r/> |
Run | Uma execução. |
<t/> |
Text | Um intervalo de texto. |
Para obter mais informações sobre a estrutura geral das partes e elementos de um documento do WordprocessingML, veja Structure of a WordprocessingML document (Estrutura de um documento wordprocessingML).
Elemento Comments
Neste procedimento, vai trabalhar com comentários. Por conseguinte, é útil familiarizar-se com a estrutura do <comments/>
elemento. As seguintes informações da especificação ISO/IEC 29500 podem ser úteis ao trabalhar com este elemento.
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>
O elemento de comentários contém o único comentário especificado por este documento neste exemplo.
© ISO/IEC 29500: 2016
O fragmento de esquema XML seguinte define o conteúdo deste elemento.
<complexType name="CT_Comments">
<sequence>
<element name="comment" type="CT_Comment" minOccurs="0" maxOccurs="unbounded"/>
</sequence>
</complexType>
Como funciona o código de exemplo
Depois de abrir o ficheiro de origem para leitura, crie um mainPart
objeto ao instanciar o MainDocumentPart
. Em seguida, pode criar uma referência para a WordprocessingCommentsPart
parte do documento.
static string GetCommentsFromDocument(string document)
{
string? comments = null;
using (WordprocessingDocument wordDoc = WordprocessingDocument.Open(document, false))
{
if (wordDoc is null)
{
throw new ArgumentNullException(nameof(wordDoc));
}
MainDocumentPart mainPart = wordDoc.MainDocumentPart ?? wordDoc.AddMainDocumentPart();
WordprocessingCommentsPart WordprocessingCommentsPart = mainPart.WordprocessingCommentsPart ?? mainPart.AddNewPart<WordprocessingCommentsPart>();
Em seguida, pode utilizar um StreamReader
objeto para ler os conteúdos da WordprocessingCommentsPart
parte do documento e devolver os respetivos conteúdos.
using (StreamReader streamReader = new StreamReader(WordprocessingCommentsPart.GetStream()))
{
comments = streamReader.ReadToEnd();
}
}
return comments;
Código de exemplo
O código seguinte obtém o conteúdo de uma WordprocessingCommentsPart
parte contida num pacote de WordProcessing
documentos. Pode executar o programa ao chamar o GetCommentsFromDocument
método conforme mostrado no exemplo seguinte.
string document = args[0];
GetCommentsFromDocument(document);
Segue-se o exemplo de código completo em C# e Visual Basic.
static string GetCommentsFromDocument(string document)
{
string? comments = null;
using (WordprocessingDocument wordDoc = WordprocessingDocument.Open(document, false))
{
if (wordDoc is null)
{
throw new ArgumentNullException(nameof(wordDoc));
}
MainDocumentPart mainPart = wordDoc.MainDocumentPart ?? wordDoc.AddMainDocumentPart();
WordprocessingCommentsPart WordprocessingCommentsPart = mainPart.WordprocessingCommentsPart ?? mainPart.AddNewPart<WordprocessingCommentsPart>();
using (StreamReader streamReader = new StreamReader(WordprocessingCommentsPart.GetStream()))
{
comments = streamReader.ReadToEnd();
}
}
return comments;
}
Confira também
Open XML SDK class library reference (Referência da biblioteca de classes SDK Open XML)