Como trabalhar com tabelas do WordprocessingML

Este tópico discute a classe Open XML SDK Table e como ela se relaciona com o esquema WordprocessingML de formatos de arquivo Open XML do Office.

Tabelas em WordprocessingML

O texto a seguir da especificação ISO/IEC 29500 apresenta o elemento de tabela WordprocessingML do Open XML.

Outro tipo de conteúdo de nível de bloco no WordprocessingML, Uma tabela é um conjunto de parágrafos (e outros conteúdos de nível de bloco) organizados em linhas e colunas.

As tabelas em WordprocessingML são definidas por meio do elemento tbl, que é análogo à marca HTML <table> . O elemento table especifica o local de uma tabela presente no documento.

Um tbl elemento tem dois elementos que definem suas propriedades: tblPr, que define o conjunto de propriedades de toda a tabela (como estilo e largura) e tblGrid, que define o layout da grade da tabela. Um tbl elemento também pode conter um número arbitrário de linhas diferentes de zero, em que cada linha é especificada com um tr elemento. Cada tr elemento pode conter um número arbitrário de células diferentes de zero, onde cada célula é especificada com um tc elemento.

© ISO/IEC 29500: 2016

A tabela a seguir lista algumas das classes mais comuns do Open XML SDK usadas ao trabalhar com tabelas.

Elemento XML Classe Open XML SDK
Célula de Conteúdo Célula de Conteúdo
gridCol GridColumn
tblGrid TableGrid
tblPr Propriedades da tabela
TC TableCell
tr TableRow

Classe de tabela Open XML SDK

A classe Open XML SDK Table representa o <tbl> elemento definido no esquema Open XML File Format para documentos WordprocessingML, conforme discutido acima. Use um objeto Table para manipular uma tabela individual em um documento WordprocessingML.

Classe TableProperties

A classe Open XML SDK TableProperties representa o <tblPr> elemento definido no esquema Open XML File Format para documentos WordprocessingML. O <tblPr> elemento define as propriedades de toda a tabela para uma tabela. Use um objeto TableProperties para definir propriedades em toda a tabela para uma tabela em um documento WordprocessingML.

Classe TableGrid

A classe Open XML SDK TableGrid representa o <tblGrid> elemento definido no esquema Open XML File Format para documentos WordprocessingML. Em conjunto com elementos filho de coluna <gridCol> de grade, o <tblGrid> elemento define as colunas de uma tabela e especifica a largura padrão das células da tabela nas colunas. Use um objeto TableGrid para definir as colunas em uma tabela em um documento WordprocessingML.

Classe GridColumn

A classe Open XML SDK GridColumn representa o elemento de coluna <gridCol> de grade definido no esquema Open XML File Format para documentos WordprocessingML. O <gridCol> elemento é um elemento filho do <tblGrid> elemento e define uma única coluna em uma tabela em um documento WordprocessingML. Use a classe GridColumn para manipular uma coluna individual em um documento WordprocessingML.

Classe TableRow

A classe Open XML SDK TableRow representa o elemento de linha <tr> da tabela definido no esquema Open XML File Format para documentos WordprocessingML. O <tr> elemento define uma linha em uma tabela em um documento WordprocessingML, análogo à <tr> marca em HTML. Uma linha da tabela também pode ter formatação aplicada a ela usando um elemento de propriedades <trPr> da linha da tabela. A classe Open XML SDK TableRowProperties representa o <trPr> elemento.

Classe TableCell

A classe Open XML SDK TableCell representa o elemento de célula <tc> de tabela definido no esquema Open XML File Format para documentos WordprocessingML. O <tc> elemento define uma célula em uma tabela em um documento WordprocessingML, análogo à <td> marca em HTML. Uma célula de tabela também pode ter formatação aplicada a ela usando um elemento de propriedades <tcPr> da célula da tabela. A classe Open XML SDK TableCellProperties representa o <tcPr> elemento.

Exemplo de código do Open XML SDK

O código a seguir insere uma tabela com 1 linha e 3 colunas em um documento.

static string InsertTableInDoc(string filepath)
{
    // Open a WordprocessingDocument for editing using the filepath.
    using (WordprocessingDocument wordprocessingDocument = WordprocessingDocument.Open(filepath, true))
    {
        // Assign a reference to the existing document body or add one if necessary.

        if (wordprocessingDocument.MainDocumentPart is null)
        {
            wordprocessingDocument.AddMainDocumentPart();
        }

        if (wordprocessingDocument.MainDocumentPart!.Document is null)
        {
            wordprocessingDocument.MainDocumentPart.Document = new Document();
        }

        if (wordprocessingDocument.MainDocumentPart.Document.Body is null)
        {
            wordprocessingDocument.MainDocumentPart.Document.Body = new Body();
        }

        Body body = wordprocessingDocument.MainDocumentPart.Document.Body;

        // Create a table.
        Table tbl = new Table();

        // Set the style and width for the table.
        TableProperties tableProp = new TableProperties();
        TableStyle tableStyle = new TableStyle() { Val = "TableGrid" };

        // Make the table width 100% of the page width.
        TableWidth tableWidth = new TableWidth() { Width = "5000", Type = TableWidthUnitValues.Pct };

        // Apply
        tableProp.Append(tableStyle, tableWidth);
        tbl.AppendChild(tableProp);

        // Add 3 columns to the table.
        TableGrid tg = new TableGrid(new GridColumn(), new GridColumn(), new GridColumn());
        tbl.AppendChild(tg);

        // Create 1 row to the table.
        TableRow tr1 = new TableRow();

        // Add a cell to each column in the row.
        TableCell tc1 = new TableCell(new Paragraph(new Run(new Text("1"))));
        TableCell tc2 = new TableCell(new Paragraph(new Run(new Text("2"))));
        TableCell tc3 = new TableCell(new Paragraph(new Run(new Text("3"))));
        tr1.Append(tc1, tc2, tc3);

        // Add row to the table.
        tbl.AppendChild(tr1);

        // Add the table to the document
        body.AppendChild(tbl);

        return tbl.LocalName;
    }
}

Quando esse código é executado, o XML a seguir é gravado no documento WordprocessingML especificado no código anterior.

<w:tbl>
  <w:tblPr>
    <w:tblStyle w:val="TableGrid" />
    <w:tblW w:w="5000" w:type="pct" />
  </w:tblPr>
  <w:tblGrid>
    <w:gridCol />
    <w:gridCol />
    <w:gridCol />
  </w:tblGrid>
  <w:tr>
    <w:tc>
      <w:p>
        <w:r>
          <w:t>1</w:t>
        </w:r>
      </w:p>
    </w:tc>
    <w:tc>
      <w:p>
        <w:r>
          <w:t>2</w:t>
        </w:r>
      </w:p>
    </w:tc>
    <w:tc>
      <w:p>
        <w:r>
          <w:t>3</w:t>
        </w:r>
      </w:p>
    </w:tc>
  </w:tr>
</w:tbl>

Confira também