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 mostra como usar as classes no Open XML SDK for Office para criar programaticamente um pacote de documentos de processamento de texto a partir do conteúdo na forma de WordprocessingML marcação XML.
Pacotes e partes do documento
Um documento Open XML é armazenado como um pacote, cujo formato é definido pela 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 Open XML SDK, a WordprocessingDocument classe representa um pacote de documentos do Word. Para criar um documento do Word, crie uma instância da classe e preencha-a WordprocessingDocument com partes. No mínimo, o documento deve ter uma parte principal do documento que sirva como um contêiner para o texto principal do documento. O texto é representado no pacote como XML usando WordprocessingML marcação.
Para criar a instância de classe, você chama Create(String, WordprocessingDocumentType). Vários Create métodos são fornecidos, cada um com uma assinatura diferente. O primeiro parâmetro usa uma cadeia de caminho completa que representa o documento que você deseja criar. O segundo parâmetro é um membro da WordprocessingDocumentType enumeração. Esse parâmetro representa o tipo de documento. Por exemplo, há um membro diferente da WordprocessingDocumentType enumeração para cada documento, modelo e a variedade habilitada de macro de documento e modelo.
Observação
Selecione cuidadosamente o apropriado WordprocessingDocumentType e verifique se o arquivo persistente tem a extensão de arquivo correta e correspondente. Se o WordprocessingDocumentType arquivo não corresponder à extensão do arquivo, ocorrerá um erro quando você abrir o arquivo no Microsoft Word.
using (WordprocessingDocument wordDoc = WordprocessingDocument.Create(document, WordprocessingDocumentType.Document))
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.
Depois de criar o pacote de documentos do Word, você pode adicionar partes a ele. Para adicionar a parte principal do documento, chame AddMainDocumentPart. Feito isso, você pode começar a adicionar a estrutura e o texto do documento.
Estrutura de um documento WordProcessingML
A estrutura básica do documento de um WordProcessingML documento consiste nos document elementos and 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. O r significa executar, que é uma região do 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 exemplo de código a seguir mostra a WordprocessingML marcação para 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>
Usando o Open XML SDK, você pode criar estrutura e conteúdo de documentos usando classes fortemente tipadas que correspondem a WordprocessingML elementos. Você encontrará essas classes no DocumentFormat.OpenXml.Wordprocessing namespace. A tabela a seguir lista os nomes de classe das classes que correspondem aos documentelementos , body, , pr, , . .t
| Elemento WordprocessingML | Classe Open XML SDK | Descrição |
|---|---|---|
<document/> |
Document | O elemento raiz para a parte do documento principal. |
<body/> |
Body | O contêiner para as estruturas de nível de bloco, como parágrafos, tabelas, anotações e outras especificadas na especificação ISO/IEC 29500 . |
<p/> |
Paragraph | Um parágrafo. |
<r/> |
Run | Uma corrida. |
<t/> |
Text | Um intervalo de texto. |
Para obter mais informações sobre a estrutura geral das partes e elementos de um documento WordprocessingML, consulte Estrutura de um documento WordprocessingML.
Código de exemplo
A seguir está o exemplo de código completo que você pode usar para criar um pacote de documentos de processamento de texto Open XML a partir de conteúdo XML na forma de WordprocessingML marcação.
Depois de executar o programa, abra o arquivo criado e examine seu conteúdo; deve ser um parágrafo que contenha a frase "Olá, 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);
}
}