Compartilhar via


Abrir e adicionar texto a um documento de processamento de texto

Este tópico mostra como utilizar as classes no SDK Open XML para o Office para abrir e adicionar texto através de programação a um documento de processamento Word.


Como Abrir e Adicionar Texto a um Documento

O SDK Open XML ajuda-o a criar Word estrutura de documentos de processamento e conteúdo através de classes com tipos fortes que correspondem a WordprocessingML elementos. Este tópico mostra como utilizar as classes no SDK Open XML para abrir um Word documento de processamento e adicionar texto ao mesmo. Além disso, este tópico apresenta a estrutura básica do documento de um WordprocessingML documento, os elementos XML associados e as respetivas classes de SDK Open XML correspondentes.


Criar um Objeto WordprocessingDocument

No SDK Open XML, a WordprocessingDocument classe representa um pacote de documento Word. Para abrir e trabalhar com um Word documento, crie uma instância da classe a WordprocessingDocument partir do documento. Quando cria a instância a partir do documento, pode obter acesso à main parte do documento que contém o texto do documento. O texto na parte do documento main é representado no pacote como XML através WordprocessingML de marcações.

Para criar a instância de classe a partir do documento a que chama um dos Open métodos. Vários são fornecidos, cada um deles com uma assinatura diferente. O código de exemplo neste tópico utiliza o Open(String, Boolean) método com uma assinatura que requer dois parâmetros. O primeiro parâmetro utiliza uma cadeia de caminho completa que representa o documento a abrir. O segundo parâmetro é true ou false e representa se pretende que o ficheiro seja aberto para edição. As alterações efetuadas ao documento não serão guardadas se este parâmetro for false.

O seguinte exemplo de código chama o Open método .

// Open a WordprocessingDocument for editing using the filepath.
using (WordprocessingDocument wordprocessingDocument = WordprocessingDocument.Open(filepath, true))
{

    if (wordprocessingDocument is null)
    {
        throw new ArgumentNullException(nameof(wordprocessingDocument));
    }

Quando tiver aberto o pacote de documento Word, pode adicionar texto à parte main documento. Para aceder ao corpo do main parte do documento, crie quaisquer elementos em falta e atribua uma referência ao corpo do documento, conforme mostrado no exemplo de código seguinte.

// 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!;

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).


Gerar a Marcação WordprocessingML para Adicionar o Texto

Quando tiver acesso ao corpo da parte do documento main, adicione texto ao adicionar instâncias das Paragraphclasses , Rune Text . Isto gera a margem de lucro necessária do WordprocessingML. O seguinte exemplo de código adiciona o parágrafo.

// 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 de exemplo OpenAndAddTextToWordDocument apresentado aqui pode ser utilizado para abrir um documento Word e acrescentar algum texto com o SDK Open XML. Para chamar este método, transmita um nome de ficheiro de caminho completo como o primeiro parâmetro e o texto a adicionar como o segundo.

string file = args[0];
string txt = args[1];

OpenAndAddTextToWordDocument(args[0], args[1]);

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

Repare que o OpenAndAddTextToWordDocument método não inclui uma chamada explícita para Save. Isto acontece porque a funcionalidade Guardar Automaticamente está ativada por predefinição e não foi desativada na chamada para o Open método através da utilização de OpenSettings.

using DocumentFormat.OpenXml.Packaging;
using DocumentFormat.OpenXml.Wordprocessing;
using System;

static void OpenAndAddTextToWordDocument(string filepath, string txt)
{
    // Open a WordprocessingDocument for editing using the filepath.
    using (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));
    }
}

Confira também