Como trabalhar com tabelas do WordprocessingML
Este tópico aborda a classe Open XML SDK Table e como se relaciona com o esquema WordprocessingML formatos de ficheiro Open XML do Office.
Tabelas no WordprocessingML
O texto seguinte da especificação ISO/IEC 29500 apresenta o elemento de tabela Open XML WordprocessingML.
Outro tipo de conteúdo ao nível do bloco no WordprocessingML, uma tabela é um conjunto de parágrafos (e outros conteúdos ao nível do bloco) dispostos em linhas e colunas.
As tabelas no WordprocessingML são definidas através do elemento tbl, que é análogo à etiqueta HTML <table>
. O elemento de tabela especifica a localização de uma tabela presente no documento.
Um tbl
elemento tem dois elementos que definem as respetivas propriedades: tblPr
, que define o conjunto de propriedades ao nível da tabela (como o estilo e a largura) e tblGrid
, que define o esquema de grelha da tabela. Um tbl
elemento também pode conter um número arbitrário diferente de zero de linhas, em que cada linha é especificada com um tr
elemento. Cada tr
elemento pode conter um número arbitrário diferente de zero de células, em que cada célula é especificada com um tc
elemento.
© ISO/IEC 29500: 2016
A tabela seguinte lista algumas das classes de SDK Open XML mais comuns utilizadas ao trabalhar com tabelas.
Elemento XML | Abrir Classe SDK XML |
---|---|
Célula de Conteúdo | Célula de Conteúdo |
gridCol | Coluna de Grelha |
tblGrid | TableGrid |
tblPr | TableProperties |
tc | TableCell |
tr | TableRow |
Abrir Classe de Tabela do SDK XML
A classe Open XML SDK Table representa o <tbl>
elemento definido no esquema Open XML File Format para documentos wordprocessingML, conforme abordado acima. Utilize um objeto Tabela para manipular uma tabela individual num documento do 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 propriedades ao nível da tabela para uma tabela. Utilize um objeto TableProperties para definir propriedades ao nível da tabela para uma tabela num documento do 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 os elementos subordinados da coluna <gridCol>
de grelha, o <tblGrid>
elemento define as colunas de uma tabela e especifica a largura predefinida das células da tabela nas colunas. Utilize um objeto TableGrid para definir as colunas numa tabela num documento do WordprocessingML.
Classe GridColumn
A classe Open XML SDK GridColumn representa o elemento de coluna <gridCol>
de grelha definido no esquema Open XML File Format para documentos wordprocessingML. O <gridCol>
elemento é um elemento subordinado do <tblGrid>
elemento e define uma única coluna numa tabela num documento do WordprocessingML. Utilize a classe GridColumn para manipular uma coluna individual num documento do 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 numa tabela num documento wordprocessingML, análogo à <tr>
etiqueta em HTML. Uma linha de tabela também pode ter formatação aplicada ao mesmo através de um elemento de propriedades de linha de <trPr>
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>
da tabela definido no esquema Open XML File Format para documentos wordprocessingML. O <tc>
elemento define uma célula numa tabela num documento do WordprocessingML, análoga à <td>
etiqueta em HTML. Uma célula de tabela também pode ter formatação aplicada ao mesmo com um elemento de propriedades de célula de <tcPr>
tabela. A classe Open XML SDK TableCellProperties representa o <tcPr>
elemento .
Open XML SDK Code Example
O código seguinte insere uma tabela com 1 linha e 3 colunas num 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 este código é executado, o seguinte XML é escrito 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>