Abrir e adicionar texto a um documento de processamento de texto
Este tópico mostra como usar as classes no SDK Do Open XML para Office para abrir e adicionar texto programaticamente a um documento de processamento Word.
Como abrir e adicionar texto a um documento
O SDK do Open XML ajuda você a criar Word processamento de estrutura de documentos e conteúdo usando classes fortemente tipdas que correspondem a elementos wordprocessingML. Este tópico mostra como usar as classes no SDK do Open XML para abrir um documento de processamento Word e adicionar texto a ele. Além disso, este tópico apresenta a estrutura de documento básica de um documento WordprocessingML , os elementos XML associados e suas classes SDK Open XML correspondentes.
Criar um objeto WordprocessingDocument
No SDK Open XML, a classe WordprocessingDocument representa um pacote de documentos Word. Para abrir e trabalhar com um documento Word, crie uma instância da classe WordprocessingDocument a partir do documento. Ao criar a instância do documento, você pode obter acesso à parte do documento main que contém o texto do documento. O texto na parte do documento main é representado no pacote como XML usando a marcação WordprocessingML.
Para criar a instância de classe a partir do documento, você chama um dos métodos Open . São fornecidos vários, cada um deles com uma assinatura diferente. O código de exemplo deste tópico usa o método Open(String, Boolean) com uma assinatura que requer dois parâmetros. O primeiro parâmetro usa uma cadeia de caracteres de caminho completa que representa o documento a ser aberto. O segundo parâmetro é true ou false e indica se você deseja que o arquivo seja aberto para edição. As alterações feitas no documento não serão salvas se esse parâmetro for falso.
O exemplo de código a seguir chama o método Open .
// Open a WordprocessingDocument for editing using the filepath.
WordprocessingDocument wordprocessingDocument =
WordprocessingDocument.Open(filepath, true);
Ao abrir o pacote de documentos Word, você pode adicionar texto à parte do documento main. Para acessar o corpo do main parte do documento, atribua uma referência ao corpo do documento existente, conforme mostrado no exemplo de código a seguir.
// Assign a reference to the existing document body.
Body body = wordprocessingDocument.MainDocumentPart.Document.Body;
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.
Gerar a marcação WordprocessingML para adicionar o texto
Quando você tiver acesso ao corpo da parte do documento main, adicione texto adicionando instâncias das classes Parágrafo, Execução e Texto. Isso gera a marcação do WordprocessingML necessária. O exemplo de código a seguir adiciona o parágrafo, a execução e o texto.
// Add new text.
Paragraph para = body.AppendChild(new Paragraph());
Run run = para.AppendChild(new Run());
run.AppendChild(new Text(txt));
Código de exemplo
O método OpenAndAddTextToWordDocument mostrado aqui pode ser usado para abrir um documento Word e acrescentar algum texto usando o SDK Open XML. Para chamar esse método, passe um nome de arquivo de caminho completo como o primeiro parâmetro e o texto a ser adicionado como o segundo. Por exemplo, o exemplo de código a seguir abre o arquivo Letter.docx na pasta Documentos Públicos e adiciona texto a ele.
string strDoc = @"C:\Users\Public\Documents\Letter.docx";
string strTxt = "Append text in body - OpenAndAddTextToWordDocument";
OpenAndAddTextToWordDocument(strDoc, strTxt);
A seguir está o código de exemplo completo em C# e em Visual Basic.
Observe que o método OpenAndAddTextToWordDocument não inclui uma chamada explícita para Salvar. Isso ocorre porque o recurso AutoSave está ativado por padrão e não foi desabilitado na chamada para o método Open por meio do uso do OpenSettings.
using DocumentFormat.OpenXml.Packaging;
using DocumentFormat.OpenXml.Wordprocessing;
using System;
OpenAndAddTextToWordDocument(args[0], args[1]);
static void OpenAndAddTextToWordDocument(string filepath, string txt)
{
// Open a WordprocessingDocument for editing using the filepath.
WordprocessingDocument wordprocessingDocument = WordprocessingDocument.Open(filepath, true);
if (wordprocessingDocument is null)
{
throw new ArgumentNullException(nameof(wordprocessingDocument));
}
// Assign a reference to the existing document body.
MainDocumentPart mainDocumentPart = wordprocessingDocument.MainDocumentPart ?? wordprocessingDocument.AddMainDocumentPart();
mainDocumentPart.Document ??= new Document();
mainDocumentPart.Document.Body ??= mainDocumentPart.Document.AppendChild(new Body());
Body body = wordprocessingDocument.MainDocumentPart!.Document!.Body!;
// Add new text.
Paragraph para = body.AppendChild(new Paragraph());
Run run = para.AppendChild(new Run());
run.AppendChild(new Text(txt));
// Dispose the handle explicitly.
wordprocessingDocument.Dispose();
}