Arbeiten mit WordprocessingML-Tabellen
In diesem Thema wird die Open XML SDK Table-Klasse und ihre Beziehung zum WordprocessingML-Schema der Office Open XML-Dateiformate erläutert.
Tabellen in WordprocessingML
Im folgenden Text aus der Spezifikation ISO/IEC 29500 wird das Open XML WordprocessingML-Tabellenelement eingeführt.
Ein weiterer Inhaltstyp auf Blockebene in WordprocessingML, eine Tabelle, besteht aus einer Reihe von Absätzen (und anderen Inhalten auf Blockebene), die in Zeilen und Spalten angeordnet sind.
Tabellen in WordprocessingML werden über das tbl-Element definiert, das analog zum HTML-Tabellentag <> ist. Das Tabellenelement gibt die Position einer Tabelle im Dokument an.
A tbl element has two elements that define its properties: tblPr, which defines the set of table-wide properties (such as style and width), and tblGrid, which defines the grid layout of the table. A tbl element can also contain an arbitrary non-zero number of rows, where each row is specified with a tr element. Each tr element can contain an arbitrary non-zero number of cells, where each cell is specified with a tc element.
© ISO/IEC29500: 2008.
In der folgenden Tabelle sind einige der Open XML SDK-Klassen aufgeführt, die beim Arbeiten mit Tabellen am häufigsten verwendet werden.
XML-Element | Open XML SDK-Klasse |
---|---|
Inhaltszelle | Inhaltszelle |
gridCol | GridColumn |
tblGrid | TableGrid |
tblPr | TableProperties |
tc | TableCell |
tr | TableRow |
Open XML SDK-Tabellenklasse
Die Open XML SDK Table-Klasse stellt das (<tbl>)-Element dar, das wie oben beschrieben im Open XML-Dateiformatschema für WordprocessingML-Dokumente definiert ist. Verwenden Sie ein Table-Objekt, um eine einzelne Tabelle in einem WordprocessingML-Dokument zu bearbeiten.
TableProperties-Klasse
Die Open XML SDK TableProperties-Klasse stellt das (<tblPr>)-Element dar, das im Open XML-Dateiformatschema für WordprocessingML-Dokumente definiert ist. Das <tblPr-Element> definiert tabellenweite Eigenschaften für eine Tabelle. Verwenden Sie ein TableProperties-Objekt, um tabellenweite Eigenschaften für eine Tabelle in einem WordprocessingML-Dokument festzulegen.
TableGrid-Klasse
Die Open XML SDK TableGrid-Klasse stellt das (<tblGrid>)-Element dar, das im Open XML-Dateiformatschema für WordprocessingML-Dokumente definiert ist. In Verbindung mit untergeordneten Elementen der Rasterspalte (<gridCol>) definiert das <tblGrid-Element> die Spalten für eine Tabelle und gibt die Standardbreite der Tabellenzellen in den Spalten an. Verwenden Sie ein TableGrid-Objekt, um die Spalten einer Tabelle in einem WordprocessingML-Dokument zu definieren.
GridColumn-Klasse
Die GridColumn-Klasse des Open XML SDK stellt das Rasterspaltenelement (<gridCol>) dar, das im Open XML-Dateiformatschema für WordprocessingML-Dokumente definiert ist. Das <gridCol-Element> ist ein untergeordnetes Element des <tblGrid-Elements> und definiert eine einzelne Spalte in einer Tabelle in einem WordprocessingML-Dokument. Verwenden Sie die GridColumn-Klasse, um eine einzelne Spalte in einem WordprocessingML-Dokument zu bearbeiten.
TableRow-Klasse
Die Open XML SDK TableRow-Klasse stellt das Tabellenzeilenelement (<tr>) dar, das im Open XML-Dateiformatschema für WordprocessingML-Dokumente definiert ist. Das <tr-Element> definiert eine Zeile in einer Tabelle in einem WordprocessingML-Dokument, analog zum <tr-Tag> in HTML. Eine Tabellenzeile kann auch mithilfe eines trPr-Elements> (<Table Row Properties) formatierungsgesteuert auf sie angewendet werden. Die TableRowProperties-Klasse des Open XML SDK stellt das <trPr-Element> dar.
TableCell-Klasse
Die Open XML SDK TableCell-Klasse stellt das Tabellenzellenelement (<tc>) dar, das im Open XML-Dateiformatschema für WordprocessingML-Dokumente definiert ist. Das <tc-Element> definiert eine Zelle in einer Tabelle in einem WordprocessingML-Dokument, analog zum <td-Tag> in HTML. Eine Tabellenzelle kann auch mithilfe eines tcPr-Elements> (<Table Cell Properties) formatierungsgesteuert auf sie angewendet werden. Die TableCellProperties-Klasse des Open XML SDK stellt das <tcPr-Element> dar.
Open XML SDK-Codebeispiel
Im folgenden Code wird eine Tabelle mit 1 Zeile und 3 Spalten in ein Dokument eingefügt.
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
Bei Ausführung des Codes wird folgende XML in das im vorherigen Code angegebene WordprocessingML-Dokument geschrieben.
<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>