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 dos Formatos de Arquivo XML abertos do Office.
O texto a seguir da especificação ISO/IEC 29500 apresenta o elemento de tabela Open XML WordprocessingML.
Outro tipo de conteúdo em nível de bloco no WordprocessingML, uma tabela é um conjunto de parágrafos (e outros conteúdos em nível de bloco) organizados em linhas e colunas.
Tabelas no WordprocessingML são definidas por meio do elemento tbl, que é análogo à marca de tabela> HTML<. O elemento de tabela especifica o local de uma tabela presente no documento.
Um elemento tbl tem dois elementos que definem suas propriedades: tblPr, que define o conjunto de propriedades em toda a tabela (como estilo e largura) e tblGrid, que define o layout da grade da tabela. Um elemento tbl também pode conter um número arbitrário não zero de linhas, em que cada linha é especificada com um elemento tr. Cada elemento tr pode conter um número arbitrário não zero de células, em que cada célula é especificada com um elemento tc.
© ISO/IEC29500: 2008.
A tabela a seguir lista algumas das classes de SDK Open XML mais comuns usadas ao trabalhar com tabelas.
Elemento XML | Classe SDK Open XML |
---|---|
Célula content | Célula content |
gridCol | GridColumn |
tblGrid | TableGrid |
tblPr | TableProperties |
Tc | TableCell |
tr | TableRow |
A classe Open XML SDK Table representa o elemento (<tbl>) definido no esquema Open XML File Format para documentos WordprocessingML, conforme discutido acima. Use um Tableobject para manipular uma tabela individual em um documento wordprocessingML.
A classe Open XML SDK TableProperties representa o elemento (<tblPr>) definido no esquema Open XML File Format para documentos WordprocessingML. O <elemento tblPr> define propriedades em toda a tabela para uma tabela. Use um objeto TableProperties para definir propriedades em toda a tabela para uma tabela em um documento WordprocessingML.
A classe Open XML SDK TableGrid representa o elemento (<tblGrid>) definido no esquema Open XML File Format para documentos WordprocessingML. Em conjunto com elementos filho da coluna de grade (<gridCol>), o <elemento tblGrid> define as colunas para uma tabela e especifica a largura padrão das células de tabela nas colunas. Use um objeto TableGrid para definir as colunas em uma tabela em um documento WordprocessingML.
A classe Open XML SDK GridColumn representa o elemento gridCol> (<coluna de grade) definido no esquema Open XML File Format para documentos WordprocessingML. O <elemento gridCol> é um elemento filho do <elemento tblGrid> 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.
A classe Open XML SDK TableRow representa o elemento de linha de tabela (<tr>) definido no esquema Open XML File Format para documentos WordprocessingML. O <elemento tr> define uma linha em uma tabela em um documento WordprocessingML, análoga à <marca tr> em HTML. Uma linha de tabela também pode ter a formatação aplicada a ela usando um elemento trPr> (<propriedades de linha de tabela). A classe Open XML SDK TableRowProperties representa o <elemento trPr> .
A classe Open XML SDK TableCell representa o elemento tc> (<célula de tabela) definido no esquema Open XML File Format para documentos WordprocessingML. O <elemento tc> define uma célula em uma tabela em um documento WordprocessingML, análogo à <marca td> em HTML. Uma célula de tabela também pode ter a formatação aplicada a ela usando um elemento tcPr> (<propriedades de célula de tabela). A classe Open XML SDK TableCellProperties representa o <elemento tcPr> .
O código a seguir insere uma tabela com 1 linha e 3 colunas em um documento.
public static void 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.
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);
}
}
Public Sub InsertTableInDoc(ByVal filepath As String)
' Open a WordprocessingDocument for editing using the filepath.
Using wordprocessingDocument As WordprocessingDocument = _
WordprocessingDocument.Open(filepath, True)
' Assign a reference to the existing document body.
Dim body As Body = wordprocessingDocument.MainDocumentPart.Document.Body
' Create a table.
Dim tbl As New Table()
' Set the style and width for the table.
Dim tableProp As New TableProperties()
Dim tableStyle As New TableStyle() With {.Val = "TableGrid"}
' Make the table width 100% of the page width.
Dim tableWidth As New TableWidth() With {.Width = "5000", .Type = TableWidthUnitValues.Pct}
' Apply
tableProp.Append(tableStyle, tableWidth)
tbl.AppendChild(tableProp)
' Add 3 columns to the table.
Dim tg As New TableGrid(New GridColumn(), New GridColumn(), New GridColumn())
tbl.AppendChild(tg)
' Create 1 row to the table.
Dim tr1 As New TableRow()
' Add a cell to each column in the row.
Dim tc1 As New TableCell(New Paragraph(New Run(New Text("1"))))
Dim tc2 As New TableCell(New Paragraph(New Run(New Text("2"))))
Dim tc3 As 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)
End Using
End Sub
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>