Criar um documento de processamento de texto ao fornecer um nome de arquivo
Este tópico mostra como usar as classes no SDK Do Open XML para Office para criar programaticamente um documento de processamento de palavras.
Criando um objeto WordprocessingDocument
No SDK Open XML, a classe WordprocessingDocument representa um pacote de documentos Word. Para criar um documento Word, crie uma instância da classe WordprocessingDocument e preencha-a com partes. No mínimo, o documento deve ter uma parte do documento main que serve como um contêiner para o texto main do documento. O texto é representado no pacote como XML usando a marcação WordprocessingML.
Para criar a instância de classe, você chama o método Create(String, WordprocessingDocumentType). Vários métodos Create() são fornecidos, cada um com uma assinatura diferente. O código de exemplo deste tópico usa o método Create com uma assinatura que requer dois parâmetros. O primeiro parâmetro usa uma cadeia de caracteres de caminho completa que representa o documento que você deseja criar. O segundo parâmetro é um membro da enumeração WordprocessingDocumentType . Esse parâmetro representa o tipo de documento. Por exemplo, há um membro diferente da enumeração WordProcessingDocumentType para cada documento, modelo e a variedade habilitada para macro de documento e modelo.
Observação
Selecione cuidadosamente o WordProcessingDocumentType apropriado e verifique se o arquivo persistente tem a extensão de arquivo correta e correspondente. Se o >WordProcessingDocumentType não corresponder à extensão do arquivo, ocorrerá um erro ao abrir o arquivo no Microsoft Word.
O código que chama o método Create faz parte de uma instrução de uso seguida por um bloco com colchetes, conforme mostrado no exemplo de código a seguir.
using (WordprocessingDocument wordDocument =
WordprocessingDocument.Create(filepath, WordprocessingDocumentType.Document))
{
// Insert other code here.
}
A instrução de uso fornece uma alternativa recomendada ao típico . Criar. Salvar. Fechar sequência. Ele garante que o método Dispose () (método interno usado pelo SDK do Open XML para limpo recursos) seja chamado automaticamente quando o colchete de fechamento for atingido. O bloco que segue a instrução de uso estabelece um escopo para o objeto que é criado ou nomeado na instrução de uso , nesse caso wordDocument. Como a classe WordprocessingDocument no SDK Open XML salva e fecha automaticamente o objeto como parte de sua implementação System.IDisposable e, como o Dispose é chamado automaticamente quando você sai do bloco com colchetes, você não precisa chamar explicitamente Salvar e Fechar─desde que você use o uso.
Depois de criar o pacote de documentos Word, você pode adicionar partes a ele. Para adicionar a parte do documento main, você chama o método AddMainDocumentPart() da classe WordprocessingDocument. Depois de fazer isso, você pode definir sobre como adicionar a estrutura do documento e o texto.
Estrutura de um documento WordProcessingML
A estrutura básica do documento de um documento WordProcessingML consiste nos elementos do documento e do corpo , 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 elementos r . O r significa run, que é uma região de texto com um conjunto comum de propriedades, como a formatação. Uma execução contém um ou mais elementos t . O elemento t contém um intervalo de texto. O exemplo de código a seguir mostra a marcação WordprocessingML para um documento que contém o texto "Texto de exemplo".
<w:document xmlns:w="https://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 SDK do Open XML, você pode criar estrutura de documentos e conteúdo usando classes fortemente tipdas que correspondem aos elementos WordprocessingML . Você encontrará essas classes no namespace DocumentFormat.OpenXml.Wordprocessing . A tabela a seguir lista os nomes de classe das classes que correspondem aos elementos documento, corpo, p, r e t .
Elemento WordprocessingML | Classe SDK Open XML | Descrição |
---|---|---|
document | Document | O elemento raiz para a parte do documento principal. |
corpo | Body | O contêiner 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 WordprocessingML, consulte Estrutura de um documento WordprocessingML.
Gerando a Marcação wordprocessingML
Para criar a estrutura básica do documento usando o SDK Open XML, instancie a classe Document, atribua-a à propriedade Document da parte do documento main e adicione instâncias das classes Body, Paragraph, Run e Text. Isso é mostrado na listagem de código de exemplo e faz o trabalho de gerar a marcação wordprocessingML necessária. Embora o código na listagem de exemplo chame o método AppendChild de cada classe, às vezes você pode tornar o código mais curto e fácil de ler usando a técnica mostrada no exemplo de código a seguir.
mainPart.Document = new Document(
new Body(
new Paragraph(
new Run(
new Text("Create text in body - CreateWordprocessingDocument")))));
Código de exemplo
O método CreateWordprocessingDocument pode ser usado para criar um documento básico Word. Você o chama passando um caminho completo como o único parâmetro. O exemplo de código a seguir cria o arquivo Invoice.docx na pasta Documentos Públicos.
CreateWordprocessingDocument(@"c:\Users\Public\Documents\Invoice.docx");
A extensão de arquivo, .docx, corresponde ao tipo de arquivo especificado pelo parâmetro WordprocessingDocumentType.Document na chamada para o método Create .
A seguir está o exemplo de código completo no C# e no Visual Basic.
using DocumentFormat.OpenXml;
using DocumentFormat.OpenXml.Packaging;
using DocumentFormat.OpenXml.Wordprocessing;
CreateWordprocessingDocument(args[0]);
static void CreateWordprocessingDocument(string filepath)
{
// Create a document by supplying the filepath.
using (WordprocessingDocument wordDocument = WordprocessingDocument.Create(filepath, WordprocessingDocumentType.Document))
{
// Add a main document part.
MainDocumentPart mainPart = wordDocument.AddMainDocumentPart();
// Create the document structure and add some text.
mainPart.Document = new Document();
Body body = mainPart.Document.AppendChild(new Body());
Paragraph para = body.AppendChild(new Paragraph());
Run run = para.AppendChild(new Run());
run.AppendChild(new Text("Create text in body - CreateWordprocessingDocument"));
}
}