Compartir a través de


Trabajar con tablas WordprocessingML

En este tema se describe la clase sdk Table de Open XML y cómo se relaciona con el esquema WordprocessingML de formatos de archivo Open XML de Office.

Tablas en WordprocessingML

El siguiente texto de la especificación ISO/IEC 29500 presenta el elemento de tabla de WordprocessingML de Office Open XML.

Una tabla, otro tipo de contenido a nivel de bloque de WordprocessingML, es un conjunto de párrafos (y de otro contenido a nivel de bloque) organizados en filas y columnas.

Las tablas de WordprocessingML se definen a través del elemento tbl, que es análogo a la etiqueta HTML <table> . El elemento de tabla especifica la ubicación de una tabla presente en el documento.

Un tbl elemento tiene dos elementos que definen sus propiedades: tblPr, que define el conjunto de propiedades de toda la tabla (como el estilo y el ancho) y tblGrid, que define el diseño de cuadrícula de la tabla. Un tbl elemento también puede contener un número arbitrario distinto de cero de filas, donde cada fila se especifica con un tr elemento . Cada tr elemento puede contener un número arbitrario distinto de cero de celdas, donde cada celda se especifica con un tc elemento .

© ISO/IEC 29500: 2016

En la siguiente tabla se enumeran algunas de las clases más comunes de Open XML SDK que se usan al trabajar con tablas.

Elemento XML Open XML SDK (clase)
Celda de contenido Celda de contenido
gridCol GridColumn
tblGrid TableGrid
tblPr TableProperties
Tc TableCell
tr TableRow

Clase de tabla del SDK de Open XML

La clase SDK Table de Open XML representa el <tbl> elemento definido en el esquema de formato de archivo Open XML para documentos WordprocessingML, como se ha descrito anteriormente. Use un objeto Table para manipular una tabla individual en un documento WordprocessingML.

Clase TableProperties

La clase SDK TableProperties de Open XML representa el <tblPr> elemento definido en el esquema de formato de archivo Open XML para documentos WordprocessingML. El <tblPr> elemento define las propiedades de toda la tabla para una tabla. Use un objeto TableProperties para establecer las propiedades de toda una tabla en un documento WordprocessingML.

Clase TableGrid

La clase SDK TableGrid de Open XML representa el <tblGrid> elemento definido en el esquema de formato de archivo Open XML para documentos WordprocessingML. Junto con los elementos secundarios de columna <gridCol> de cuadrícula, el <tblGrid> elemento define las columnas de una tabla y especifica el ancho predeterminado de las celdas de tabla en las columnas. Use un objeto TableGrid para definir las columnas de una tabla en un documento WordprocessingML.

Clase GridColumn

La clase SDK GridColumn de Open XML representa el elemento de columna <gridCol> de cuadrícula definido en el esquema formato de archivo Open XML para documentos WordprocessingML. El <gridCol> elemento es un elemento secundario del <tblGrid> elemento y define una sola columna en una tabla de un documento WordprocessingML. Use la clase GridColumn para manipular una columna individual en un documento WordprocessingML.

Clase TableRow

La clase SDK TableRow de Open XML representa el elemento de fila <tr> de tabla definido en el esquema de formato de archivo Open XML para documentos WordprocessingML. El <tr> elemento define una fila de una tabla en un documento WordprocessingML, de forma análoga a la <tr> etiqueta en HTML. Una fila de tabla también puede tener formato aplicado mediante un elemento de propiedades <trPr> de fila de tabla. La clase SDK TableRowProperties de Open XML representa el <trPr> elemento .

Clase TableCell

La clase SDK TableCell de Open XML representa el elemento de celda <tc> de tabla definido en el esquema de formato de archivo Open XML para documentos WordprocessingML. El <tc> elemento define una celda de una tabla de un documento WordprocessingML, de forma análoga a la <td> etiqueta en HTML. Una celda de tabla también puede tener formato aplicado mediante un elemento de propiedades <tcPr> de celda de tabla. La clase SDK TableCellProperties de Open XML representa el <tcPr> elemento .

Ejemplo de código del SDK de Open XML

Mediante el siguiente código se inserta una tabla con una fila y tres columnas en un 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;
    }
}

Cuando se ejecuta este código, se escribe el siguiente XML en el documento WordprocessingML especificado en el 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>

Recursos adicionales