Compartilhar via


Criar um pacote

Este tópico mostra como utilizar as classes no SDK Open XML para o Office para criar programaticamente um pacote de documentos de processamento de palavras a partir de conteúdo sob a forma de WordprocessingML marcação XML.

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

No SDK Open XML, a WordprocessingDocument classe representa um pacote de documento Word. Para criar um Word documento, crie uma instância da classe e preencha-a WordprocessingDocument com partes. No mínimo, o documento tem de ter uma parte do documento main que sirva de contentor para a main texto do documento. O texto é representado no pacote como XML com WordprocessingML markup.

Para criar a instância de classe a que chama Create(String, WordprocessingDocumentType). São fornecidos vários Create métodos, cada um com uma assinatura diferente. O primeiro parâmetro utiliza uma cadeia de caminho completa que representa o documento que pretende criar. O segundo parâmetro é um membro da WordprocessingDocumentType enumeração. Este parâmetro representa o tipo de documento. Por exemplo, existe um membro diferente da WordprocessingDocumentType enumeração para cada documento, modelo e a variedade de documentos e modelos com permissão para macros.

Observação

Selecione cuidadosamente o adequado WordprocessingDocumentType e verifique se o ficheiro persistente tem a extensão de ficheiro correspondente correta. Se o WordprocessingDocumentType não corresponder à extensão do ficheiro, ocorrerá um erro ao abrir o ficheiro no Microsoft Word.

using (WordprocessingDocument wordDoc = WordprocessingDocument.Create(document, WordprocessingDocumentType.Document))

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.

Depois de criar o pacote de documento Word, pode adicionar partes ao mesmo. Para adicionar a main parte do documento a que chama AddMainDocumentPart. Depois de o fazer, pode definir a adição da estrutura e do texto do documento.

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 documentelementos , body, p, re 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).

Código de exemplo

Segue-se o exemplo de código completo que pode utilizar para criar um pacote de documentos de processamento de palavras Open XML a partir de conteúdo XML sob a forma de WordprocessingML marcação.

Depois de executar o programa, abra o ficheiro criado e examine o respetivo conteúdo; deve ser um parágrafo que contenha a expressão "Hello mundo!"

A seguir está o código de exemplo completo em C# e em Visual Basic.

// To create a new package as a Word document.
static void CreateNewWordDocument(string document)
{
    using (WordprocessingDocument wordDoc = WordprocessingDocument.Create(document, WordprocessingDocumentType.Document))
    {
        // Set the content of the document so that Word can open it.
        MainDocumentPart mainPart = wordDoc.AddMainDocumentPart();

        SetMainDocumentContent(mainPart);
    }
}

// Set the content of MainDocumentPart.
static void SetMainDocumentContent(MainDocumentPart part)
{
    const string docXml = @"<?xml version=""1.0"" encoding=""utf-8""?>
                            <w:document xmlns:w=""http://schemas.openxmlformats.org/wordprocessingml/2006/main"">
                              <w:body>
                                <w:p>
                                  <w:r>
                                    <w:t>Hello World</w:t>
                                  </w:r>
                                </w:p>
                              </w:body>
                            </w:document>";

    using (Stream stream = part.GetStream())
    {
        byte[] buf = (new UTF8Encoding()).GetBytes(docXml);
        stream.Write(buf, 0, buf.Length);
    }
}

Confira também