Работа с таблицами SpreadsheetML
В этом разделе рассматривается класс Open XML SDK Table и его связь со схемой SpreadsheetML формата файла Open XML. Дополнительные сведения об общей структуре частей и элементов, образующих документ SpreadsheetML, см. в статье Структура документа SpreadsheetML (Open XML SDK).
Таблицы SpreadsheetML
В следующей информации из спецификации ISO/IEC 29500 представлен table
элемент (<table/>
).
Таблица позволяет упорядочить и структурировать данные на листе. Таблицы имеют четко обозначенные строки, столбцы и области данных. Таблицы позволяют упростить сортировку, анализ, форматирование, упорядочение и удаление данных.
Если область данных обозначена как таблица, пользователи получают дополнительные возможности для выполнения различных действий. [Пример: если пользователь вводит дополнительные данные в строку, прилегающую к нижней границе таблице, таблица может расшириться и автоматически включить эти данные в свою область данных. Аналогичным образом для добавления столбца достаточно просто ввести новый заголовок столбца справа или слева от имеющихся заголовков. Возможности фильтрации и сортировки предоставляются пользователю через раскрывающиеся списки. Для подведения итогов или выполнения вычислений с данными таблицы можно создавать особые вычисляемые столбцы. Такие столбцы могут расширяться и сужаться в зависимости от размера таблицы и автоматически поддерживают правильность ссылок в формулах. конец примера]
Таблицы можно создавать на основе уже имеющихся на листе данных, на основе внешнего запроса данных и на основе сопоставления коллекции повторяющихся XML-элементов диапазону листа.
В XML-коде листа хранятся числовые и текстовые данные. В XML-коде таблицы записываются различные атрибуты для конкретного объекта таблицы.
Таблица SpreadsheetML представляет собой логическую конструкцию, указывающую, что диапазон данных относится к отдельному набору данных. SpreadsheetML уже использует табличную модель для указания значений в строках и столбцах, но вы также можете пометить подмножество листа как и table
присвоить ему определенные свойства, полезные для анализа. Таблица в разметке SpreadsheetML позволяет анализировать данные новыми способами, например с помощью фильтрации, форматирования и привязки данных.
Как и другие конструкции SpreadsheetML, таблица на листе хранится в отдельной части пакета. Часть таблицы не содержит никаких данных, данные хранятся в ячейках листа. Дополнительные сведения о хранящихся на листе данных см. Дополнительные сведения о данных, хранящихся на листе, см. в разделе Работа с листами.
В следующей таблице перечислены распространенные классы open XML SDK, используемые при работе с классом Table
.
Элемент SpreadsheetML | Класс пакета SDK Open XML |
---|---|
<tableColumn/> |
TableColumn |
<autoFilter/> |
AutoFilter |
Класс таблицы Пакета SDK Open XML
Класс Open XML SDK Table
представляет элемент таблицы (<table/>
), определенный в схеме формата файлов Open XML для документов SpreadsheetML. Используйте класс для Table
управления отдельными <table/>
элементами в документе SpreadsheetML.
В следующей информации из спецификации ISO/IEC 29500 представлен table
элемент (<table/>
).
Экземпляр этого типа части содержит описание отдельной таблицы и сведения об автофильтре. (Данные таблицы хранятся в соответствующей части листа.)
Корневым элементом для части данного типа содержимого должна быть таблица.
Часть таблицы содержит определение отдельной таблицы. Если на листе размещено несколько таблиц, будет создано несколько частей таблиц. Корневым элементом для данной части является таблица. Как минимум, для таблицы необходимо указать сведения о входящих в нее столбцах. Однако для включения автофильтрации необходимо определить по крайней мере один автофильтр (можно пустой). Если автофильтр не задан, при открытии документа в Excel автофильтрация будет отключена.
Элемент table
имеет несколько атрибутов, используемых для идентификации таблицы и диапазона данных, который он охватывает.
id
Атрибуты и name
должны быть уникальными во всех частях таблицы. Атрибут displayName
должен быть уникальным для всех частей таблицы и уникальным для всех определенных имен в книге. Атрибут name
используется объектной моделью в Excel. Атрибут displayName
используется ссылками в формулах. Атрибут ref
используется для идентификации диапазона ячеек, охватываемого таблицей. Это относится не только к данным таблицы, но и к заголовку таблицы с именами столбцов. Дополнительные сведения об атрибутах таблицы см. в спецификации ISO/IEC 29500.
Класс TableColumn
Чтобы добавить столбцы в таблицу, необходимо добавить новые tableColumn
элементы в коллекцию tableColumns
. Эта коллекция имеет атрибут-счетчик для отслеживания количества столбцов.
В следующей информации из спецификации ISO/IEC 29500 представлен TableColumn
элемент (<tableColumn/>
).
Элемент, представляющий один столбец этой таблицы.
Класс автоматической фильтрации
В следующей информации из спецификации ISO/IEC 29500 представлен AutoFilter
элемент (<autoFilter/>
).
Класс AutoFilter временно скрывает строки на основе условий фильтрации, которые применяются к таблице данных на листе по столбцам. Эта коллекция представляет параметры автофильтрации.
Пример: в этом примере создается фильтр для отображения только тех значений, которые превышают 0,5. Этот фильтр применяется к диапазону B3:E8, а критерий применяется к тем значениям в столбце, где colId='1' (нумерация столбцов начинается с нуля и идет слева направо). Следовательно, будут скрыты все строки, где значение в этом столбце не превышает 0,5.
<autoFilter ref="B3:E8">
<filterColumn colId="1">
<customFilters>
<customFilter operator="greaterThan" val="0.5"/>
</customFilters>
</filterColumn>
</autoFilter>
Пример SpreadsheetML
В данном примере показан XML-код для файла с одной таблицей на листе Sheet1. Таблица состоит из трех строк и трех столбцов и включает строку заголовков столбцов.
Приведенный ниже XML-код определяет лист и хранится в файле "sheet1.xml". XML-файл листа содержит фактические данные, отображаемые в таблице, и элемент tablePart
, ссылающийся на файл "table1.xml", содержащий определение таблицы.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<worksheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:mc="https://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="x14ac" xmlns:x14ac="https://schemas.microsoft.com/office/spreadsheetml/2009/9/ac">
<dimension ref="A1:C4"/>
<sheetViews>
<sheetView tabSelected="1" workbookViewId="0">
<selection sqref="A1:C4"/>
</sheetView>
</sheetViews>
<sheetFormatPr defaultRowHeight="15" x14ac:dyDescent="0.25"/>
<cols>
<col min="1" max="3" width="11" customWidth="1"/>
</cols>
<sheetData>
<row r="1" spans="1:3" x14ac:dyDescent="0.25">
<c r="A1" t="s">
<v>0</v>
</c>
<c r="B1" t="s">
<v>1</v>
</c>
<c r="C1" t="s">
<v>2</v>
</c>
</row>
<row r="2" spans="1:3" x14ac:dyDescent="0.25">
<c r="A2">
<v>1</v>
</c>
<c r="B2">
<v>2</v>
</c>
<c r="C2">
<v>3</v>
</c>
</row>
<row r="3" spans="1:3" x14ac:dyDescent="0.25">
<c r="A3">
<v>4</v>
</c>
<c r="B3">
<v>5</v>
</c>
<c r="C3">
<v>6</v>
</c>
</row>
<row r="4" spans="1:3" x14ac:dyDescent="0.25">
<c r="A4">
<v>7</v>
</c>
<c r="B4">
<v>8</v>
</c>
<c r="C4">
<v>9</v>
</c>
</row>
</sheetData>
<pageMargins left="0.7" right="0.7" top="0.75" bottom="0.75" header="0.3" footer="0.3"/>
<tableParts count="1">
<tablePart r:id="rId1"/>
</tableParts>
</worksheet>
Приведенный ниже XML-код определяет таблицу и хранится в файле "table1.xml". В XML-файле таблицы определяется диапазон и внешний вид таблицы, а также автофильтры.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<table xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" id="1" name="Table1" displayName="Table1" ref="A1:C4" totalsRowShown="0">
<autoFilter ref="A1:C4"/>
<tableColumns count="3">
<tableColumn id="1" name="Column1"/>
<tableColumn id="2" name="Column2"/>
<tableColumn id="3" name="Column3"/>
</tableColumns>
<tableStyleInfo name="TableStyleMedium2" showFirstColumn="0" showLastColumn="0" showRowStripes="1" showColumnStripes="0"/>
</table>