Adicionar uma nova parte do documento para um pacote
Este tópico mostra como utilizar as classes no SDK Open XML para o Office para adicionar uma peça de documento (ficheiro) a um documento de processamento de palavras através de programação.
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.
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 do WordprocessingDocument que utiliza uma cadeia e um valor Booleano que especifica se o ficheiro deve ser aberto para edição ou para acesso só de leitura. Neste caso, o valor Booleano está true
a especificar que o ficheiro deve ser aberto no modo de leitura/escrita.
using (WordprocessingDocument wordDoc = WordprocessingDocument.Open(document, true))
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).
Como funciona o código de exemplo
Depois de abrir o documento para edição, na using
instrução , como um WordprocessingDocument objeto, o código cria uma referência à MainDocumentPart
peça e adiciona uma nova peça XML personalizada. Em seguida, lê o conteúdo do ficheiro externo que contém o XML personalizado e escreve-o na CustomXmlPart
peça.
Observação
Para utilizar a nova parte do documento no documento, adicione uma ligação para a parte do documento na parte de relação da nova parte.
MainDocumentPart mainPart = wordDoc.MainDocumentPart ?? wordDoc.AddMainDocumentPart();
CustomXmlPart myXmlPart = mainPart.AddCustomXmlPart(CustomXmlPartType.CustomXml);
using (FileStream stream = new FileStream(fileName, FileMode.Open))
{
myXmlPart.FeedData(stream);
}
Código de exemplo
O código seguinte adiciona uma nova peça de documento que contém XML personalizado de um ficheiro externo e, em seguida, preenche a peça. Para chamar o AddCustomXmlPart
método no seu programa, utilize o seguinte exemplo que modifica um ficheiro ao adicionar uma nova peça de documento ao mesmo.
string document = args[0];
string fileName = args[1];
AddNewPart(args[0], args[1]);
Observação
Antes de executar o programa, altere a extensão Word ficheiro de .docx para .zip e veja o conteúdo do ficheiro zip. Em seguida, altere a extensão novamente para .docx e execute o programa. Depois de executar o programa, altere novamente a extensão de ficheiro para .zip e ver o respetivo conteúdo. Verá uma pasta extra denominada "customXML". Esta pasta contém o ficheiro XML que representa a parte adicionada
Segue-se o exemplo de código completo em C# e Visual Basic.
static void AddNewPart(string document, string fileName)
{
using (WordprocessingDocument wordDoc = WordprocessingDocument.Open(document, true))
{
MainDocumentPart mainPart = wordDoc.MainDocumentPart ?? wordDoc.AddMainDocumentPart();
CustomXmlPart myXmlPart = mainPart.AddCustomXmlPart(CustomXmlPartType.CustomXml);
using (FileStream stream = new FileStream(fileName, FileMode.Open))
{
myXmlPart.FeedData(stream);
}
}
}