Поделиться через


Работа с таблицами 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>

См. также