Работа с таблицами WordprocessingML
В этом разделе рассматривается класс Open XML SDK Table и его связь со схемой WordprocessingML форматов файлов Office Open XML.
Таблицы в WordprocessingML
В следующей выдержке из стандарта ISO/IEC 29500 представляется элемент таблицы WordprocessingML в Open XML.
Еще один тип содержимого уровня блока в WordprocessingML. Таблица представляет собой набор абзацев (и другого содержимого уровня блока), организованных в строки и столбцы.
Таблицы в WordprocessingML определяются с помощью элемента tbl, который аналогичен HTML-тегу <table>
. Элемент таблицы задает расположение таблицы в документе.
Элемент tbl
содержит два элемента, определяющих его свойства: tblPr
, который определяет набор свойств для всей таблицы (например, стиль и ширина), и tblGrid
, определяющий макет сетки таблицы. Элемент tbl
также может содержать произвольное число строк, отличное от нуля, где каждая строка указана с помощью tr
элемента . Каждый tr
элемент может содержать произвольное число ячеек, отличное от нуля, где каждая ячейка указана с помощью tc
элемента .
© ISO/IEC 29500: 2016
В следующей таблице перечисляются некоторые из самых распространенных классов пакета Open XML SDK для работы с таблицами.
Элемент XML | Класс пакета SDK Open XML |
---|---|
Ячейка содержимого | Ячейка содержимого |
gridCol | GridColumn |
tblGrid | TableGrid |
tblPr | Свойства таблицы |
tc | TableCell |
tr | TableRow |
Класс таблицы Пакета SDK Open XML
Класс Open XML SDK Table представляет элемент, определенный <tbl>
в схеме формата файлов Open XML для документов WordprocessingML, как описано выше. Используйте объект Table для управления отдельной таблицей в документе WordprocessingML.
Класс TableProperties
Класс Open XML SDK TableProperties представляет элемент, определенный <tblPr>
в схеме формата файлов Open XML для документов WordprocessingML. Элемент <tblPr>
определяет свойства для таблицы на уровне таблицы. Используйте объект TableProperties, чтобы задавать свойства на уровне таблицы в документе WordprocessingML.
Класс TableGrid
Класс Open XML SDK TableGrid представляет элемент, определенный <tblGrid>
в схеме формата файлов Open XML для документов WordprocessingML. В сочетании с дочерними элементами столбца <gridCol>
сетки <tblGrid>
элемент определяет столбцы для таблицы и задает ширину ячеек таблицы по умолчанию в столбцах. Используйте объект TableGrid, чтобы определять столбцы таблицы в документе WordprocessingML.
Класс GridColumn
Класс Open XML SDK GridColumn представляет элемент столбца <gridCol>
сетки, определенный в схеме формата файлов Open XML для документов WordprocessingML. Элемент <gridCol>
является дочерним элементом <tblGrid>
элемента и определяет один столбец в таблице в документе WordprocessingML. Используйте класс GridColumn для управления отдельным столбцом в документе WordprocessingML.
Класс TableRow
Класс Open XML SDK TableRow представляет элемент строки <tr>
таблицы, определенный в схеме формата файлов Open XML для документов WordprocessingML. Элемент <tr>
определяет строку в таблице в документе WordprocessingML, аналогичную тегу <tr>
в HTML. К строке таблицы также может применяться форматирование с помощью элемента свойств <trPr>
строки таблицы. Класс Пакета SDK TableRowProperties Open XML представляет <trPr>
элемент .
Класс TableCell
Класс Open XML SDK TableCell представляет элемент ячейки <tc>
таблицы, определенный в схеме формата файлов Open XML для документов WordprocessingML. Элемент <tc>
определяет ячейку в таблице в документе WordprocessingML, аналогичную тегу <td>
в HTML. К ячейке таблицы также может применяться форматирование с помощью элемента свойств <tcPr>
ячейки таблицы. Класс Пакета SDK TableCellProperties Open XML представляет <tcPr>
элемент .
Пример кода Open XML SDK
В следующем коде в документ вставляется таблица с 1 строкой и 3 столбцами.
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;
}
}
После запуска кода в документ WordprocessingML, указанный в этом коде, записывается следующий XML-код.
<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>