Compartilhar via


Alterar texto em uma tabela de documento de processamento de texto

Este tópico mostra como utilizar o SDK Open XML para o Office para alterar programaticamente o texto numa tabela num documento de processamento de palavras existente.

Abrir o Documento Existente

Para abrir um documento existente, instanciar a WordprocessingDocument classe conforme mostrado na seguinte using instrução. Na mesma instrução, abra o ficheiro de processamento de palavras no especificado filepath através do Open método , com o parâmetro Booleano definido como para true ativar a edição do documento.

using (WordprocessingDocument doc = WordprocessingDocument.Open(filePath, true))

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.

A Estrutura de uma Tabela

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 documento pode conter uma tabela como neste exemplo. A table é um conjunto de parágrafos (e outros conteúdos ao nível do bloco) dispostos em rows e columns. As tabelas no WordprocessingML são definidas através do tbl elemento , que é análogo à etiqueta de tabela HTML. Considere uma tabela de uma célula vazia (ou seja, uma tabela com uma linha e uma coluna) e limites de 1 ponto em todos os lados. Esta tabela é representada pelo seguinte WordprocessingML exemplo de código.

    <w:tbl>
      <w:tblPr>
        <w:tblW w:w="5000" w:type="pct"/>
        <w:tblBorders>
          <w:top w:val="single" w:sz="4" w:space="0" w:color="auto"/>
          <w:left w:val="single" w:sz="4 w:space="0" w:color="auto"/>
          <w:bottom w:val="single" w:sz="4" w:space="0" w:color="auto"/>
          <w:right w:val="single" w:sz="4" w:space="0" w:color="auto"/>
        </w:tblBorders>
      </w:tblPr>
      <w:tblGrid>
        <w:gridCol w:w="10296"/>
      </w:tblGrid>
      <w:tr>
        <w:tc>
          <w:tcPr>
            <w:tcW w:w="0" w:type="auto"/>
          </w:tcPr>
          <w:p/>
        </w:tc>
      </w:tr>
    </w:tbl>

Esta tabela especifica propriedades ao nível da tabela de 100% da largura da página com o tblW elemento , um conjunto de limites de tabela com o tblBorders elemento , a grelha da tabela, que define um conjunto de arestas verticais partilhadas dentro da tabela com o tblGrid elemento e uma única linha de tabela com o tr elemento .

Como funciona o código de exemplo

No código de exemplo, depois de abrir o documento na using instrução , localize a primeira tabela no documento. Em seguida, localize a segunda linha na tabela ao encontrar a linha cujo índice é 1. Em seguida, localize a terceira célula nessa linha cujo índice é 2, conforme mostrado no exemplo de código seguinte.

// Find the first table in the document.
Table table = doc.MainDocumentPart.Document.Body.Elements<Table>().First();

// Find the second row in the table.
TableRow row = table.Elements<TableRow>().ElementAt(1);

// Find the third cell in the row.
TableCell cell = row.Elements<TableCell>().ElementAt(2);

Depois de localizar a célula de destino, localize a primeira execução no primeiro parágrafo da célula e substitua o texto pelo texto transmitido. O seguinte exemplo de código mostra estas ações.

// Find the first paragraph in the table cell.
Paragraph p = cell.Elements<Paragraph>().First();

// Find the first run in the paragraph.
Run r = p.Elements<Run>().First();

// Set the text for the run.
Text t = r.Elements<Text>().First();
t.Text = txt;

Alterar Texto numa Célula numa Tabela

O seguinte exemplo de código mostra como alterar o texto na célula da tabela especificada num documento de processamento de palavras. O exemplo de código espera que o documento, cujo nome de ficheiro e caminho são transmitidos como um argumento para o ChangeTextInCell método, contenha uma tabela. O exemplo de código também espera que a tabela tenha, pelo menos, duas linhas e três colunas e que a tabela contenha texto na célula localizada na segunda linha e na posição da terceira coluna. Quando chama o ChangeTextInCell método no programa, o texto na célula na localização especificada será substituído pelo texto que transmitir como segundo argumento para o ChangeTextInCell método .

Algum texto Algum texto Algum texto
Algum texto Algum texto O texto do segundo argumento

Código de exemplo

O ChangeTextInCell método altera o texto na segunda linha e a terceira coluna da primeira tabela encontrada no ficheiro. Pode chamá-lo ao transmitir um caminho completo para o ficheiro como o primeiro parâmetro e o texto a utilizar como segundo parâmetro. Por exemplo, a chamada seguinte ao ChangeTextInCell método altera o texto na célula especificada para "O texto do exemplo da API".

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

Segue-se o exemplo de código completo.

// Change the text in a table in a word processing document.
static void ChangeTextInCell(string filePath, string txt)
{
    // Use the file name and path passed in as an argument to 
    // open an existing document.
    using (WordprocessingDocument doc = WordprocessingDocument.Open(filePath, true))
    {
        if (doc.MainDocumentPart is null || doc.MainDocumentPart.Document.Body is null)
        {
            throw new ArgumentNullException("MainDocumentPart and/or Body is null.");
        }

        // Find the first table in the document.
        Table table = doc.MainDocumentPart.Document.Body.Elements<Table>().First();

        // Find the second row in the table.
        TableRow row = table.Elements<TableRow>().ElementAt(1);

        // Find the third cell in the row.
        TableCell cell = row.Elements<TableCell>().ElementAt(2);
        // Find the first paragraph in the table cell.
        Paragraph p = cell.Elements<Paragraph>().First();

        // Find the first run in the paragraph.
        Run r = p.Elements<Run>().First();

        // Set the text for the run.
        Text t = r.Elements<Text>().First();
        t.Text = txt;
    }
}

Confira também

Open XML SDK class library reference (Referência da biblioteca de classes SDK Open XML)

Como: Alterar Texto numa Tabela num Documento de Processamento de Word

LINQ (Consulta Integrada à Linguagem)

Métodos de Extensão (Guia de Programação C#)

Métodos de Extensão (Visual Basic)