ГОСТ Р ИСО/МЭК 26300—2010/Раздел 8

Материал из Викитеки — свободной библиотеки
ГОСТ Р ИСО/МЭК 26300—2010 «Информационная технология. Формат Open Document для офисных приложений (OpenDocument) v1.0» — Раздел 8


8 Таблицы[править]

В данном разделе описывается структура таблиц, используемая для таблиц, вложенных в текстовые документы, и электронных таблиц.

8.1 Общая модель таблиц[править]

Структура таблиц OpenDocument подобна структуре таблиц [HTML4] или [XSL], и, как и они, таблицы могут вкладываться.

Представление таблиц основано на сетке строк и столбцов. Строки имеют больший приоритет, чем столбцы. Таблица делится на строки, строки делятся на ячейки. Каждый столбец включает описание столбца, но это описание не содержит ячеек.

Строки таблиц могут быть пустыми, различные строки могут содержать разное количество ячеек. Это не является ошибкой, но разные приложения могут трактовать это неодинаково. Приложения электронных таблиц обычно работают с большими таблицами, которые имеют фиксированные, зависящие от приложения, номера строк и столбцов, но могут содержать неиспользуемые области. В файле сохраняется только используемая область таблицы. Когда в приложении электронных таблиц загружается таблица с пустыми или неполными строками, пустые строки обычно представляются строками по умолчанию (как пустая таблица), а неполные строки заполняются пустыми ячейками (подобно пустой таблице). Все другие приложения обычно имеют фиксированный размер таблицы. Неполные строки обычно обрабатываются как имеющие достаточное количество пустых ячеек. Так же обрабатываются пустые строки. Пустые ячейки обычно занимают пространство пустого абзаца.

Строки и столбцы фигурируют в группах строк и группах столбцов. Эти группы определяют, должны ли повторяться строки или столбцы на следующей странице.

8.1.1 Элемент таблицы[править]

Элемент таблицы является корнем для таблиц.

<define name="table-table">
    <element name="table:table">
        <ref name="table-table-attlist"/>
        <optional>
            <ref name="table-table-source"/>
        </optional>
        <optional>
            <ref name="office-dde-source"/>
        </optional>
        <optional>
            <ref name="table-scenario"/>
        </optional>
        <optional>
            <ref name="office-forms"/>
        </optional>
        <optional>
            <ref name="table-shapes"/>
        </optional>
        <ref name="table-columns-and-groups"/>
        <ref name="table-rows-and-groups"/>
    </element>
</define>

Модель содержимого таблиц весьма сложна. Детали будут рассмотрены в разделе 8.2. Сейчас можно допустить, что элемент таблицы состоит из элементов строки и столбца.

<define name="table-columns-and-groups">
    <oneOrMore>
        <choice>
            <ref name="table-table-column-group"/>
            <ref name="table-columns-no-group"/>
        </choice>
    </oneOrMore>
</define>

<define name="table-columns-no-group">
    <choice>
        <group>
            <ref name="table-columns"/>
            <optional>
                <ref name="table-table-header-columns"/>
                <optional>
                    <ref name="table-columns"/>
                </optional>
            </optional>
        </group>
        <group>
              <ref name="table-table-header-columns"/>
              <optional>
                  <ref name="table-columns"/>
              </optional>
        </group>
    </choice>
</define>

<define name="table-columns">
    <choice>
        <ref name="table-table-columns"/>
        <oneOrMore>
            <ref name="table-table-column"/>
        </oneOrMore>
    </choice>
</define>

<define name="table-rows-and-groups">
    <oneOrMore>
        <choice>
            <ref name="table-table-row-group"/>
            <ref name="table-rows-no-group"/>
        </choice>
    </oneOrMore>
</define>

<define name="table-rows-no-group">
    <choice>
        <group>
            <ref name="table-rows"/>
            <optional>
                <ref name="table-table-header-rows"/>
                <optional>
                    <ref name="table-rows"/>
                </optional>
            </optional>
        </group>
        <group>
            <ref name="table-table-header-rows"/>
            <optional>
                <ref name="table-rows"/>
            </optional>
        </group>
    </choice>
</define>

<define name="table-rows">
    <choice>
        <ref name="table-table-rows"/>
        <oneOrMore>
            <ref name="table-table-row"/>
        </oneOrMore>
    </choice>
</define>
Имя таблицы[править]

Атрибут table:name определяет имя таблицы.

<define name="table-table-attlist" combine="interleave">
    <optional>
        <attribute name="table:name">
            <ref name="string"/>
        </attribute>
    </optional>
</define>
Стиль таблицы[править]

Атрибут table:style-name ссылается на стиль таблицы, т. е. на элемент <style:style> типа таблица. Стиль таблицы описывает свойства форматирования таблицы, такие как ширина и цвет фона. Стиль таблицы может быть автоматическим или общим стилем.

<define name="table-table-attlist" combine="interleave">
  <optional>
    <attribute name="table:style-name">
    <ref name="styleNameRef"/>
    </attribute>
  </optional>
</define>

Пример — Стиль таблицы:

<style:style style:name="Table 1" style:family="table">
    <style:table-properties style:width="12cm"
     fo:background-color="light-grey"/>
</style:style>

<table:table table:name="Table 1" table:style-name="Table 1">
    ...
</table:table>
Защищенность[править]

Атрибут table:protected определяет, защищена ли таблица от редактирования. Если таблица защищена, атрибут table:protection-key может определять пароль с целью предотвращения возможности сброса флага защищенности пользователем для разрешения редактирования. Если таблица защищена, все ее элементы и элементы ячеек с атрибутом style:cell-protect, со значением true, являются защищенными.

Во избежание сохранения пароля напрямую в XML-файл, в атрибуте table:protection-key сохраняется только значение хеш-функции пароля.

<define name="table-table-attlist" combine="interleave">
    <optional>
        <attribute name="table:protected" a:defaultValue="false">
            <ref name="boolean"/>
        </attribute>
    </optional>
    <optional>
        <attribute name="table:protection-key">
            <text/>
        </attribute>
    </optional>
</define>
Печать[править]

Атрибут table:print определяет, является ли таблица печатаемой. Он принимает логическое значение. Если оно равно true, таблица печатаемая, если false, таблица непечатаемая. Значение по умолчанию равно true. Атрибут table:print переопределяется атрибутом table:display, описанным в разделе 15.8.14. Т. е. если таблица неотображаемая, то она непечатаемая.

Если таблица печатаемая, фактически печатаемый диапазон таблицы может быть определен атрибутом table:print-ranges (см. следующий раздел). Если этот атрибут не существует, будет распечатана используемая область таблицы.

<define name="table-table-attlist" combine="interleave">
    <optional>
        <attribute name="table:print" a:defaultValue="true">
            <ref name="boolean"/>
        </attribute>
    </optional>
</define>
Диапазон печати[править]

Атрибут table:print-ranges определяет области печати таблицы, т. е. ячейки, которые должны быть напечатаны. Он содержит список адресов ячеек или диапазон адресов ячеек, как описано в разделе 8.3.1.

<define name="table-table-attlist" combine="interleave">
    <optional>
        <attribute name="table:print-ranges">
            <ref name="cellRangeAddressList"/>
        </attribute>
    </optional>
</define>

8.1.2 Строка таблицы[править]

Элемент <table:table-row> представляет строку таблицы. Он содержит элементы, определяющие ячейки данной строки таблицы.

Элемент <table:table-row> подобен элементу [XSL] <fo:table-row>.

<define name="table-table-row">
    <element name="table:table-row">
        <ref name="table-table-row-attlist"/>
        <oneOrMore>
            <choice>
                <ref name="table-table-cell"/>
                <ref name="table-covered-table-cell"/>
            </choice>
        </oneOrMore>
    </element>
</define>
Количество повторяемых строк[править]

Атрибут table:number-rows-repeated определяет количество строк, к которым применяется данный элемент строки. Если две или более строки являются соседними, имеют одинаковое содержимое и свойства и не содержат вертикально объединенных ячеек, то они могут быть описаны одним элементом <table:table-row>, который имеет атрибут table:number-rows-repeated со значением большим 1.

<define name="table-table-row-attlist" combine="interleave">
    <optional>
        <attribute name="table:number-rows-repeated" a:defaultValue="1">
            <ref name="positiveInteger"/>
        </attribute>
    </optional>
</define>
Стиль строки[править]

Стиль строки таблицы хранит свойства форматирования строки таблицы, такие как высота и цвет фона. Стиль строки определяется элементом <style:style> со значением семейства атрибутов table-row. Стиль строки таблицы может быть автоматическим либо общим стилем. Он связывается атрибутом строки таблицы table:style-name.

<define name="table-table-row-attlist" combine="interleave">
    <optional>
        <attribute name="table:style-name">
            <ref name="styleNameRef"/>
        </attribute>
    </optional>
</define>
Стиль ячейки по умолчанию[править]

Атрибут table:default-cell-style-name определяет стиль ячейки по умолчанию. Ячейки, содержащиеся в строке, не имеющей индивидуального стиля ячейки, используют этот стиль по умолчанию.

<define name="table-table-row-attlist" combine="interleave">
    <optional>
        <attribute name="table:default-cell-style-name">
            <ref name="styleNameRef"/>
        </attribute>
    </optional>
</define>
Видимость[править]

Атрибут table:visibility определяет, является ли строка видимой, отфильтрованной или свернутой. Отфильтрованные и свернутые строки невидимы. Отфильтрованные строки невидимы, так как фильтр применяется к таблице, которая не выбирает свою строку. Свернутые строки становятся невидимыми при помощи пользовательского интерфейса.

<define name="table-table-row-attlist" combine="interleave">
    <optional>
        <attribute name="table:visibility" a:defaultValue="visible">
            <ref name="table-visibility-value"/>
        </attribute>
    </optional>
</define>

<define name="table-visibility-value">
    <choice>
        <value>visible</value>
        <value>collapse</value>
        <value>filter</value>
    </choice>
</define>

Пример — Таблица с тремя строками и тремя столбцами.

В данном примере приведен код OpenDocument для таблицы с тремя строками и тремя столбцами. Цвет фона первых двух строк таблицы — синий.

<style:style style:name="Table 1" style:family="table">
    <style:table-properties style:width="12cm"
        fo:background-color="light-grey"/>
</style:style>
<style:style style:name="Col1" style:family="table-column">
    <style:table-column-properties style:column-width="2cm"/>
</style:style>
<style:style style:name="Col2" style:family="table-column">
    <style:table-column-properties style:column-width="4cm"/>
</style:style>
<style:style style:name="Col3" style:family="table-column">
    <style:table-column-properties style:column-width="6cm"/>
</style:style>
<style:style style:name="Row1" style:family="table-row">
    <style:table-row-properties fo:background-color="blue"/>
</style:style>

<table:table table:name="Table 1" table:style-name="Table 1">
    <table:table-columns>
        <table:table-column table:style-name="Col1"/>
        <table:table-column table:style-name="Col2"/>
        <table:table-column table:style-name="Col3"/>
    </table:table-columns>
    <table:table-rows>
        <table:table-row table:style-name="Row1">
            ...
        </table:table-row>
        <table:table-row table:style-name="Row1">
            ...
        </table:table-row>
        <table:table-row>
            ...
        </table:table-row>
    <table:table-rows>
</table:table>

8.1.3 Ячейки таблицы[править]

Элементы <table:table-cell> и <table:covered-table-cell> определяют содержимое ячеек таблицы. Они содержатся в элементах строк таблицы. Ячейки таблицы могут содержать абзацы и другое текстовое содержимое, включая подтаблицы. Ячейки таблицы могут быть пустыми.

Элемент <table:table-cell> очень похож на элемент ячейки таблицы [XSL] и [HTML4]. Существующие HTML и XSL правила, относящиеся к ячейкам, охватывающим несколько столбцов или строк, также применимы и к спецификации OpenDocument. Это означает, что элементы <table:table-cell> отсутствуют в строках/столбцах сетки для позиций, которые перекрыты объединенными ячейками, охватывающими несколько столбцов или строк. С целью определения ячеек для таких позиций используется элемент <table:covered-table-cell>. Он должен появляться в каждой позиции строки/столбца сетки, перекрытой ячейкой, охватывающей несколько строк или столбцов. Эта позиция в сетке вычисляется в предположении, что диапазон объединения столбца и строки равен 1 для всех ячеек, независимо от того, определены они элементом <table:table-cell> или <table:covered-table-cell>. Элемент <table:covered-table-cell> обычно используется в приложениях электронных таблиц, для которых характерно наличие содержимого в объединенной ячейке.

<define name="table-table-cell">
    <element name="table:table-cell">
        <ref name="table-table-cell-attlist"/>
        <ref name="table-table-cell-attlist-extra"/>
        <ref name="table-table-cell-content"/>
    </element>
</define>

<define name="table-covered-table-cell">
    <element name="table:covered-table-cell">
        <ref name="table-table-cell-attlist"/>
        <ref name="table-table-cell-content"/>
    </element>
</define>

<define name="table-table-cell-content">
    <optional>
        <ref name="table-cell-range-source"/>
    </optional>
    <optional>
        <ref name="office-annotation"/>
    </optional>
    <optional>
        <ref name="table-detective"/>
    </optional>
    <zeroOrMore>
        <ref name="text-content"/>
    </zeroOrMore>
</define>
Количество повторяемых ячеек[править]

Атрибут table:number-columns-repeated определяет количество последовательных столбцов, в которых повторяются ячейки. Он может быть использован для описания двух и более соседних ячеек в одном элементе ячейки, если выполняются следующие условия:

  • ячейки имеют одинаковые содержимое и свойства;
  • ячейки не объединены по горизонтали или по вертикали.

В этом случае для задания количества последовательных столбцов, в которых будут повторяться ячейки, должен использоваться атрибут table:number-columns-repeated. Этот атрибут определяестя с одним из двух элементов: <table:table-cell> или <table:covered-table-cell>.

<define name="table-table-cell-attlist" combine="interleave">
    <optional>
        <attribute name="table:number-columns-repeated" a:defaultValue="1">
            <ref name="positiveInteger"/>
        </attribute>
    </optional>
</define>
Количество объединенных строк и столбцов[править]

Эти атрибуты определяют количество объединенных ячейкой строк и столбцов. Атрибуты могут использоваться только с элементом <table:table-cell>.

В том случае, когда ячейка перекрывает другие ячейки, так как значение объединения столбцов или строк более одного, для представления объединенной ячейки должен использоваться элемент <table:covered-table-cell>.

<define name="table-table-cell-attlist-extra" combine="interleave">
    <optional>
        <attribute name="table:number-columns-spanned" a:defaultValue="1">
            <ref name="positiveInteger"/>
        </attribute>
    </optional>
    <optional>
        <attribute name="table:number-rows-spanned" a:defaultValue="1">
            <ref name="positiveInteger"/>
        </attribute>
    </optional>
</define>
Стиль ячейки[править]

Стиль ячейки таблицы хранит свойства форматирования ячейки, такие как:

  • цвет фона;
  • формат числа;
  • вертикальное выравнивание;
  • обрамление.

Стиль ячейки таблицы может быть автоматическим или общим стилем. Стиль определяется атрибутом table:style-name. Если ячейка не имеет назначенного стиля ячейки, приложение проверяет, определен ли в текущей строке стиль ячейки по умолчанию. Если текущая строка не имеет стиля ячейки по умолчанию, приложение проверяет, определен ли стиль ячейки по умолчанию в текущем столбце.

<define name="table-table-cell-attlist" combine="interleave">
    <optional>
        <attribute name="table:style-name">
            <ref name="styleNameRef"/>
        </attribute>
    </optional>
</define>
Проверка содержимого ячейки[править]

Атрибут table:content-validation-name указывается, если в ячейке осуществляется проверка правильности содержимого. Значение этого атрибута является именем элемента <table:cell-content-validation>. Если атрибут не представлен, ячейка может иметь произвольное содержимое.

<define name="table-table-cell-attlist" combine="interleave">
    <optional>
        <attribute name="table:content-validation-name">
            <ref name="string"/>
        </attribute>
    </optional>
</define>

Более детальные сведения о проверке содержимого ячейки и об элементе <table:cell-content-validation> приведены в разделе 8.5.3.

Формулы[править]

Формулы позволяют производить вычисления в ячейках таблицы. Каждая формула начинается с префикса пространства имен, задающего синтаксис и семантику, используемые в формуле. Обычно формула начинается со знака равенства (=) и может включать следующие компоненты:

  • числа;
  • текст;
  • именованные диапазоны;
  • знаки арифметических операций;
  • логические операторы;
  • вызовы функций;
  • адреса ячеек, содержащих числа — адрес может быть относительным или абсолютным (см. раздел 8.3.1), адреса в формулах начинаются с символа «[» и заканчиваются символом «]» (сведения об адресации ячеек или диапазонов ячеек приведены в разделе 8.3.1).

Рассмотрим пример простой формулы:

=sum([.A1:.A5])

Формула вычисляет сумму значений во всех ячейках в диапазоне «.A1:.A5». Используется функция «sum». Параметры заключены в круглые скобки «(» в начале и «)» в конце. Если функция содержит более одного параметра, параметры разделяются символом «;».

Формулу, приведенную выше, можно представить в виде:

=sum([.A1];[.A2];[.A3];[.A4];[.A5])

Результат будет тем же. Компоненты, используемые в формуле, зависят от используемого приложения.

Атрибут table:formula содержит формулу ячейки таблицы.

<define name="table-table-cell-attlist" combine="interleave">
    <optional>
        <attribute name="table:formula">
            <ref name="string"/>
        </attribute>
    </optional>
</define>

В дополнение, вычисленное значение формулы доступно обычным способом. Текущее значение ячейки представляется одним из следующих атрибутов:

  • office:value
  • office:date-value
  • office:time-value
  • office:boolean-value
  • office:string-value
Матрицы[править]

В том случае, когда приложение выполняет вычисления электронной таблицы, связный диапазон ячеек, содержащих значения, называется матрицей. Если диапазон ячеек содержит m строк и n столбцов, матрица называется матрицей размера m x n. Минимально возможные матрицы состоят из двух соседних ячеек и имеют размеры 1 x 2 или 2 x 1. Для использования матрицы в формуле в нее включается диапазон адресов ячеек матрицы. В матричной формуле допустимо использование только специальных операций с матрицами.

Количество строк и столбцов, объединенных в матрицу, представляется атрибутами table:number-matrix-rows-spanned и table:number-matrix-columns-spanned, привязанными к элементам ячеек.

<define name="table-table-cell-attlist-extra" combine="interleave">
    <optional>
        <attribute name="table:number-matrix-columns-spanned">
            <ref name="positiveInteger"/>
        </attribute>
    </optional>
    <optional>
        <attribute name="table:number-matrix-rows-spanned">
            <ref name="positiveInteger"/>
        </attribute>
    </optional>
</define>
Тип значения[править]

Атрибут table:value-type определяет тип значения, размещенного в ячейке. Он может принимать одно из следующих значений:

  • float, percentage или currency — вещественные, процентный или денежный числовые типы;
  • date — дата;
  • time — время;
  • boolean — логический;
  • string — текстовый.
<define name="table-table-cell-attlist" combine="interleave">
    <optional>
        <ref name="common-value-and-type-attlist"/>
    </optional>
</define>
Текущее числовое значение ячейки[править]

Атрибут office:value определяет текущее числовое значение ячейки. Этот атрибут вычисляется только для ячеек, содержащих следующие типы данных:

  • float — вещественный;
  • percentage — процентный;
  • currency — денежный.
Текущая денежная единица ячейки[править]

Атрибут tableoffice:currency определяет текущую денежную единицу ячейки. Значение этого атрибута — обычно информация о валюте, например, DEM или EUR. Данный атрибут определяется для ячеек, имеющих тип данных currency.

Текущее значение даты ячейки[править]

Атрибут office:date-value определяет текущее значение даты ячейки. Данный атрибут определяется для ячеек, имеющих тип данных date.

Некоторые приложения поддерживают значения даты и времени в дополнение к датам.

Текущее значение времени ячейки[править]

Атрибут office:time-value определяет текущее значение времени ячейки. Данный атрибут определяется для ячеек, имеющих тип данных time.

Текущее логическое значение ячейки[править]

Атрибут office:boolean-value определяет текущее логическое значение ячейки. Данный атрибут определяется для ячеек, имеющих тип данных boolean.

Текущее текстовое значение ячейки[править]

Атрибут office:string-value определяет текущее текстовое значение в ячейке. Данный атрибут определяется для ячеек, имеющих тип данных string.

Защита ячеек таблицы[править]

Атрибут table:protected обеспечивают защиту ячеек таблицы. Пользователи не могут редактировать содержимое ячейки, помеченной как защищенная.

<define name="table-table-cell-attlist" combine="interleave">
    <optional>
        <attribute name="table:protect" a:defaultValue="false">
            <ref name="boolean"/>
        </attribute>
    </optional>
</define>

Данный атрибут не связан с атрибутом table:protected табличного элемента (см. раздел 8.1.1) и атрибутом стиля ячейки таблицы table:cell-protect (см. раздел 15.11.14).

8.2 Расширенная модель таблиц[править]

8.2.1 Описание столбца[править]

Каждый столбец таблицы имеет элемент описания столбца таблицы <table:table-column>. Он подобен [XSL] элементу <fo:table-column> и, используется, главным образом, для указания стиля столбца, который определяет, например, ширину столбца.

<define name="table-table-column">
    <element name="table:table-column">
        <ref name="table-table-column-attlist"/>
        <empty/>
    </element>
</define>
Количество повторяемых столбцов[править]

Атрибут table:number-columns-repeated определяет количество столбцов, в которых повторяется описание столбца. Если два или более соседних столбца имеют одинаковые свойства, этот атрибут позволяет описать их одним элементом <table:table-column>.

<define name="table-table-column-attlist" combine="interleave">
    <optional>
        <attribute name="table:number-columns-repeated" a:defaultValue="1">
            <ref name="positiveInteger"/>
        </attribute>
    </optional>
</define>
Стиль столбца[править]

Стиль столбца таблицы хранит информацию о свойствах форматирования столбца, таких как ширина и цвет фона. Он определяется элементом <style:style> со значением семейства атрибутов table-column и может быть автоматическим или общим стилем. Стиль столбца определяется с использованием атрибута table:style-name.

<define name="table-table-column-attlist" combine="interleave">
    <optional>
        <attribute name="table:style-name">
            <ref name="styleNameRef"/>
        </attribute>
    </optional>
</define>
Видимость[править]

Атрибут table:visibility определяет, является ли столбец видимым, отфильтрованным или свернутым. Более детальные сведения приведены в разделе 8.1.2.

<define name="table-table-column-attlist" combine="interleave">
    <optional>
        <attribute name="table:visibility" a:defaultValue="visible">
            <ref name="table-visibility-value"/>
        </attribute>
    </optional>
</define>
Стиль ячейки по умолчанию[править]

Атрибут table:default-cell-style-name определяет стиль ячейки по умолчанию. Ячейки, стиль которых не определен, используют данный стиль в том случае, если не задан стиль по умолчанию ячеек строки.

<define name="table-table-column-attlist" combine="interleave">
    <optional>
        <attribute name="table:default-cell-style-name">
            <ref name="styleNameRef"/>
        </attribute>
    </optional>
</define>

Пример — Таблица с тремя столбцами.

В примере приведен код OpenDocument для таблицы с тремя столбцами:

<style:style style:name="Table 1" style:family="table">
    <style:table-properties style:width="12cm"
        fo:background-color="light-grey"/>
</style:style>
<style:style style:name="Col1" style:family="table-column">
    <style:table-column-properties style:column-width="2cm"/>
</style:style>
<style:style style:name="Col2" style:family="table-column">
    <style:table-column-properties style:column-width="4cm"/>
</style:style>
<style:style style:name="Col3" style:family="table-column">
    <style:table-column-properties style:column-width="6cm"/>
</style:style>

<table:table table:name="Table 1" table:style-name="Table 1">
    <table:table-columns>
        <table:table-column table:style-name="Col1"/>
        <table:table-column table:style-name="Col2"/>
        <table:table-column table:style-name="Col3"/>
    </table:table-columns>
    ...
</table:table>

8.2.2 Заголовки столбцов[править]

Если таблица не может быть размещена на одной странице, то несколько соседних столбцов могут автоматически повторяться на каждой странице. Для этого описания столбцов должны быть включены в элемент <table:table-header-columns>. Описания столбцов, которые не должны повторяться на каждой странице, могут быть включены в элемент <table:table-columns>, но это не обязательно. Таблица не должна содержать более одного элемента <table:table-header-columns>, и за элементом <table:table-columns> не должен следовать другой элемент <table:table-columns>. Единственным исключением являются таблицы, содержащие сгруппированные столбцы (см. раздел 8.2.3). Такие таблицы содержат более одного элемента <table:table-header-columns>, при этом они должны входить в различные группы столбцов, состоящих из соседних элементов.

Приложения, которые не поддерживают заголовки столбцов, должны обрабатывать их описания так же, как и описания столбцов без заголовков.

Элементы <table:table-header-columns> и <table:table-columns> очень похожи на элементы [HTML4] <THEAD> и <TBODY> для строк.

<define name="table-table-header-columns">
    <element name="table:table-header-columns">
        <oneOrMore>
            <ref name="table-table-column"/>
        </oneOrMore>
    </element>
</define>

<define name="table-table-columns">
    <element name="table:table-columns">
        <oneOrMore>
            <ref name="table-table-column"/>
        </oneOrMore>
    </element>
</define>

8.2.3 Группы столбцов[править]

Соседние столбцы таблицы могут быть сгруппированы с использованием элемента <table:table-column-group>. Каждая группа может содержать новую группу, столбцы и заголовки столбцов. Группа столбцов может быть видимой и скрытой. Группы столбцов могут, например, использоваться приложениями электронных таблиц для группировки столбцов, данные которых суммируются. Таким образом, отдельные столбцы, вносящие вклад в сумму, можно сделать невидимыми, в то время как сумма остается видимой.

Если набор заголовков столбцов и группа столбцов перекрываются, то заголовок группы столбцов разрывает набор заголовков столбцов. Т. е. <table:table-column-group> может содержать элементы <table:table-header-columns>, но не наоборот.

<define name="table-table-column-group">
    <element name="table:table-column-group">
        <ref name="table-table-column-group-attlist"/>
        <ref name="table-columns-and-groups"/>
    </element>
</define>
Видимость[править]

Атрибут table:display определяет, является ли группа видимой или невидимой.

<define name="table-table-column-group-attlist" combine="interleave">
    <optional>
        <attribute name="table:display" a:defaultValue="true">
            <ref name="boolean"/>
        </attribute>
    </optional>
</define>

8.2.4 Заголовки строк[править]

Если таблица не может быть размещена на одной странице, то несколько соседних строк могут автоматически повторяться на каждой странице. Для этого описания строк должны быть включены в элемент <table:table-header-rows>. Описания столбцов, которые не должны повторяться на каждой странице, могут быть включены в элемент <table:table-rows>, но не обязательно. Таблица может содержать более одного элемента <table:table-header-rows>, и за <table:table-rows> не должен следовать другой элемент <table:table-rows>. Единственным исключением являются таблицы, содержащие сгруппированные строки (см. раздел 8.2.5). Такие таблицы содержат более одного элемента <table:table-header-rows>, при этом обеспечивается их вхождение в различные группы строк, состоящих из соседних элементов.

Приложения, которые не поддерживают заголовки строк, должны обрабатывать их описания так же, как и описания строк без заголовков.

Элементы <table:table-header-rows> и <table:table-rows> очень похожи на элементы [HTML4] <THEAD> и <TBODY>.

<define name="table-table-header-rows">
    <element name="table:table-header-rows">
        <oneOrMore>
            <ref name="table-table-row"/>
        </oneOrMore>
    </element>
</define>

<define name="table-table-rows">
    <element name="table:table-rows">
        <oneOrMore>
            <ref name="table-table-row"/>
        </oneOrMore>
    </element>
</define>

8.2.5 Группы строк[править]

Соседние строки таблицы могут быть сгруппированы с использованием элемента <table:table-row-group>. Каждая группа может содержать новую группу, строки и заголовки строк. Группа строк может быть видимой и скрытой. Группы строк могут, например, использоваться приложениями электронных таблиц для группировки строк, данные которых суммируются. Таким образом, отдельные строки, вносящие вклад в сумму, можно сделать невидимыми, в то время как сумма остается видимой.

Если набор заголовков строк и группа строк перекрываются, то заголовок группы строк разрывает набор заголовков строк. Т. е. <table:table-row-group> может содержать элементы <table:table-header-rows>, но не наоборот.

<define name="table-table-row-group">
    <element name="table:table-row-group">
        <ref name="table-table-row-group-attlist"/>
        <ref name="table-rows-and-groups"/>
    </element>
</define>
Видимость[править]

Атрибут table:display определяет, является ли группа видимой или невидимой.

<define name="table-table-row-group-attlist" combine="interleave">
    <optional>
        <attribute name="table:display" a:defaultValue="true">
            <ref name="boolean"/>
        </attribute>
    </optional>
</define>

8.2.6 Подтаблицы[править]

Если ячейка таблицы содержит одну таблицу и не содержит абзацев и других элементов, то такая таблица определяется как подтаблица. Она занимает всю ячейку, и в этой ячейке не может быть другого содержимого.

Обрамление подтаблицы объединяется с обрамлением ячейки, в которой она расположена. Подтаблица не содержит никаких свойств форматирования. Подтаблица — это, по существу, контейнер для некоторого количества дополнительных строк, которые неразрывно связаны с родительской таблицей.

Вложенная таблица преобразуется в подтаблицу атрибутом table:is-subtable, который включается в элемент таблицы. Вложенная таблица, не определенная как подтаблица, рассматривается как таблица в таблице, т. е. она имеет собственное обрамление и подчиняется правилам выравнивания родительской ячейки.

<define name="table-table-attlist" combine="interleave">
    <optional>
        <attribute name="table:is-sub-table" a:defaultValue="false">
            <ref name="boolean"/>
        </attribute>
    </optional>
</define>

Пример — представление подтаблицы.

В схеме OpenDocument такая таблица может быть представлена двумя способами, представленными в Примере 1 и Примере 2.

A1 B1 C1
A2 B2.1.1 B2.2.1
B2.1.2

Пример 1

При использовании ячеек, объединяющих несколько строк, таблица определяется следующим образом:

<style:style style:name="Table 1" style:family="table">
    <style:table-properties style:width="12cm"
                     fo:background-color="light-grey"/>
</style:style>
<style:style style:name="Col1" style:family="table-column">
    <style:table-column-properties style:column-width="2cm"/>
</style:style>
<style:style style:name="Col2" style:family="table-column">
    <style:table-column-properties style:column-width="4cm"/>
</style:style>
<style:style style:name="Col3" style:family="table-column">
    <style:table-column-properties style:column-width="6cm"/>
</style:style>
<style:style style:name="Row1" style:family="table-row">
    <style:table-row-properties fo:background-color="grey"/>
</style:style>
<style:style style:name="Cell1" style:family="table-cell">
    <style:table-cell-properties fo:background-color="grey"/>
</style:style>
<table:table table:name="Table 1" table:style-name="Table 1">
    <table:table-columns>
        <table:table-column table:style-name="Col1"/>
        <table:table-column table:style-name="Col2"/>
        <table:table-column table:style-name="Col3"/>
    </table:table-columns>
    <table:table-header-rows>
        <table:table-row table:style-name="Row1">
            <table:table-cell>
                <text:p text:style="Table Caption">
                    A1
                </text:p>
            </table:table-cell>
            <table:table-cell>
                <text:p text:style="Table Caption">
                    B1
                </text:p>
            </table:table-cell>
            <table:table-cell>
                <text:p text:style="Table Caption">
                    C1
                </text:p>
            </table:table-cell>
        </table:table-row>
    </table:table-header-rows>
    <table:table-rows>
        <table:table-row>
            <table:table-cell table:number-rows-spanned="2"
                table:style-name="Cell1">
                <text:p text:style="Table Body">
                    A2
                </text:p>
            </table:table-cell>
            <table:table-cell>
                <text:p text:style="Table Body">
                    B2.1.1
                </text:p>
            </table:table-cell>
            <table:table-cell>
                <text:p text:style="Table Body">
                    B2.2.1
                </text:p>
            </table:table-cell>
        </table:table-row>
        <table:table-row>
            <table:covered-table-cell/>
            <table:table-cell table:number-columns-spanned="2">
                <text:p text:style="Table Body">
                B2.1.2
            </text:p>
            </table:table-cell>
            <table:covered-table-cell/>
        </table:table-row>
    </table:table-rows>
</table:table>

Пример 2 При использованием подтаблиц таблица определяется следующим образом:

<style:style style:name="Table 1" style:family="table">
    <style:table-properties fo:width="12cm" fo:background-color="light-
grey"/>
</style:style>
<style:style style:name="Col1" style:family="table-column">
    <style:table-column-properties style:column-width="2cm"/>
</style:style>
<style:style style:name="Col2" style:family="table-column">
    <style:table-column-properties style:column-width="4cm"/>
</style:style>
<style:style style:name="Col3" style:family="table-column">
    <style:table-column-properties style:column-width="6cm"/>
</style:style>
<style:style style:name="Row1" style:family="table-row">
    <style:table-row-properties fo:background-color="grey"/>
</style:style>
<style:style style:name="Cell1" style:family="table-cell">
    <style:table-cell-properties fo:background-color="grey"/>
</style:style>

<table:table table:name="Table 1" table:style-name="Table 1">
    <table:table-columns>
        <table:table-column table:style-name="Col1"/>
        <table:table-column table:style-name="Col2"/>
        <table:table-column table:style-name="Col3"/>
    </table:table-columns>
    <table:table-header-rows>
        <table:table-row table:style-name="Row1">
            <table:table-cell>
                <text:p text:style="Table Caption">
                    A1
                </text:p>
            </table:table.cell>
            <table:table-cell>
                <text:p text:style="Table Caption">
                    B1
                </text:p>
            </table:table-cell>
            <table:table-cell>
                <text:p text:style="Table Caption">
                    C1
                </text:p>
            </table:table-cell>
        </table:table-row>
    </table:table-header-rows>
    <table:table-rows>
        <table:table-row>
            <table:table-cell table:style-name="Cell1">
                <text:p text:style="Table Body">
                    A2
                </text:p>
            </table:table-cell>
            <table:table-cell table:number-columns-spanned="2">
                <table:table is-subtable="true">
                    <table:table-columns>
                        <table:table-column table:style-name="Col2"/>
                        <table:table-column table:style-name="Col3"/>
                    </table:table-columns>
                    <table:rows>
                        <table:row>
                            <table:table-cell>
                                <text:p text:style="Table Body">
                                    B2.1.1
                                </text:p>
                            </table:table-cell>
                            <table:table-cell>
                                <text:p text:style="Table Body">
                                    B2.2.1
                                </text:p>
                            </table:table-cell>
                        </table:table-row>
                        <table:table-row>
                            <table:table-cell
                                table:number-columns-spanned="2">
                                <text:p text:style="Table Body">
                                    B2.1.2
                                </text:p>
                                </table:table-cell>
                            <table:covered-table-cell/>
                        </table:table-row>
                    </table:table-rows>
                </table:table>
            </table:table-cell>
            <table:covered-table-cell/>
        </table:table-row>
    </table:table-rows>
</table:table>

8.3 Расширенные таблицы[править]

8.3.1 Ссылки на ячейки таблицы[править]

Для ссылки на ячейки таблицы используются так называемые адреса ячеек. Адрес ячейки имеет следующую структуру:

  1. Имя таблицы.
  2. Точка (.).
  3. Буквенное значение, идентифицирующее столбец. Буква А обозначает столбец 1, B — столбец 2, и так далее. АА представляет столбец 27, AB — столбец 28 и так далее.
  4. Числовое значение, идентифицирующее строку. Число 1 представляет первую строку, число 2 — вторую и так далее.

Это означает, что А1 представляет ячейку на пересечении столбца 1 и строки 1. B1 представляет ячейку на пересечении столбца 2 и строки 1. A2 представляет ячейку на пересечении столбца 1 и строки 2.

Например, в таблице с именем SampleTable ссылка на ячейку на пересечении столбца 34 и строки 16 представляется адресом SampleTable.AH16. В некоторых случаях имя таблицы указывать не обязательно. Однако, точка должна быть представлена. Если имя таблицы не требуется, то адрес из предыдущего примера будет иметь вид .AH16.

Адрес ячейки подтаблицы имеет следующую структуру:

  1. Адрес ячейки, содержащей подтаблицу.
  2. Точка (.).
  3. Адрес ячейки в подтаблице.

Например, ссылка на ячейку на пересечении столбца 1 и строки 1 подтаблицы с именем Subtable, расположенной в ячейке на пересечении столбца 34 и строки 16 таблицы SampleTable, будет представлена адресом SampleTable.AH16.A1. Если имя таблицы содержит пробелы, оно должно быть заключено в апострофы (').

Абсолютная и относительная адресация[править]

Ссылки на ячейки могут быть заданы абсолютными либо относительными адресами. При выполнении операции с ячейкой таблицы, например копировании формулы, абсолютная ссылка на ячейку не меняется. В отличие от этого, относительные ссылки адаптируются к адресу ячейки, в которую осуществляется копирование. В предыдущем примере использована относительная адресация.

Для создания абсолютного адреса необходимо установить знак доллара ($) перед именем таблицы, идентификатором столбца и идентификатором строки. Например, абсолютный адрес для предыдущего примера имеет вид $SampleTable.$AH$16. Абсолютные и относительные ссылки могут комбинироваться в одном адресе ячейки. Например, SampleTable.AH$16, ссылается относительно на таблицу и столбец, но абсолютно на строку. Абсолютные адреса должны обязательно содержать имя таблицы. Учет различий между абсолютными и относительными адресами необходим только в некоторых ситуациях. Если необходимости нет, могут использоваться ссылки без знака доллара.

<define name="cellAddress">
    <data type="string">
        <param name="pattern">($?([^\. ']+|'[^']+'))?\.$?[A-Z]+$?[0-9]+</param>
    </data>
</define>
Адрес диапазона ячеек[править]

Диапазон ячеек — это набор соседних ячеек, образующих прямоугольник. Прямоугольник простирается от верхней левой ячейки до нижней правой.

Адрес диапазона ячеек ссылается на диапазон ячеек. Он имеет следующую структуру:

  1. Адрес верхней левой ячейки диапазона.
  2. Двоеточие (:).
  3. Адрес нижней правой ячейки диапазона.

Например, адрес .A1:.B2 является ссылкой на диапазон ячеек от находящейся на пересечении столбца 1 и строки 1 до находящейся на пересечении столбца 2 и строки 2. Минимальный диапазон определяется как одна ячейка. В этом случае адрес диапазона совпадает с адресом ячейки.

<define name="cellRangeAddress">
    <data type="string">
        <param name="pattern">($?([^\. ']+|'[^']+'))?\.$?[A-Z]+$?[0-9]+(:($?
([^\. ']+|'[^']+'))?\.$?[A-Z]+$?[0-9]+)?</param>
    </data>
</define>
Список адресов диапазонов ячеек[править]

Список адресов диапазонов ячеек — это список диапазонов ячеек и адресов ячеек. Элементы списка отделяются пробелом. Если имя таблицы содержит пробелы, оно должно быть заключено в апострофы (').

<define name="cellRangeAddressList">
    <!-- Value is a space separated list of "cellRangeAddress" patterns -->
    <data type="string"/>
</define>

8.3.2 Связанные таблицы[править]

Если таблица связана с первичной таблицей, информация о таблице-источнике содержится в элементе <table:table-source>. С элементом <table:table-source> могут быть связаны следующие атрибуты:

  • режим;
  • имя таблицы;
  • URL;
  • имя фильтра;
  • параметры фильтра;
  • интервал обновления.
<define name="table-table-source">
    <element name="table:table-source">
        <ref name="table-table-source-attlist"/>
        <ref name="table-linked-source-attlist"/>
        <empty/>
    </element>
</define>
Режим[править]

Атрибут table:mode определяет, какие данные должны быть скопированы из исходной таблицы в целевую таблицу. Если атрибут имеет значение, равное copy-all, то будут скопированы формулы и стили. Если атрибут имеет значение copy-results-only (копировать только результаты), то будут скопированы только результаты вычислений и невычисляемое содержимое ячеек.

<define name="table-table-source-attlist" combine="interleave">
    <optional>
        <attribute name="table:mode" a:defaultValue="copy-all">
            <choice>
                <value>copy-all</value>
                <value>copy-results-only</value>
            </choice>
        </attribute>
    </optional>
</define>
Имя таблицы[править]

Атрибут table:table-name определяет имя таблицы первичного документа. Если имя таблицы не определено, то будет использована первая таблица документа.

<define name="table-table-source-attlist" combine="interleave">
    <optional>
        <attribute name="table:table-name">
            <ref name="string"/>
        </attribute>
    </optional>
</define>
URL[править]

Первичная таблица определяется посредством XLink, где атрибут xlink:href определяет URL документа, содержащего первичную таблицу.

<define name="table-linked-source-attlist" combine="interleave">
    <optional>
        <attribute name="xlink:type" a:defaultValue="simple">
            <value>simple</value>
        </attribute>
    </optional>
    <optional>
        <attribute name="xlink:actuate" a:defaultValue="onRequest">
            <value>onRequest</value>
        </attribute>
    </optional>
    <attribute name="xlink:href">
        <ref name="anyURI"/>
    </attribute>
</define>
Имя фильтра[править]

Атрибут table:filter-name определяет тип файла документа, содержащего первичную таблицу. Значение этого атрибута зависит от конкретного приложения.

<define name="table-linked-source-attlist" combine="interleave">
    <optional>
        <attribute name="table:filter-name">
            <ref name="string"/>
        </attribute>
    </optional>
</define>
Параметры фильтра[править]

Атрибут table:filter-options определяет необязательные настройки типа файла. Значение этого атрибута зависит от конкретного приложения.

<define name="table-linked-source-attlist" combine="interleave">
    <optional>
        <attribute name="table:filter-options">
            <ref name="string"/>
        </attribute>
    </optional>
</define>
Интервал обновления[править]

Атрибут table:refresh-delay определяет интервал времени между обновлениями связанной таблицы.

<define name="table-linked-source-attlist" combine="interleave">
    <optional>
        <attribute name="table:refresh-delay">
            <ref name="duration"/>
        </attribute>
    </optional>
</define>

8.3.3 Таблицы сценариев[править]

Сценарий — это область таблицы, данные в которой временно связаны с другой таблицей, называемой таблицей сценария. Если несколько сценариев определены для одной и той же области, пользователь может переключаться от одного к другому. Будет ли таблица сценария видимой, определяется стилем таблицы. Только одна таблица сценария может быть активной в отдельной таблице.

Таблица, содержащая <table:scenario>, представляет собой таблицу сценария. Имя таблицы и имя сценария совпадают. Сценарий отображается в обычной таблице, предшествующей таблице сценария. Если таблица сценария для таблицы существует, сценарий отображается в этой таблице автоматически. Это означает, что существование таблицы сценария предполагает существование сценария.

С данным элементом могут быть связаны следующие атрибуты:

  • диапазоны сценария;
  • активность;
  • отображение обрамления;
  • цвет обрамления;
  • копирование обратно;
  • копирование стилей;
  • копирование формул;
  • комментарий;
  • защищенность.
<define name="table-scenario">
    <element name="table:scenario">
        <ref name="table-scenario-attlist"/>
        <empty/>
    </element>
</define>
Диапазоны сценария[править]

Атрибут table:scenario-ranges определяет диапазон ячеек таблицы, который отображается как сценарий. Значением этого атрибута является список адресов диапазонов ячеек.

<define name="table-scenario-attlist" combine="interleave">
    <attribute name="table:scenario-ranges">
        <ref name="cellRangeAddressList"/>
    </attribute>
</define>
Активность[править]

Атрибут table:is-active определяет, является ли активным сценарий, принадлежащий таблице сценария.

<define name="table-scenario-attlist" combine="interleave">
    <attribute name="table:is-active">
        <ref name="boolean"/>
    </attribute>
</define>
Отображение обрамления[править]

Атрибут table:display-border определяет, отображается ли обрамление вокруг сценария, принадлежащего таблице сценария.

<define name="table-scenario-attlist" combine="interleave">
    <optional>
        <attribute name="table:display-border" a:defaultValue="true">
            <ref name="boolean"/>
        </attribute>
    </optional>
</define>
Цвет обрамления[править]

Атрибут table:border-color определяет цвет обрамления, отображаемого вокруг сценария, принадлежащего таблице сценария.

<define name="table-scenario-attlist" combine="interleave">
    <optional>
        <attribute name="table:border-color">
            <ref name="color"/>
        </attribute>
    </optional>
</define>
Копирование обратно[править]

Атрибут table:copy-back определяет, копируются ли данные обратно в таблицу сценария, если активизируется другой сценарий.

<define name="table-scenario-attlist" combine="interleave">
    <optional>
        <attribute name="table:copy-back" a:defaultValue="true">
            <ref name="boolean"/>
        </attribute>
    </optional>
</define>
Копирование стилей[править]

Атрибут table:copy-styles определяет, копируются ли стили из таблицы сценария в целевую таблицу вместе с данными.

<define name="table-scenario-attlist" combine="interleave">
    <optional>
        <attribute name="table:copy-styles" a:defaultValue="true">
            <ref name="boolean"/>
        </attribute>
    </optional>
</define>
Копирование формул[править]

Атрибут table:copy-formulas определяет, копируются ли формулы из таблицы сценария в целевую таблицу. Значение атрибута может принимать значение true или false. Если значение равно true, то формулы копируются. Если значение равно false, то будут копироваться только результаты формул.

<define name="table-scenario-attlist" combine="interleave">
    <optional>
        <attribute name="table:copy-formulas" a:defaultValue="true">
            <ref name="boolean"/>
        </attribute>
    </optional>
</define>
Комментарий[править]

Атрибут table:comment содержит комментарий о сценарии.

<define name="table-scenario-attlist" combine="interleave">
    <optional>
        <attribute name="table:comment">
            <ref name="string"/>
        </attribute>
    </optional>
</define>
Защищенность[править]

Атрибут table:protected определяет, защищены ли от редактирования, данные, отображаемые в сценарии. Значение атрибута анализируется только в том случае, если таблица, в которой отображается сценарий также является защищенной (см. раздел 8.1.1).

<define name="table-scenario-attlist" combine="interleave">
    <optional>
        <attribute name="table:protected">
            <ref name="boolean"/>
        </attribute>
    </optional>
</define>

8.3.4 Фигуры[править]

Элемент <table:shapes> содержит все графические фигуры с привязкой к таблице, потомком которой является элемент. Этот элемент является контейнером и не имеет сопутствующих атрибутов.

<define name="table-shapes">
    <element name="table:shapes">
        <oneOrMore>
            <ref name="shape"/>
        </oneOrMore>
    </element>
</define>

8.4 Расширенные ячейки таблицы[править]

8.4.1 Связанные ячейки таблицы[править]

Диапазон ячеек может быть связан с диапазоном базы данных или именованным диапазоном другого файла. В этом случае информация о первичном диапазоне базы данных или именованном диапазоне содержится в элементе <table:cell-range-source>, расположенном в первой ячейке диапазона. С данным элементом могут быть связаны следующие атрибуты:

  • имя;
  • последний размер;
  • URL;
  • имя фильтра;
  • параметры фильтра;
  • интервал обновления.
<define name="table-cell-range-source">
    <element name="table:cell-range-source">
        <ref name="table-table-cell-range-source-attlist"/>
        <ref name="table-linked-source-attlist"/>
        <empty/>
    </element>
</define>
Имя[править]

Атрибут table:name определяет имя исходного диапазона базы данных или именованного диапазона.

<define name="table-table-cell-range-source-attlist" combine="interleave">
    <attribute name="table:name">
        <ref name="string"/>
    </attribute>
</define>
Последний размер[править]

Атрибуты table:last-column-spanned и table:last-row-spanned определяют последний известный размер диапазона. Если размер диапазона изменяется с момента последней операции, значение данного атрибута ошибочно.

<define name="table-table-cell-range-source-attlist" combine="interleave">
    <attribute name="table:last-column-spanned">
        <ref name="positiveInteger"/>
    </attribute>
    <attribute name="table:last-row-spanned">
        <ref name="positiveInteger"/>
    </attribute>
</define>
URL, имя фильтра, параметры фильтра и интервал обновления[править]

Атрибуты xlink:href, xlink:type, xlink:actuate, table:filter-name и table:filter-options подобны атрибутам связанных таблиц. Детальные сведения приведены в разделе 8.3.2.

8.4.2 Аннотация ячейки[править]

Формат OpenDocument позволяет размещать аннотацию внутри ячеек таблицы. Для получения детальной информации об аннотациях см. раздел 12.1.

8.4.3 Слежение[править]

Элемент <table:detective> имеет двойное назначение. С одной стороны, он содержит информацию о связях, которые существуют между ячейками таблицы как следствие применения формул и которые должны выделяться в пользовательском интерфейсе цветом. С другой стороны, элемент содержит информацию о ячейках, которые на данный момент выделены цветом в пользовательском интерфейсе либо вследствие упомянутых выше связей, либо вследствие ошибочных условий.

<define name="table-detective">
    <element name="table:detective">
        <zeroOrMore>
            <ref name="table-highlighted-range"/>
        </zeroOrMore>
        <zeroOrMore>
            <ref name="table-operation"/>
        </zeroOrMore>
    </element>
</define>

В элементе <table:detective> могут содержаться следующие элементы:

  • операция слежения;
  • диапазон выделения цветом.

8.4.4 Операция слежения[править]

Элемент <table:operation> определяет, какие конкретные связи, существующие между ячейкой, потомком которой является элемент, и другими ячейками, должны быть сделаны видимыми или невидимыми в пользовательском интерфейсе. Одна и та же операция слежения может быть повторена несколько раз по отношению к одной и той же ячейке. В этом случае вторая операция применяется к результирующей ячейке первой операции и так далее. Это означает, что операция не обязательно применяется только к ячейке, в которой она определена, но и к другим ячейкам, благодаря чему может взаимодействовать с операциями, определенными в других ячейках. Главным образом, это применяется в операциях, которые делают связи невидимыми. Для обеспечения детерминированного поведения, операции имеют индексы и применяются в порядке, определенном ими. С элементом <table:operation> могут быть связаны следующие атрибуты:

  • имя;
  • индекс.
<define name="table-operation">
    <element name="table:operation">
        <ref name="table-operation-attlist"/>
        <empty/>
    </element>
</define>
Имя[править]

Атрибут table:name определяет имя операции слежения. Возможны следующие имена: trace-dependents, remove-dependents, trace-precedents, remove-precedents и trace-errors. trace-dependents и remove-dependents отображают или скрывают ячейки, которые используют значение текущей ячейки в их формулах. trace-dependents и remove-precedents отображают или скрывают ячейки, чьи значения используются в формуле текущей ячейки. trace-errors отображает ячейки, которые привели к ошибке при вычислении результата формулы текущей ячейки.

<define name="table-operation-attlist" combine="interleave">
    <attribute name="table:name">
        <choice>
            <value>trace-dependents</value>
            <value>remove-dependents</value>
            <value>trace-precedents</value>
            <value>remove-precedents</value>
            <value>trace-errors</value>
        </choice>
    </attribute>
</define>
Индекс[править]

Атрибут table:index определяет порядок, в котором применяются операции слежения.

<define name="table-operation-attlist" combine="interleave">
    <attribute name="table:index">
        <ref name="nonNegativeInteger"/>
    </attribute>
</define>

8.4.5 Диапазон выделения цветом[править]

Элемент <table:highlighted-range> определяет диапазон ячеек, который в пользовательском интерфейсе выделяется цветом вследствие ошибки или некорректных данных.

Информация, содержащаяся в этом элементе, может быть устаревшей, но отражает состояние, вычисленное на данный момент операциями слежения или условиями ошибки.

С элементом <table:highlighted-range> могут быть связаны следующие атрибуты:

  • адрес диапазона ячеек;
  • направление;
  • наличие ошибки;
  • метка некорректности.
<define name="table-highlighted-range">
    <element name="table:highlighted-range">
        <choice>
            <group>
                <ref name="table-highlighted-range-attlist"/>
            </group>
            <group>
                <ref name="table-highlighted-range-attlist-invalid"/>
            </group>
        </choice>
        <empty/>
    </element>
</define>
Адрес диапазона ячеек[править]

Атрибут table:cell-range-address содержит адрес диапазона, который в данный момент выделяется цветом.

<define name="table-highlighted-range-attlist" combine="interleave">
    <optional>
        <attribute name="table:cell-range-address">
            <ref name="cellRangeAddress"/>
        </attribute>
    </optional>
</define>
Направление[править]

Атрибут table:direction определяет направление связи между данной ячейкой и диапазоном, выделенным цветом. Например, направление может быть представлено стрелкой.

<define name="table-highlighted-range-attlist" combine="interleave">
    <attribute name="table:direction">
        <choice>
            <value>from-another-table</value>
            <value>to-another-table</value>
            <value>from-same-table</value>
        </choice>
    </attribute>
</define>
Наличие ошибки[править]

Атрибут table:contains-error определяет, содержит ли диапазон ячеек ошибку.

<define name="table-highlighted-range-attlist" combine="interleave">
    <optional>
        <attribute name="table:contains-error" a:defaultValue="false">
            <ref name="boolean"/>
        </attribute>
    </optional>
</define>
Метка некорректности[править]

Атрибут table:marked-invalid определяет, помечена ли текущая ячейка как некорректная. Этот атрибут не может быть использован с другими атрибутами.

<define name="table-highlighted-range-attlist-invalid" combine="interleave">
    <attribute name="table:marked-invalid">
        <ref name="boolean"/>
    </attribute>
</define>

8.5 Содержимое документов электронных таблиц[править]

8.5.1 Защита документа[править]

Структура документа электронной таблицы может быть защищена с использованием атрибута table:structure-protected, чтобы пользователи не имели возможности вставлять, удалять или переименовывать таблицы в документе. Необязательный атрибут table:protection-key может быть использован для задания пароля, предотвращающего сброс пользователями флага защиты для разрешения редактирования. Во избежание сохранения пароля напрямую в XML-файле, в атрибуте table:protection-key сохраняется только значение хеш-функции пароля.

<define name="office-spreadsheet-attlist" combine="interleave">
    <optional>
        <attribute name="table:structure-protected" a:defaultValue="false">
            <ref name="boolean"/>
        </attribute>
    </optional>
    <optional>
        <attribute name="table:protection-key">
            <ref name="string"/>
        </attribute>
    </optional>
</define>

8.5.2 Настройки вычислений[править]

Документы электронных таблиц содержат настройки, которые влияют на вычисления формул, например настройки нулевой даты и итерации. Эти настройки могут быть сохранены в документе с помощью элемента <table:calculation-settings>.

<define name="table-calculation-settings">
    <element name="table:calculation-settings">
        <ref name="table-calculation-setting-attlist"/>
        <optional>
            <ref name="table-null-date"/>
        </optional>
        <optional>
            <ref name="table-iteration"/>
        </optional>
    </element>
</define>

С элементом <table:calculation-settings> могут быть связаны следующие атрибуты:

  • чувствительность к регистру;
  • точность как на экране;
  • распространенность условий поиска на всю ячейку;
  • автоматический поиск надписей;
  • использование регулярных выражений;
  • нулевой год;
  • нулевая дата;
  • итерации.
Чувствительность к регистру[править]

Атрибут table:case-sensitive определяет, учитывается ли различие между верхним и нижним регистрами при применении к содержимому ячейки операторов сравнения.

<define name="table-calculation-setting-attlist" combine="interleave">
    <optional>
        <attribute name="table:case-sensitive" a:defaultValue="true">
            <ref name="boolean"/>
        </attribute>
    </optional>
</define>
Точность как на экране[править]

Атрибут table:precision-as-shown определяет, выполняются ли вычисления с округленными числами электронной таблицы, отображаемыми на экране, или с использованием всех цифр числа. Если значение атрибута равно true, вычисления выполняются с округленными числами электронной таблицы, отображаемыми на экране. Если значение атрибута равно false, вычисления выполняются с использованием всех цифр числа, но результаты также отображаются в округленном виде.

<define name="table-calculation-setting-attlist" combine="interleave">
    <optional>
        <attribute name="table:precision-as-shown" a:defaultValue="false">
            <ref name="boolean"/>
        </attribute>
    </optional>
</define>
Распространенность условий поиска на всю ячейку[править]

Атрибут table:search-criteria-must-apply-to-whole-cell определяет, должно ли условие поиска, соответствующее используемому регулярному выражению, применяться ко всему содержимому ячейки.

<define name="table-calculation-setting-attlist" combine="interleave">
    <optional>
        <attribute name="table:search-criteria-must-apply-to-whole-cell"
                     a:defaultValue="true">
            <ref name="boolean"/>
        </attribute>
    </optional>
</define>
Автоматический поиск надписей[править]

Атрибут table:automatic-find-labels определяет, будет ли осуществляться автоматический поиск надписей строк и столбцов.

<define name="table-calculation-setting-attlist" combine="interleave">
    <optional>
        <attribute name="table:automatic-find-labels" a:defaultValue="true">
            <ref name="boolean"/>
        </attribute>
    </optional>
</define>
Использование регулярных выражений[править]

Атрибут table:use-regular-expressions определяет, разрешено ли использование регулярных выражений при выполнении операций сравнения строк и поиске.

<define name="table-calculation-setting-attlist" combine="interleave">
    <optional>
        <attribute name="table:use-regular-expressions"
                     a:defaultValue="true">
            <ref name="boolean"/>
        </attribute>
    </optional>
</define>
Нулевой год[править]

Атрибут table:null-year определяет начальный год для значений годов, содержащих только две цифры. Две цифры значения года интерпретируются как год равный или следующий за начальным годом.

<define name="table-calculation-setting-attlist" combine="interleave">
    <optional>
        <attribute name="table:null-year" a:defaultValue="1930">
            <ref name="positiveInteger"/>
        </attribute>
    </optional>
</define>
Нулевая дата[править]

Элемент <table:null-date> определяет нулевую дату. Нулевая дата — это дата, которая при преобразовании ее в числовой формат дает значение 0. Нулевая дата определяется в атрибуте table:date-value элемента. Обычно используются значения 12/30/1899, 01/01/1900 и 01/01/1904.

<define name="table-null-date">
    <element name="table:null-date">
        <optional>
            <attribute name="table:value-type" a:defaultValue="date">
                <ref name="valueType"/>
            </attribute>
        </optional>
        <optional>
            <attribute name="table:date-value-type"
                         a:defaultValue="1899-12-30">
                <ref name="date"/>
            </attribute>
        </optional>
        <empty/>
    </element>
</define>
Итерации[править]

Элемент <table:iteration> разрешает вычисление формул с итеративными (или циклическими) ссылками после заданного количества итераций. Вычисление формул с итеративными ссылками повторяется до тех пор, пока задача не будет решена. Если итеративные вычисления не разрешены, появление в таблице формулы с итеративной ссылкой приведет к появлению сообщения об ошибке.

Итеративные вычисления разрешаются и запрещаются атрибутом table:status. Если итеративные вычисления разрешены, в атрибуте table:steps определяется максимально допустимое количество итераций. Атрибут table:maximum-difference определяет максимально допустимую разность между двумя результатами вычислений. Итерация останавливается, если результат меньше значения данного атрибута.

<define name="table-iteration">
    <element name="table:iteration">
        <optional>
            <attribute name="table:status" a:defaultValue="disable">
                <choice>
                    <value>enable</value>
                    <value>disable</value>
                </choice>
            </attribute>
        </optional>
        <optional>
            <attribute name="table:steps" a:defaultValue="100">
                <ref name="positiveInteger"/>
            </attribute>
        </optional>
        <optional>
            <attribute name="table:maximum-difference"
                         a:defaultValue="0.001">
                <ref name="double"/>
            </attribute>
        </optional>
        <empty/>
    </element>
</define>

8.5.3 Проверки содержимого ячеек таблицы[править]

Данный элемент определяет правила проверки правильности содержимого ячеек таблицы. Элемент <table:content-validation> определяет такое правило. Все правила проверки, имеющиеся в документе, содержатся в элементе <table:content-validations>. Сами правила проверки именуются, и эти имена используются для ссылок на них из ячейки таблицы.

<define name="table-content-validations">
    <element name="table:content-validations">
        <oneOrMore>
            <ref name="table-content-validation"/>
        </oneOrMore>
    </element>
</define>

<define name="table-content-validation">
    <element name="table:content-validation">
        <ref name="table-validation-attlist"/>
        <optional>
            <ref name="table-help-message"/>
        </optional>
        <optional>
            <choice>
                <ref name="table-error-message"/>
                <group>
                    <ref name="table-error-macro"/>
                    <optional>
                        <ref name="office-event-listeners"/>
                    </optional>
                </group>
            </choice>
        </optional>
    </element>
</define>

С элементом <table:content-validation> могут быть связаны следующие атрибуты:

  • имя;
  • условие;
  • адрес базовой ячейки;
  • допустимость пустых ячеек;
  • отображение списка.
Имя[править]

Атрибут table:name определяет имя проверки содержимого. Он используется в ячейке, к которой должно быть применено правило, для ссылки на правило проверки. Имя создается приложением автоматически.

<define name="table-validation-attlist" combine="interleave">
    <attribute name="table:name">
        <ref name="string"/>
    </attribute>
</define>
Условие[править]

Атрибут table:condition определяет условие, которое должно принимать значение true для всех ячеек, к которым применено правило проверки. Значение атрибута должно быть префиксом пространства имен, за которым следует логическое выражение.

Типовой синтаксис выражения может быть подобен синтаксису XPath. Ниже приведены существующие условия.

  • Condition ::= ExtendedTrueCondition | TrueFunction 'and' TrueCondition
  • TrueFunction ::= cell-content-is-whole-number() | cell-content-is-decimal-number() | cell-content-is-date() | cell-content-is-time() | cell-content-is-text()
  • ExtendedTrueCondition ::= ExtendedGetFunction | cell-content-text-length() Operator Value
  • TrueCondition ::= GetFunction | cell-content() Operator Value
  • GetFunction ::= cell-content-is-between(Value, Value) | cell-content-is-not-between(Value, Value)
  • ExtendedGetFunction ::= cell-content-text-length-is-between(Value, Value) | cell-content-text-length-is-not-between(Value, Value) | cell-content-is-inlist( StringList )
  • Operator ::= '<' | '>' | '<=' | '>=' | '=' | '!='
  • Value ::= NumberValue | String | Formula
  • StringList ::= StringList ';' String | String
  • Formula — это формула без знака равно (=) в начале. Более подробные сведения приведены в разделе 8.1.3.
  • String — включает один или более символов, заключенных в кавычки.
  • NumberValue — целое или вещественное число. Оно не должно содержать десятичный разделитель, если число больше или равно 1000.
<define name="table-validation-attlist" combine="interleave">
    <optional>
        <attribute name="table:condition">
            <ref name="string"/>
        </attribute>
    </optional>
</define>
Адрес базовой ячейки[править]

Атрибут table:base-cell-address определяет адрес базовой ячейки для относительных адресов в формулах, появляющихся в условиях. Этот атрибут обязателен только в том случае, если условие содержит формулу. Значением данного атрибута должен быть абсолютный адрес ячейки, включающий имя таблицы.

<define name="table-validation-attlist" combine="interleave">
    <optional>
        <attribute name="table:base-cell-address">
            <ref name="cellAddress"/>
        </attribute>
    </optional>
</define>
Допустимость пустых ячеек[править]

Атрибут table:allow-empty-cell определяет, может ли ячейка быть пустой.

<define name="table-validation-attlist" combine="interleave">
    <optional>
        <attribute name="table:allow-empty-cell" a:defaultValue="true">
            <ref name="boolean"/>
        </attribute>
    </optional>
</define>
Отображение списка[править]

Атрибут table:display-list определяет, отображается ли список значений, который появляется в условии, в пользовательском интерфейсе в процессе редактирования значения ячейки. Этот атрибут может принимать значения none, unsorted или sort-ascending.

  • none — список значений не отображается;
  • unsorted — список значений отображается в порядке их появления в условии;
  • sort-ascending — список значений отображается в порядке возрастания.
<define name="table-validation-attlist" combine="interleave">
    <optional>
        <attribute name="table:display-list" a:defaultValue="unsorted">
            <choice>
                <value>none</value>
                <value>unsorted</value>
                <value>sort-ascending</value>
            </choice>
        </attribute>
    </optional>
</define>
Справочные сообщения[править]

Элемент <table:help-message> определяет сообщения, отображаемые при выборе пользователем ячейки. Элемент имеет необязательный атрибут table:title, который определяет заголовок справочного сообщения. Также он имеет необязательный атрибут table:display, который может быть использован для запрета отображения справочного сообщения.

<define name="table-help-message">
    <element name="table:help-message">
        <optional>
            <attribute name="table:title">
                <ref name="string"/>
            </attribute>
        </optional>
        <optional>
            <attribute name="table:display" a:defaultValue="false">
                <ref name="boolean"/>
            </attribute>
        </optional>
        <zeroOrMore>
            <ref name="text-p"/>
        </zeroOrMore>
    </element>
</define>
Сообщения об ошибке[править]

Элемент <table:error-message> определяет сообщение, отображаемое при попытке пользователя ввести недопустимые данные в ячейку, т. е. когда условие правила проверки принимает значение false. Элемент имеет необязательный атрибут table:title, который определяет заголовок сообщения. Также он имеет атрибут table:display , который может быть использован для запрета отображения сообщения. Атрибут table:message-type, который может принимать значения stop, warning, или information, определяет должно ли сообщение отображаться как ошибка (stop), предупреждение (warning) или только информация (information). В случае, если отображается сообщение об ошибке, операция, которая вызывала проверку правильности, останавливается (например, перемещение курсора из ячейки).

<define name="table-error-message">
    <element name="table:error-message">
        <optional>
            <attribute name="table:title">
                <ref name="string"/>
            </attribute>
        </optional>
        <optional>
            <attribute name="table:display" a:defaultValue="false">
                <ref name="boolean"/>
            </attribute>
        </optional>
        <optional>
            <attribute name="table:message-type" a:defaultValue="stop">
                <choice>
                    <value>stop</value>
                    <value>warning</value>
                    <value>information</value>
                </choice>
            </attribute>
        </optional>
        <zeroOrMore>
            <ref name="text-p"/>
        </zeroOrMore>
    </element>
</define>
Макрос ошибки[править]

Если ячейка содержит недопустимое содержимое, вместо вывода сообщения может вызываться макрос. В данном случае макрос определяется элементом <office:event-listeners>, как описано в разделе 12.4. Имя, определяющее событие, которое вызывается в случае недопустимого ввода пользователя, должно быть единственным.

В дополнение к элементу <office:event-listeners>, элемент <table:error-macro> определяет, должен ли выполняться макрос.

<define name="table-error-macro">
    <element name="table:error-macro">
        <optional>
            <attribute name="table:execute" a:defaultValue="true">
                <ref name="boolean"/>
            </attribute>
        </optional>
    </element>
</define>

8.5.4 Диапазоны надписей[править]

Диапазоны надписей могут использоваться для назначения имен строк и столбцов, или частей строк и столбцов, где имена ячеек рассматриваются как их же содержимое. Точнее, элемент диапазона надписей <table:label-range> определяет диапазон ячеек надписей, содержащих надписи, и диапазон ячеек данных, определяющий строки и столбцы, на содержимое которых ссылаются надписи.

Существует два типа диапазонов надписей:

  • диапазоны надписей для столбцов;
  • диапазоны надписей для строк.

Диапазон ячеек данных должен иметь те же высоту и позицию по вертикали, что и диапазон ячеек надписей, если это надписи строк, или те же ширину и позицию по горизонтали, если это надписи столбцов. Сведения об определении диапазона ячеек приведены в разделе 8.3.1.

Надписи могут быть использованы в формуле так же, как и другие имена. Все диапазоны надписей, существующие в документе, содержатся в одном элементе <table:label-ranges>.

<define name="table-label-ranges">
    <element name="table:label-ranges">
        <zeroOrMore>
            <ref name="table-label-range"/>
        </zeroOrMore>
    </element>
</define>

<define name="table-label-range">
    <element name="table:label-range">
        <ref name="table-label-range-attlist"/>
        <empty/>
    </element>
</define>
Адрес диапазона ячеек надписей[править]

Атрибут table:label-cell-range-address определяет адрес диапазона ячеек надписей.

<define name="table-label-range-attlist" combine="interleave">
    <attribute name="table:label-cell-range-address">
        <ref name="cellRangeAddress"/>
    </attribute>
</define>
Адрес диапазона ячеек данных[править]

Атрибут table:data-cell-range-address определяет адрес диапазона ячеек данных.

<define name="table-label-range-attlist" combine="interleave">
    <attribute name="table:data-cell-range-address">
        <ref name="cellRangeAddress"/>
    </attribute>
</define>
Ориентация[править]

Атрибут table:orientation определяет ориентацию диапазона надписей. Этот атрибут может иметь значения column (столбец) или row (строка).

<define name="table-label-range-attlist" combine="interleave">
    <attribute name="table:orientation">
        <choice>
            <value>column</value>
            <value>row</value>
        </choice>
    </attribute>
</define>

8.5.5 Именованные выражения[править]

Элемент именованных выражений <table:named-expressions> содержит совокупность присваиваний имен выражениям, чтобы имена могли быть использованы для ссылок на выражения.

Имена могут иметь следующие выражения:

  • диапазон ячеек;
  • другие выражения, например части формулы.
<define name="table-named-expressions">
    <element name="table:named-expressions">
        <zeroOrMore>
            <choice>
                <ref name="table-named-range"/>
                <ref name="table-named-expression"/>
            </choice>
        </zeroOrMore>
    </element>
</define>
 
Именованный диапазон[править]

Элемент именованный диапазон <table:named-range> определяет диапазон ячеек, которому назначено имя. Сведения об определении диапазона ячеек приведены в разделе 8.3.1.

Атрибут table:name определяет имя диапазона, а атрибут table:cell-range-address — его адрес. Адрес может быть абсолютным или относительным. Если адрес диапазона относительный, дополнительно должен существовать атрибут table:base-cell-address. Он определяет адрес базовой ячейки диапазона ячеек. Этот адрес должен быть абсолютным. Поэтому в этом адресе должно быть обязательно указано имя таблицы, но символы доллара, которые служат признаком абсолютного адреса, могут быть опущены.

Дополнительный атрибут table:range-usable-as определяет, может ли имя диапазона использоваться в определении диапазона печати, фильтра, повторяющейся строки или повторяющегося столбца. Этот атрибут может принимать значения:

  • none (нет);
  • список, разделенный пробелами, содержащий значения print-range (диапазон печати), filter (фильтр), repeat-row (повторяющаяся строка) или repeat-column (повторяющийся столбец).
<define name="table-named-range">
    <element name="table:named-range">
        <ref name="table-named-range-attlist"/>
        <empty/>
    </element>
</define>

<define name="table-named-range-attlist" combine="interleave">
    <attribute name="table:name">
        <ref name="string"/>
    </attribute>
    <attribute name="table:cell-range-address">
        <ref name="cellRangeAddress"/>
    </attribute>
    <optional>
        <attribute name="table:base-cell-address">
            <ref name="cellAddress"/>
        </attribute>
    </optional>
    <optional>
        <attribute name="table:range-usable-as" a:defaultValue="none">
            <choice>
                <value>none</value>
                <list>
                    <oneOrMore>
                        <choice>
                            <value>print-range</value>
                            <value>filter</value>
                            <value>repeat-row</value>
                            <value>repeat-column</value>
                        </choice>
                    </oneOrMore>
                </list>
            </choice>
        </attribute>
    </optional>
</define>
Именованное выражение[править]

Элемент именованного выражения <table:named-expression> содержит выражения с именами, например части формулы.

Атрибут table:name определяет имя выражения, а атрибут table:expression — само выражение. Выражение не должно содержать знак равенства (=) в качестве первого символа. Если выражение содержит именованный диапазон или другое именованное выражение, то именованный диапазон или другое именованное выражение должны быть определены первыми, до включения в выражение. Если выражение содержит относительный адрес диапазона ячеек, дополнительно должен существовать атрибут table:base-cell-address. Он определяет адрес базовой ячейки для диапазона ячеек. Этот адрес должен быть абсолютным. Поэтому в этом адресе должно быть обязательно указано имя таблицы, но символы доллара, которые служат признаком абсолютного адреса, могут быть опущены.

<define name="table-named-expression">
    <element name="table:named-expression">
        <ref name="table-named-expression-attlist"/>
        <empty/>
    </element>
</define>

<define name="table-named-expression-attlist" combine="interleave">
    <attribute name="table:name">
        <ref name="string"/>
    </attribute>
    <attribute name="table:expression">
        <ref name="string"/>
    </attribute>
    <optional>
        <attribute name="table:base-cell-address">
            <ref name="cellAddress"/>
        </attribute>
    </optional>
</define>

Пример — Элемент именованных выражений с именованным диапазоном и именованным выражением:

<table:named-expressions>
    <table:named-range table:name="sample1" table:cell-range-address=".C4"
        table:base-cell-address="sampletable.F1" table:area-type="none"/>
    <table:named-range table:name="sample2"
        table:cell-range-address=".$D$3:.$K$8"
        table:area-type="print-range filter"/>
    <table:named-expression table:name="sample3"
        table:expression="sum([.A1:.B3])"/>
</table:named-expressions>

8.6 Диапазоны баз данных[править]

Диапазон баз данных — это именованная область в таблице, в которой могут выполняться операции базы данных, но также выполняются и операции другого вида, такие как фильтрация и сортировка. Элемент <table:database-ranges> содержит набор всех диапазонов баз данных, определенных в документе.

<define name="table-database-ranges">
    <element name="table:database-ranges">
        <zeroOrMore>
            <ref name="table-database-range"/>
        </zeroOrMore>
    </element>
</define>

8.6.1 Диапазон базы данных[править]

Элемент <table:database-range> определяет один диапазон базы данных.

<define name="table-database-range">
    <element name="table:database-range">
        <ref name="table-database-range-attlist"/>
        <optional>
            <choice>
                <ref name="table-database-source-sql"/>
                <ref name="table-database-source-table"/>
                <ref name="table-database-source-query"/>
            </choice>
        </optional>
        <optional>
            <ref name="table-filter"/>
        </optional>
        <optional>
            <ref name="table-sort"/>
        </optional>
        <optional>
            <ref name="table-subtotal-rules"/>
        </optional>
    </element>
</define>
Имя диапазона базы данных[править]

Атрибут table:name определяет имя диапазона базы данных, на котором выполняются операции. В одном документе только один диапазон базы данных может не иметь имени. Этот диапазон базы данных обычно создается приложением автоматически и используется для фильтрации или сортировки данных в диапазонах ячеек без явного создания пользователем диапазона базы данных.

<define name="table-database-range-attlist" combine="interleave">
    <optional>
        <attribute name="table:name">
            <ref name="string"/>
        </attribute>
    </optional>
</define>
Выборка[править]

Атрибут table:is-selection определяет, включает ли диапазон полную базу данных или только выборку записей из базы данных.

<define name="table-database-range-attlist" combine="interleave">
    <optional>
        <attribute name="table:is-selection" a:defaultValue="false">
            <ref name="boolean"/>
        </attribute>
    </optional>
</define>
Сохранение стиля при обновлении[править]

Атрибут table:on-update-keep-styles определяет поведение диапазона базы данных при обновлении. Если значение атрибута true, то стили, назначенные ячейкам первой строки диапазона базы данных, не являющейся надписью, используются для всех строк в диапазоне базы данных. Если значение атрибут false, все ячейки диапазона базы данных используют назначенный в документе стиль ячеек по умолчанию.

<define name="table-database-range-attlist" combine="interleave">
    <optional>
        <attribute name="table:on-update-keep-styles" a:defaultValue="false">
            <ref name="boolean"/>
        </attribute>
    </optional>
</define>
Сохранение размера при обновлении[править]

Атрибут table:on-update-keep-size определяет поведение диапазона базы данных при изменении размера данных в источнике данных. Если значение атрибута true, диапазон сохраняет свой размер. Если значение атрибута false, диапазон не изменяет свой размер.

<define name="table-database-range-attlist" combine="interleave">
    <optional>
        <attribute name="table:on-update-keep-size" a:defaultValue="true">
            <ref name="boolean"/>
        </attribute>
    </optional>
</define>
Постоянство данных[править]

Атрибут table:has-persistent-data определяет, будут ли сохранены текущие данные диапазона базы данных при сохранении документа.

<define name="table-database-range-attlist" combine="interleave">
    <optional>
        <attribute name="table:has-persistent-data" a:defaultValue="true">
            <ref name="boolean"/>
        </attribute>
    </optional>
</define>
Ориентация[править]

Атрибут table:orientation определяет ориентацию диапазона базы данных. Возможные значения этого атрибута row и column. Ориентация, например, используется при сортировке диапазона базы данных (см. раздел 8.6.5). Если ориентация имеет значение row, осуществляется сортировка строк, иначе — столбцов.

<define name="table-database-range-attlist" combine="interleave">
    <optional>
        <attribute name="table:orientation" a:defaultValue="row">
            <choice>
                <value>column</value>
                <value>row</value>
            </choice>
        </attribute>
    </optional>
</define>
Содержание заголовка[править]

Атрибут table:contains-header определяет, должны ли первая строка или столбец диапазона базы данных использоваться для определения надписей. Если значение атрибута равно true, то содержимое первой ячейки строки или столбца может быть использовано для ссылки на всю строку или столбец во многих операциях электронных таблиц, например, внутри сводных таблиц.

<define name="table-database-range-attlist" combine="interleave">
    <optional>
        <attribute name="table:contains-header" a:defaultValue="true">
            <ref name="boolean"/>
        </attribute>
    </optional>
</define>
Отображение кнопок фильтра[править]

Атрибут кнопок table:display-filter-buttons определяет, будут ли отображаться кнопки фильтра. Кнопки фильтра — это списковые элементы управления, отображаемые в ячейках надписей. Элементами списка являются все значения, существующие в обозначаемой надписью строке или столбце. При выборе одного из полей фильтр с его значением применяется к диапазону базы данных и выбирает все строки или столбцы, где ячейки в обозначенной надписью строке или столбце имеют выбранное значение.

<define name="table-database-range-attlist" combine="interleave">
    <optional>
        <attribute name="table:display-filter-buttons"
                 a:defaultValue="false">
            <ref name="boolean"/>
        </attribute>
    </optional>
</define>
Адрес целевого диапазона[править]

Атрибут table:target-range-address определяет адрес диапазона ячеек диапазона базы данных. Выделение абсолютных и относительных адресов невозможно. Поэтому в адресе должно быть определено имя таблицы, а символ доллара проигнорирован.

<define name="table-database-range-attlist" combine="interleave">
    <attribute name="table:target-range-address">
        <ref name="cellRangeAddress"/>
    </attribute>
</define>
Интервал обновления[править]

Атрибут table:refresh-delay определяет интервал времени между автоматическими обновлениями.

<define name="table-database-range-attlist" combine="interleave">
    <optional>
        <attribute name="table:refresh-delay">
            <ref name="boolean"/>
        </attribute>
    </optional>
</define>

8.6.2 SQL источника базы данных[править]

Элемент <table:database-source-sql> описывает SQL-базу данных, которая содержит источник данных для диапазона базы данных.

<define name="table-database-source-sql">
    <element name="table:database-source-sql">
        <ref name="table-database-source-sql-attlist"/>
        <empty/>
    </element>
</define>
Имя базы данных[править]

Атрибут table:database-name определяет имя SQL-базы данных, из которой импортируются данные.

<define name="table-database-source-sql-attlist" combine="interleave">
    <attribute name="table:database-name">
        <ref name="string"/>
    </attribute>
</define>
SQL-выражение[править]

Атрибут table:sql-statement определяет SQL-выражение, используемое при импортировании данных из SQL-базы данных.

<define name="table-database-source-sql-attlist" combine="interleave">
    <attribute name="table:sql-statement">
        <ref name="string"/>
    </attribute>
</define>
Анализ SQL-выражения[править]

Атрибут table:parse-sql-statement определяет, осуществляется ли анализ SQL-инструкций.

<define name="table-database-source-sql-attlist" combine="interleave">
    <optional>
        <attribute name="table:parse-sql-statement" a:defaultValue="false">
            <ref name="boolean"/>
        </attribute>
    </optional>
</define>

8.6.3 Таблица источника базы данных[править]

Элемент таблицы источника базы данных <table:database-source-table> определяет, что исходные данные диапазона базы данных хранятся в таблице базы данных.

<define name="table-database-source-query">
    <element name="table:database-source-table">
        <ref name="table-database-source-table-attlist"/>
        <empty/>
    </element>
</define>
Имя базы данных[править]

Атрибут table:database-name определяет имя базы данных, из которой импортируются данные.

<define name="table-database-source-table-attlist" combine="interleave">
    <attribute name="table:database-name">
        <ref name="string"/>
    </attribute>
</define>
Имя таблицы[править]

Атрибут table:database-table-name определяет имя таблицы базы данных, из которой импортируются данные.

<define name="table-database-source-table-attlist" combine="interleave">
    <attribute name="table:database-table-name">
        <ref name="string"/>
    </attribute>
</define>

8.6.4 Запрос источника базы данных[править]

Элемент запроса источника базы данных <table:database-source-query> определяет, что исходные данные диапазона базы данных являются результатом запроса к базе данных.

<define name="table-database-source-table">
    <element name="table:database-source-query">
        <ref name="table-database-source-query-attlist"/>
        <empty/>
    </element>
</define>
Имя базы данных[править]

Атрибут table:database-name определяет имя базы данных, из которой импортируются данные.

<define name="table-database-source-query-attlist" combine="interleave">
    <attribute name="table:database-name">
    <ref name="string"/>
    </attribute>
</define>
Имя запроса[править]

Атрибут table:query-name определяет запрос, выполняемый к базе данных, из которой импортируются данные.

<define name="table-database-source-query-attlist" combine="interleave">
    <attribute name="table:query-name">
        <ref name="string"/>
    </attribute>
</define>

8.6.5 Сортировка[править]

Элемент сортировки <table:sort> описывает принципы сортировки, которые должны быть применены к диапазону базы данных.

<define name="table-sort">
    <element name="table:sort">
        <ref name="table-sort-attlist"/>
        <oneOrMore>
            <ref name="table-sort-by"/>
        </oneOrMore>
    </element>
</define>
Привязка стилей к содержимому[править]

Атрибут table:bind-styles-to-content определяет, сохраняют ли ячейки свои атрибуты стиля после выполнения операции сортировки.

<define name="table-sort-attlist" combine="interleave">
    <optional>
        <attribute name="table:bind-styles-to-content" a:defaultValue="true">
            <ref name="boolean"/>
        </attribute>
    </optional>
</define>
Адрес целевого диапазона[править]

Если представлен необязательный атрибут table:target-range-address, результат сортировки копируется в определенный им диапазон ячеек вместо исходного диапазона ячеек, определенного диапазоном базы данных. Различия между абсолютными и относительными адресами невозможны. Поэтому в адресе должно присутствовать имя таблицы, а знак доллара игнорируется.

<define name="table-sort-attlist" combine="interleave">
    <optional>
        <attribute name="table:target-range-address">
            <ref name="cellRangeAddress"/>
        </attribute>
    </optional>
</define>
Чувствительность к регистру[править]

Атрибут table:case-sensitive определяет, учитывать ли в операциях сортировки регистр символов.

<define name="table-sort-attlist" combine="interleave">
    <optional>
        <attribute name="table:case-sensitive" a:defaultValue="false">
            <ref name="boolean"/>
        </attribute>
    </optional>
</define>
Язык[править]

Атрибут table:language определяет естественный язык, в котором осуществляется сравнение.

<define name="table-sort-attlist" combine="interleave">
    <optional>
        <attribute name="table:language">
            <ref name="languageCode"/>
        </attribute>
    </optional>
</define>
Страна[править]

Атрибут table:country определяет наличие специфичных для страны правил, используемых при сортировке строк на конкретном естественном языке.

<define name="table-sort-attlist" combine="interleave">
    <optional>
        <attribute name="table:country">
            <ref name="countryCode"/>
        </attribute>
    </optional>
</define>
Алгоритм[править]

Атрибут table:algorithm определяет алгоритм, используемый для сравнения сортируемых ключей. Значение атрибута определяется приложением, но язык и страна также влияют на название алгоритма сортировки, например, «фонетический (сначала алфавитно-цифровые)». Для недопущения разногласий между различными приложениями название должно начинаться с префикса пространства имен.

<define name="table-sort-attlist" combine="interleave">
    <optional>
        <attribute name="table:algorithm">
            <ref name="string"/>
        </attribute>
    </optional>
</define>

8.6.6 Поле сортировки[править]

Элемент сортировки посредством <table:sort-by> определяет ключ или поле для сортировки, тип данных этого поля и способ сортировки.

<define name="table-sort-by">
    <element name="table:sort-by">
        <ref name="table-sort-by-attlist"/>
        <empty/>
    </element>
</define>
Номер поля[править]

Атрибут номера table:field-number определяет строку или столбец для сортировки. Это номер строки или столбца в диапазоне базы данных.

<define name="table-sort-by-attlist" combine="interleave">
    <attribute name="table:field-number">
        <ref name="nonNegativeInteger"/>
    </attribute>
</define>
Тип данных[править]

Атрибут table:data-type определяет тип данных поля для сортировки. Он может принимать значения text, number, automatic или имя определяемого пользователем параметра сортировки. Если атрибут имеет значение automatic, то приложение должно определить тип данных в поле. Например, определяемый пользователем порядок сортировки — список названий месяцев. Задание определяемого пользователем порядка сортировки специфично для различных приложений.

<define name="table-sort-by-attlist" combine="interleave">
    <optional>
        <attribute name="table:data-type" a:defaultValue="automatic">
            <choice>
                <value>text</value>
                <value>number</value>
                <value>automatic</value>
                <ref name="string"/>
            </choice>
        </attribute>
    </optional>
</define>
Порядок[править]

Атрибут table:order определяет, сортируются ли данные в порядке возрастания или убывания.

<define name="table-sort-by-attlist" combine="interleave">
    <optional>
        <attribute name="table:order" a:defaultValue="ascending">
            <choice>
                <value>ascending</value>
                <value>descending</value>
            </choice>
        </attribute>
    </optional>
</define>

8.6.7 Правила промежуточных сумм[править]

Элемент правила промежуточных сумм <table:subtotal-rules> определяет, что для диапазона базы данных должны вычисляться промежуточные результаты (называемые промежуточными суммами). Он содержит информацию о строках и столбцах, для которых должны вычисляться промежуточные результаты, а также как эти результаты вычисляются. Для вычисления промежуточных результатов ячейки строк и столбцов группируются по их значениям, т. е. все ячейки с одинаковым содержимым в одном и том же поле образуют группу. Промежуточный результат вычисляется и отображается в конце каждой группы.

<define name="table-subtotal-rules">
    <element name="table:subtotal-rules">
        <ref name="table-subtotal-rules-attlist"/>
        <optional>
            <ref name="table-sort-groups"/>
        </optional>
        <zeroOrMore>
            <ref name="table-subtotal-rule"/>
        </zeroOrMore>
    </element>
</define>
Привязка стилей к содержимому[править]

Атрибут table:bind-styles-to-content определяет, сохраняют ли ячейки свои атрибуты стиля после вычисления промежуточных сумм. Этот атрибут оценивается, только если имеется элемент table:sort-groups.

<define name="table-subtotal-rules-attlist" combine="interleave">
    <optional>
        <attribute name="table:bind-styles-to-content" a:defaultValue="true">
            <ref name="boolean"/>
        </attribute>
    </optional>
</define>
Чувствительность к регистру[править]

Атрибут table:case-sensitive определяет, имеет ли значение регистр символов при сравнении записей, например, при сортировке групп.

<define name="table-subtotal-rules-attlist" combine="interleave">
    <optional>
        <attribute name="table:case-sensitive" a:defaultValue="false">
            <ref name="boolean"/>
        </attribute>
    </optional>
</define>
Разрывы страницы при изменении группы[править]

Атрибут разрыва страницы при изменении группы table:page-breaks-on-group-change определяет, должен ли вставляться разрыв страницы после промежуточного результата каждой группы.

<define name="table-subtotal-rules-attlist" combine="interleave">
    <optional>
        <attribute name="table:page-breaks-on-group-change"
                a:defaultValue="false">
            <ref name="boolean"/>
        </attribute>
    </optional>
</define>

8.6.8 Отсортированные группы промежуточных сумм[править]

Необязательный элемент отсортированных групп <table:sort-groups> определяет, что столбцы или строки сортируются перед группировкой, а также способ сортировки. Он относится к элементу правил промежуточных сумм (см. раздел 8.6.7).

<define name="table-sort-groups">
    <element name="table:sort-groups">
        <ref name="table-sort-groups-attlist"/>
        <empty/>
    </element>
</define>
Тип данных[править]

Атрибут table:data-type определяет тип данных сортируемых столбца или строки. Детальная информация приведена в разделе 8.6.6.

<define name="table-sort-groups-attlist" combine="interleave">
    <optional>
        <attribute name="table:data-type" a:defaultValue="automatic">
            <choice>
                <value>text</value>
                <value>number</value>
                <value>automatic</value>
                <ref name="string"/>
            </choice>
        </attribute>
    </optional>
</define>
Порядок[править]

Атрибут table:order определяет, сортируются ли данные группы в порядке возрастания или убывания. Детальная информация приведена в разделе 8.6.6.

<define name="table-sort-groups-attlist" combine="interleave">
    <optional>
        <attribute name="table:order" a:defaultValue="ascending">
            <choice>
                <value>ascending</value>
                <value>descending</value>
            </choice>
        </attribute>
    </optional>
</define>

8.6.9 Правило промежуточной суммы[править]

Элемент правила промежуточной суммы <table:subtotal-rule> определяет способ вычисления промежуточной суммы для конкретной строки или столбца. Правило содержит номер поля группировки, определяющий группу столбцов, для которых используется правило, и одно поле или более полей промежуточных сумм, определяющих строку или столбец, где должны быть вычислены промежуточные суммы, а также функцию, используемую для вычисления.

<define name="table-subtotal-rule">
    <element name="table:subtotal-rule">
        <ref name="table-subtotal-rule-attlist"/>
        <zeroOrMore>
            <ref name="table-subtotal-field"/>
        </zeroOrMore>
    </element>
</define>
Группировка по номеру поля[править]

Атрибут table:group-by-field-number определяет поле, например столбец, по которому должна осуществляться группировка. Это номер строки или столбца в диапазоне базы данных.

<define name="table-subtotal-rule-attlist" combine="interleave">
    <attribute name="table:group-by-field-number">
        <ref name="nonNegativeInteger"/>
    </attribute>
</define>

8.6.10 Поле промежуточной суммы[править]

Элемент поля промежуточной суммы <table:subtotal-field> содержит номер поля и функцию, которая используется для вычисления промежуточной суммы.

<define name="table-subtotal-field">
    <element name="table:subtotal-field">
        <ref name="table-subtotal-field-attlist"/>
        <empty/>
    </element>
</define>
Номер поля[править]

Атрибут table:field-number определяет строку или столбец, для которых должны вычисляться промежуточные суммы. Это номер строки или столбца в диапазоне базы данных.

<define name="table-subtotal-field-attlist" combine="interleave">
    <attribute name="table:field-number">
        <ref name="nonNegativeInteger"/>
    </attribute>
</define>
Функция[править]

Атрибут table:function определяет способ вычисления промежуточной суммы. Атрибут принимает следующие значения: auto, average, count, countnums, max, min, product, stdev, stdevp, sum, var и varp.

<define name="table-subtotal-field-attlist" combine="interleave">
    <attribute name="table:function">
        <choice>
            <value>auto</value>
            <value>average</value>
            <value>count</value>
            <value>countnums</value>
            <value>max</value>
            <value>min</value>
            <value>product</value>
            <value>stdev</value>
            <value>stdevp</value>
            <value>sum</value>
            <value>var</value>
            <value>varp</value>
            <ref name="string"/>
        </choice>
    </attribute>
</define>

Пример — Поле промежуточных сумм:

<table:database-range table:range-
position="sampletable.A1:sampletable.G20" table:name="sample">
    <table:database-source-table table:database-name="sampleDB"
table:table-name="sampleTable"/>
    <table:filter ...>
        ...
    </table:filter>
    <table:sort>
        <table:sort-by table:field-number=1/>
    </table:sort>
    <table:subtotal-rules>
        <table:sort-groups/>
        <table:subtotal-rule table:column-group "3">
            <table:subtotal-field table:field-number="1"
                                     table:function="sum"/>
        </table:subtotal-rule>
    </table:subtotal-rules>
</table:database-range>

8.7 Фильтры[править]

Фильтры определяют, что должны быть видимыми только строки, удовлетворяющие определенным условиям.

8.7.1 Фильтр таблицы[править]

Элемент фильтра таблицы <table:filter> определяет, как фильтруются данные, содержащиеся в диапазоне базы данных или сводной таблице. Условие, определенное в элементе, применяется ко всем строкам, определенным в диапазоне базы данных или сводной таблице. Строки, в которых условие не принимает истинное значение, делаются невидимыми.

<define name="table-filter">
    <element name="table:filter">
        <ref name="table-filter-attlist"/>
        <choice>
            <ref name="table-filter-condition"/>
            <ref name="table-filter-and"/>
            <ref name="table-filter-or"/>
        </choice>
    </element>
</define>
Адрес целевого диапазона[править]

Если представлен необязательный атрибут table:target-range-address результат работы фильтра копируется в определенный диапазон ячеек, но все строки таблицы остаются видимыми. Выделение абсолютных и относительных адресов невозможно. Поэтому в адресе должно быть определено имя таблицы, а символ доллара проигнорирован.

<define name="table-filter-attlist" combine="interleave">
    <optional>
        <attribute name="table:target-range-address">
            <ref name="cellRangeAddress"/>
        </attribute>
    </optional>
</define>
Источник условия[править]

Атрибут table:condition-source определяет, содержится ли условие в фильтре или приведено в диапазоне таблицы. Если атрибут имеет значение self, то условие определено в дочернем элементе элемента <table:filter>. Если атрибут имеет значение cell-range, условие содержится в диапазоне ячеек, определенном атрибутом table:condition-source-range-address.

<define name="table-filter-attlist" combine="interleave">
    <optional>
        <attribute name="table:condition-source" a:defaultValue="self">
            <choice>
                <value>self</value>
                <value>cell-range</value>
            </choice>
        </attribute>
    </optional>
</define>
Адрес диапазона источника условия[править]

Атрибут table:condition-source-range-address определяет диапазон ячеек, который содержит условие. Первая строка диапазона должна содержать надписи столбцов, содержимое которых должно быть отфильтровано. Следующие строки содержат условия, которые должны выполняться для ячеек, содержащихся в столбце. Условия в каждой из строк объединяются посредством логической операции «и», в то время как строки — посредством логической операции «или». Это означает, что строки исходной таблицы отображаются, если в диапазоне условия имеется по крайней мере одна строка, в которой все условия, примененные к столбцам, определенным в первой строке диапазона условия, приняли истинное значение.

Пример —

Если диапазон источника условия E1:F3 (выделено желтым) и исходный диапазон A1:C3 (выделено зеленым), будут отображены только строки 2 и 3.

A B C D E F G H I
1 1 3 4 A B
2 1 5 6 =1 =5
3 2 8 9 >=2

Строка 2 отображается потому, что ячейка в столбце А имеет значение 1, а ячейка в столбце B — 5, т. е. все условия 2-й строки диапазона условия приняли истинное значение. Строка 3 отображается потому, что ячейка в столбце А больше или равна 2, и, поскольку это единственное условие, все условия 3-й строки принимают истинное значение.

<define name="table-filter-attlist" combine="interleave">
    <optional>
        <attribute name="table:condition-source-range-address">
            <ref name="cellRangeAddress"/>
        </attribute>
    </optional>
</define>
Отображение дубликатов[править]

Атрибут table:display-duplicates определяет, должны ли отображаться повторяющиеся пригодные результаты.

<define name="table-filter-attlist" combine="interleave">
    <optional>
        <attribute name="table:display-duplicates" a:defaultValue="true">
            <ref name="boolean"/>
        </attribute>
    </optional>
</define>

Фильтр And (И)[править]

Элемент <table:filter-and> определяет, что к условиям, определенным в дочерних элементах данного элемента, применяется логический оператор AND (И).

<define name="table-filter-and">
    <element name="table:filter-and">
        <oneOrMore>
            <choice>
                <ref name="table-filter-or"/>
                <ref name="table-filter-condition"/>
            </choice>
        </oneOrMore>
    </element>
</define>

Фильтр Or (ИЛИ)[править]

Элемент <table:filter-or> определяет, что к условиям, определенным в дочерних элементах данного элемента, применяется логический оператор OR (ИЛИ).

<define name="table-filter-or">
    <element name="table:filter-or">
        <oneOrMore>
            <choice>
                <ref name="table-filter-and"/>
                <ref name="table-filter-condition"/>
            </choice>
        </oneOrMore>
    </element>
</define>

8.7.4 Условие фильтра[править]

Элемент таблицы <table:filter-condition> определяет одно условие, применяемое при фильтрации.

<define name="table-filter-condition">
    <element name="table:filter-condition">
        <ref name="table-filter-condition-attlist"/>
        <empty/>
    </element>
</define>
Номер поля[править]

Атрибут номер поля table:field-number определяет, какое поле используется для условия. Номер поля — это номер строки или столбца в исходном диапазоне фильтра.

<define name="table-filter-condition-attlist" combine="interleave">
    <attribute name="table:field-number">
        <ref name="nonNegativeInteger"/>
    </attribute>
</define>
Значение[править]

Атрибут table:value определяет значение для условия фильтра.

<define name="table-filter-condition-attlist" combine="interleave">
    <attribute name="table:value">
        <ref name="string"/>
    </attribute>
</define>
Оператор[править]

Атрибут оператор table:operator определяет, какой оператор используется в условии фильтра. Это означает, что каждая ячейка, содержащаяся в столбце, определенном номером поля (т. е. атрибутом table:field-number), сравнивается со значением (т. е. атрибутом table:value), с использованием данного оператора. Результат этого сравнения — это результат условия фильтра, определенного элементом <table:filter-condition>.

Операторы могут использовать или не использовать регулярные выражения. Следующие операторы используют регулярные выражения:

  • match (совпадает);
  • !match (не совпадает).

В обоих случаях атрибут table:value содержит регулярное выражение, с которым ячейки таблицы должны совпадать или не совпадать.

Операторы отношения, которые не используются в регулярных выражениях:

  • = (равно);
  • != (неравно);
  • < (меньше);
  • > (больше);
  • <= (меньше или равно);
  • >= (больше или равно).

Дополнительно могут использоваться empty (пусто), !empty (не пусто), bottom values (нижнее значение), top values (верхнее значение), bottom percent (нижний процент) и top percent (верхний процент). Например, для выборки нижней и верхней величины в процентах могут использоваться два последних оператора.

<define name="table-filter-condition-attlist" combine="interleave">
    <attribute name="table:operator">
        <ref name="string"/>
    </attribute>
</define>
Чувствительность к регистру[править]

Атрибут table:case-sensitive определяет, чувствительно ли условие фильтра к регистру.

<define name="table-filter-condition-attlist" combine="interleave">
    <optional>
        <attribute name="table:case-sensitive" a:defaultValue="false">
            <ref name="string"/>
        </attribute>
    </optional>
</define>
Тип данных[править]

Атрибут table:data-type определяет, будут ли сравниваться значения как текстовые или числовые.

<define name="table-filter-condition-attlist" combine="interleave">
    <optional>
        <attribute name="table:data-type" a:defaultValue="text">
            <choice>
                <value>text</value>
                <value>number</value>
            </choice>
        </attribute>
    </optional>
</define>

Пример — Представление фильтра:

<filter>
    <filter-or>
        <filter-and>
            <filter-condition table:field-number=1 table:operator="="
                                table:value="Doe"/>
            <filter-condition table:field-number=2 table:operator="="
                                table:value="John"/>
        </filter-and>
        <filter-and>
            <filter-condition table:field-number=1 table:operator="="
                                table:value="Burns"/>
            <filter-condition table:field-number=2 table:operator="="
                                table:value="Michael"/>
        </filter-and>
    </filter-or>
</filter>

8.8 Сводные таблицы[править]

Сводные таблицы позволяют анализировать и оценивать данные, содержащиеся в электронных таблицах. Элемент сводные таблицы <table:data-pilot-tables> содержит перечень всех сводных таблиц документа.

    <define name="table-data-pilot-tables">
        <element name="table:data-pilot-tables">
        <zeroOrMore>
            <ref name="table-data-pilot-table"/>
        </zeroOrMore>
    </element>
</define>

8.8.1 Сводная таблица[править]

Элемент <table:data-pilot-table> определяет одну сводную таблицу. Внутри сводных таблиц собираются все комбинации значений, существующих в выделенных столбцах, и для каждой из комбинаций к ячейкам других столбцов применяется формула.

Пример —

Дана следующая исходная таблица:

  A B C D E
1 Изделие Город Страна Количество Цена
2 Системный блок Гамбург Германия 1 12
3 Монитор Гамбург Германия 2 15
4 Принтер Париж Франция 4 13
5 Монитор Париж Франция 2 14
6 Системный блок Париж Франция 1 12
7 Монитор Гамбург Германия 2 10
8 Принтер Париж Франция 2 16

Следующая сводная таблица группирует исходную таблицу по столбцам «Страна», «Город» и «Изделие», и вычисляются суммы столбцов «Количество» и «Цена» для каждой из комбинаций значений этих трех столбцов. Значения столбцов «Страна» и «Город» приведены в столбцах, в то время как значения столбца «Изделие» — в строках.

Изделие
Страна Город Данные Системный
блок
Монитор Принтер Итого
Франция Париж Сумма —
Количество
1 2 6 9
Сумма — Цена 12 14 29 55
Германия Гамбург Сумма —
Количество
1 4   5
Сумма — Цена 12 25   37
Итого сумма —
Количество
2 6 6 14
Итого сумма — Цена 24 39 29 92

Столбцы, используемые для группировки (здесь «Страна», «Город» и «Изделие») называются столбцами категорий. Столбцы, для которых на основе комбинаций значений столбцов категорий вычисляется формула (здесь «Количество» и «Цена»), называются столбцами данных. Отдельные значения, которые содержатся в столбце категории, называются элементами.

В основном, поведение сводной таблицы определяется полями, где каждое поле имеет имя и, так называемую, ориентацию. Столбцы категорий определяются полями с ориентацией row (строка) или column (столбец), а столбцы данных определяются полями, которые имеют ориентацию data (данные). В примере выше «Изделие» — это поле со столбцовой ориентацией, в то время как «Страна» и «Город» — поля со строковой. «Количество» и «Цена» — поля с ориентацией data.

Третий вид полей — это поля разметки данных. Поля разметки данных не связаны со столбцами исходной таблицы и используются только для изменения разметки сводной таблицы. Например, «Данные» — это поле разметки данных.

Порядок, в котором определяются поля — реляционный. Они определяются в порядке, в котором данные столбцов категорий группируются, а результаты отображаются. Приведенная ниже сводная таблица демонстрирует, как меняется сводная таблица, если, например, поле разметки данных определяется перед полями столбцов категорий.

Пример — Сводная таблица с модифицированной разметкой:

Изделие
Данные Страна Город Системный
блок
Монитор Принтер Итого
Сумма —
Количество
Франция Париж 1 2 6 9
Германия Гамбург 1 4   5
Сумма — Цена Франция Париж 12 14 29 55
Германия Гамбург 12 25   37
Итого сумма —
Количество
2 6 6 14
Итого сумма —
Цена
24 39 29 92

С элементом сводная таблица могут быть связаны следующие атрибуты:

  • имя сводной таблицы;
  • данные приложения;
  • итоговая сумма;
  • пропуск пустых строк;
  • распознавание категории;
  • адрес целевого диапазона;
  • отображение кнопки фильтра;
  • переход к деталям по двойному щелчку.
<define name="table-data-pilot-table">
    <element name="table:data-pilot-table">
        <ref name="table-data-pilot-table-attlist"/>
        <optional>
            <choice>
                <ref name="table-database-source-sql"/>
                <ref name="table-database-source-table"/>
                <ref name="table-database-source-query"/>
                <ref name="table-source-service"/>
                <ref name="table-source-cell-range"/>
            </choice>
        </optional>
        <oneOrMore>
            <ref name="table-data-pilot-field"/>
        </oneOrMore>
    </element>
</define>
Источник сводной таблицы[править]

Источником сводной таблицы может быть база данных, т. е. таблица базы данных, SQL-запрос или именованный запрос, или диапазон ячеек, расположенный в самом документе. Он также может обеспечиваться внешним компонентом путем, зависящим от реализации.

Источник сводной таблицы определяется одним из следующих элементов, содержащихся в элементе <table:data-pilot-table>:

Имя сводной таблицы[править]

Атрибут table:name определяет имя сводной таблицы.

<define name="table-data-pilot-table-attlist" combine="interleave">
    <attribute name="table:name">
        <ref name="string"/>
    </attribute>
</define>
Данные приложения[править]

Атрибут table:application-data определяет дополнительную информацию о сводной таблице, которая может быть использована приложением, например в макросах. Эти данные не оказывают воздействия на поведение сводной таблицы.

<define name="table-data-pilot-table-attlist" combine="interleave">
    <optional>
        <attribute name="table:application-data">
            <ref name="string"/>
        </attribute>
    </optional>
</define>
Итоговая сумма[править]

Атрибут table:grand-total определяет, где в дополнение к значениям, вычисленным для каждой комбинации значений в столбцах категорий, должна отображаться итоговая сумма: в столбцах, строках или в обоих. В примере выше итоговая сумма разрешена. Она отображается в строке и столбце, обозначенном «Итого».

<define name="table-data-pilot-table-attlist" combine="interleave">
    <optional>
        <attribute name="table:grand-total" a:defaultValue="both">
            <choice>
                <value>none</value>
                <value>row</value>
                <value>column</value>
                <value>both</value>
            </choice>
        </attribute>
    </optional>
</define>
Пропуск пустых строк[править]

Атрибут table:ignore-empty-rows определяет, должны ли пропускаться пустые строки в исходном диапазоне.

<define name="table-data-pilot-table-attlist" combine="interleave">
    <optional>
        <attribute name="table:ignore-empty-rows" a:defaultValue="false">
            <ref name="boolean"/>
        </attribute>
    </optional>
</define>
Распознавание категории[править]

Атрибут table:identify-categories определяет, должны ли строки, не содержащие значения в одном из столбцов категорий, использовать значение ближайшей предшествующей строки, имеющей значение, или такие строки должны перемещаться в собственную группу (или категорию). Если атрибут имеет значение false, пустые значения формируют собственную категорию.

<define name="table-data-pilot-table-attlist" combine="interleave">
    <optional>
        <attribute name="table:identify-categories" a:defaultValue="false">
            <ref name="boolean"/>
        </attribute>
    </optional>
</define>
Адрес целевого диапазона[править]

Атрибут table:target-range-address определяет целевой диапазон для вывода сводной таблицы, т. е. ее отображения. Выделение абсолютных и относительных адресов невозможно, т. е. адрес интерпретируется как абсолютный, даже если он содержит знаки доллара. Адрес диапазона должен содержать имя таблицы.

<define name="table-data-pilot-table-attlist" combine="interleave">
    <attribute name="table:target-range-address">
        <ref name="cellRangeAddress"/>
    </attribute>
</define>
Кнопки[править]

Внутри сводной таблицы некоторые ячейки для обеспечения интерактивных операций с таблицей, подобных изменению порядка столбцов, могут отображаться как кнопки. Атрибут table:buttons определяет все ячейки, которые должны отображаться таким образом. Его значением является список адресов ячеек. Выделение абсолютных и относительных адресов невозможно, т. е. адрес интерпретируется как абсолютный, даже если он содержит знаки доллара. Все адреса должны содержать имя таблицы.

В примерах выше ячейки кнопок отображаются с серым фоном.

<define name="table-data-pilot-table-attlist" combine="interleave">
    <optional>
        <attribute name="table:buttons">
            <ref name="cellRangeAddressList"/>
        </attribute>
    </optional>
</define>
Отображение кнопки фильтра[править]

Атрибут table:show-filter-button определяет, должна ли внутри сводной таблицы в пользовательском интерфейсе отображаться кнопка фильтра.

При нажатии на кнопку фильтра отображается диалог фильтра.

<define name="table-data-pilot-table-attlist" combine="interleave">
    <optional>
        <attribute name="table:show-filter-button" a:defaultValue="true">
            <ref name="boolean"/>
        </attribute>
    </optional>
</define>
Переход к деталям по двойному щелчку[править]

Атрибут table:drill-down-on-double-click определяет, как сводная таблица реагирует на двойной щелчок мышью внутри ее. Если значение атрибута false, двойной щелчок на надписи элемента или на пустой области приведет к переходу в режим редактирования ячейки, подобно ячейкам за пределами сводной таблицы. Это может использоваться для переименования полей групп или элементов. Если значение атрибута true, двойной щелчок на надписи элемента или на пустой области приведет к появлению или скрытию деталей этого элемента. Двойной щелчок в любом другом месте сводной таблицы не приведет к изменениям.

<define name="table-data-pilot-table-attlist" combine="interleave">
    <optional>
        <attribute name="table:drill-down-on-double-click"
                   a:defaultValue="true">
            <ref name="boolean"/>
        </attribute>
    </optional>
</define>

8.8.2 Источник-диапазон ячеек[править]

Если источником сводной таблицы является диапазон ячеек, элемент <table:source-cell-range> содержит информацию о диапазоне ячеек и о том, как сводная таблица получает данные из диапазона. Перед тем как исходные данные преобразуются в данные сводной таблицы, к ним должен быть применен фильтр. Этот фильтр должен быть определен дочерним элементом <table:filter>.

<define name="table-source-cell-range">
    <element name="table:source-cell-range">
        <ref name="table-source-cell-range-attlist"/>
        <optional>
            <ref name="table-filter"/>
        </optional>
    </element>
</define>

С данным элементом может быть связан атрибут:

  • адрес диапазона ячеек.
Адрес диапазона ячеек[править]

Атрибут table:cell-range-address определяет диапазон ячеек, содержащий исходные данные. Адрес исходного диапазона ячеек должен быть абсолютным. Поэтому адрес диапазона ячеек должен содержать имя таблицы, а знаки доллара пропускаются.

<define name="table-source-cell-range-attlist" combine="interleave">
    <attribute name="table:cell-range-address">
        <ref name="cellRangeAddress"/>
    </attribute>
</define>

8.8.3 Источник-служба[править]

Источником сводной таблицы может быть «служба», т. е. данные могут предоставляться внешним компонентом. Элемент <table:source-service> содержит информацию о службе, которая используется для создания сводной таблицы.

<define name="table-source-service">
    <element name="table:source-service">
        <ref name="table-source-service-attlist"/>
        <empty/>
    </element>
</define>

С данным элементом могут быть связаны следующие атрибуты:

  • имя службы;
  • имя источника;
  • имя объекта;
  • имя пользователя источника;
  • пароль источника.
Имя службы[править]

Атрибут table:name определяет имя службы. Его значение зависит от конкретной реализации.

<define name="table-source-service-attlist" combine="interleave">
    <attribute name="table:name">
        <ref name="string"/>
    </attribute>
</define>
Имя источника[править]

Атрибут table:source-name определяет имя источника, который относится к реализации службы. Его значение определяется особенностями приложения и службы.

<define name="table-source-service-attlist" combine="interleave">
    <attribute name="table:source-name">
        <ref name="string"/>
    </attribute>
</define>
Имя объекта[править]

Атрибут table:object-name определяет имя объекта в источнике, который относится к реализации службы. Его значение определяется особенностями приложения и службы.

<define name="table-source-service-attlist" combine="interleave">
    <attribute name="table:object-name">
        <ref name="string"/>
    </attribute>
</define>
Имя пользователя источника[править]

Атрибут table:user-name определяет имя пользователя, необходимое для доступа к источнику. Он относится к реализации службы. Его значение определяется особенностями приложения и службы.

<define name="table-source-service-attlist" combine="interleave">
    <optional>
        <attribute name="table:user-name">
            <ref name="string"/>
        </attribute>
    </optional>
</define>
Пароль источника[править]

Атрибут table:password определяет пароль, необходимый для доступа к источнику. Он относится к реализации службы. Его значение определяется особенностями приложения и службы.

<define name="table-source-service-attlist" combine="interleave">
    <optional>
        <attribute name="table:password">
            <ref name="string"/>
        </attribute>
    </optional>
</define>

8.8.4 Поле сводной таблицы[править]

Поля сводной таблицы определяются элементами <table:data-pilot-field>.

<define name="table-data-pilot-field">
    <element name="table:data-pilot-field">
        <ref name="table-data-pilot-field-attlist"/>
        <optional>
            <ref name="table-data-pilot-level"/>
        </optional>
        <optional>
            <ref name="table-data-pilot-field-reference"/>
        </optional>
        <optional>
            <ref name="table-data-pilot-groups"/>
        </optional>
    </element>
</define>

С данным элементом могут быть связаны следующие атрибуты:

  • имя поля источника;
  • ориентация;
  • поле разметки данных;
  • функция;
  • используемая иерархия.
Имя поля источника[править]

Для полей, которые определяют столбцы категорий или данных, атрибут table:source-field-name определяет имя или надпись столбца, в котором содержится поле. Если источником сводной таблицы является, например, диапазон ячеек, значением атрибута должна быть надпись столбца.

Может быть несколько элементов <table:data-pilot-field> с одним и тем же значением данного атрибута.

<define name="table-data-pilot-field-attlist" combine="interleave">
    <attribute name="table:source-field-name">
        <ref name="string"/>
    </attribute>
</define>
Ориентация[править]

Атрибут table:orientation определяет ориентацию поля источника. Если значение атрибута data, то поле определяет столбец данных. Если значение атрибута row или column, то поле определяет столбец категории. Значение hidden (скрытый) используется для полей, которые имеют соответствующие столбцы в источнике, но невидимы в сводной таблице. Значение page указывает, что для соответствующего столбца должен быть сформирован автоматический фильтр (т. е. некоторый, позволяющий выбрать одно из значений, содержащихся в таблице). В этом случае для столбца должно существовать дополнительное поле с ориентацией row, column или data.

Если значение атрибута равно page, для определения выбранного для фильтра значения может использоваться атрибут table:selected-page.

<define name="table-data-pilot-field-attlist" combine="interleave">
    <choice>
        <attribute name="table:orientation">
            <choice>
                <value>row</value>
                <value>column</value>
                <value>data</value>
                <value>hidden</value>
            </choice>
        </attribute>
        <group>
            <attribute name="table:orientation">
                <value>page</value>
            </attribute>
            <attribute name="table:selected-page">
                <ref name="string"/>
            </attribute>
        </group>
    </choice>
</define>
Поле разметки данных[править]

Атрибут table:is-data-layout-field определяет, является ли поле полем разметки данных (см. раздел 8.8.1). Поля разметки данных обычно не имеют имени.

<define name="table-data-pilot-field-attlist" combine="interleave">
  <optional>
    <attribute name="table:is-data-layout-field" a:defaultValue="false">
    <ref name="string"/>
    </attribute>
  </optional>
</define>
Функция[править]

Атрибут table:function определяет функцию, которая применяется к значениям ячеек столбцов данных. Он рассматривается только в случае, если атрибут table:orientation имеет значение data. Возможные значения данного атрибута: auto, average, count, countnums, max, min, product, stdev, stdevp, sum, var и varp. Для столбцов категорий значение атрибута auto может использоваться для определения того, что функция вообще не применяется.

<define name="table-data-pilot-field-attlist" combine="interleave">
    <optional>
        <attribute name="table:function">
            <choice>
                <value>auto</value>
                <value>average</value>
                <value>count</value>
                <value>countnums</value>
                <value>max</value>
                <value>min</value>
                <value>product</value>
                <value>stdev</value>
                <value>stdevp</value>
                <value>sum</value>
                <value>var</value>
                <value>varp</value>
                <ref name="string"/>
            </choice>
        </attribute>
    </optional>
</define>
Используемая иерархия[править]

Если источник сводной таблицы предоставляется внешним компонентом или службой, данные, содержащиеся в столбцах категорий, могут быть не только сгруппированы по значению, но и могут быть далее разделены на подгруппы или иерархии. Значения дат, например, могут быть группированы по правилу:

  • «год», «месяц» и «день месяца»;
  • «год», «неделя» и «день недели».

Если внешние компоненты поддерживают иерархии, то должны быть назначены уникальные номера. Эти номера могут быть использованы в атрибуте table:used-hierarchy для выбора иерархии, которая должна быть применена к полю источника. Значение по умолчанию означает, что иерархия вообще не применяется.

<define name="table-data-pilot-field-attlist" combine="interleave">
    <optional>
        <attribute name="table:used-hierarchy" a:defaultValue="-1">
            <ref name="integer"/>
        </attribute>
    </optional>
</define>

8.8.5 Уровень сводной таблицы[править]

Элемент уровень сводной таблицы <table:data-pilot-level> содержит дополнительную информацию о полях сводной таблицы.

<define name="table-data-pilot-level">
    <element name="table:data-pilot-level">
        <ref name="table-data-pilot-level-attlist"/>
        <optional>
            <ref name="table-data-pilot-subtotals"/>
        </optional>
        <optional>
            <ref name="table-data-pilot-members"/>
        </optional>
        <optional>
            <ref name="table-data-pilot-display-info"/>
        </optional>
        <optional>
            <ref name="table-data-pilot-sort-info"/>
        </optional>
        <optional>
            <ref name="table-data-pilot-layout-info"/>
        </optional>
    </element>
</define>

С данным элементом может быть связан атрибут:

  • показ пустых полей.
Показ пустых полей[править]

Атрибут table:show-empty определяет, должны ли отображаться поля, не имеющие ни одного элемента. Если данный атрибут не представлен, то приложение может либо отображать, либо не отображать такие поля.

<define name="table-data-pilot-level-attlist" combine="interleave">
    <optional>
        <attribute name="table:show-empty">
            <ref name="boolean"/>
        </attribute>
    </optional>
</define>

8.8.6 Промежуточные суммы сводной таблицы[править]

Элемент промежуточных сумм сводных таблиц <table:data-pilot-subtotals> содержит информацию о промежуточных результатах, которые отображаются для каждого элемента поля и функции, используемой для вычисления результата. Несколько промежуточных результатов могут вычисляться одновременно. Если элемент не представлен, приложение может отображать либо не отображать промежуточные результаты.

<define name="table-data-pilot-subtotals">
    <element name="table:data-pilot-subtotals">
        <zeroOrMore>
            <ref name="table-data-pilot-subtotal"/>
        </zeroOrMore>
    </element>
</define>

8.8.7 Промежуточная сумма сводной таблицы[править]

Элемент промежуточной суммы сводной таблицы <table:data-pilot-subtotal> содержит информацию об отдельном вычислении промежуточного результата.

<define name="table-data-pilot-subtotal">
    <element name="table:data-pilot-subtotal">
        <ref name="table-data-pilot-subtotal-attlist"/>
        <empty/>
    </element>
</define>

С элементом <table:data-pilot-subtotal> может быть связан атрибут:

  • функция.
Функция[править]

Атрибут table:function определяет функцию, используемую для вычисления промежуточной суммы. Возможные функции: auto, average, count, countnums, max, min, product, stdev, stdevp, sum, var и varp.

<define name="table-data-pilot-subtotal-attlist" combine="interleave">
    <attribute name="table:function">
        <choice>
            <value>auto</value>
            <value>average</value>
            <value>count</value>
            <value>countnums</value>
            <value>max</value>
            <value>min</value>
            <value>product</value>
            <value>stdev</value>
            <value>stdevp</value>
            <value>sum</value>
            <value>var</value>
            <value>varp</value>
            <ref name="string"/>
        </choice>
    </attribute>
</define>

8.8.8 Элементы сводной таблицы[править]

Для столбцов категорий возможно управление текущим отображением определенных элементов или отображением информации для определенных элементов. Элемент <table:data-pilot-members> содержит такую информацию.

<define name="table-data-pilot-members">
    <element name="table:data-pilot-members">
        <zeroOrMore>
            <ref name="table-data-pilot-member"/>
        </zeroOrMore>
    </element>
</define>

8.8.9 Элемент сводной таблицы[править]

Элемент <table:data-pilot-member> определяет, какая информация отображается для конкретного элемента сводной таблицы.

<define name="table-data-pilot-member">
    <element name="table:data-pilot-member">
        <ref name="table-data-pilot-member-attlist"/>
        <empty/>
    </element>
</define>

С элементом сводной таблицы могут быть связаны следующие атрибуты:

  • имя элемента;
  • отображение;
  • показ деталей.
Имя элемента[править]

Атрибут table:name определяет значение, для которого задается отображаемая информация.

<define name="table-data-pilot-member-attlist" combine="interleave">
    <attribute name="table:name">
        <ref name="string"/>
    </attribute>
</define>
Отображение[править]

Атрибут table:display определяет, будет ли вообще видим элемент сводной таблицы. Если данный атрибут не представлен, приложение может отображать либо не отображать элемент.

<define name="table-data-pilot-member-attlist" combine="interleave">
    <optional>
        <attribute name="table:display">
            <ref name="boolean"/>
        </attribute>
    </optional>
</define>
Показ деталей[править]

Атрибут table:show-details определяет, будут ли отображаться дополнительные поля для элемента. Этот атрибут меняет поведение сводной таблицы, только если имеется несколько полей с ориентацией row или column. В этом случае и при значении атрибута, равном false, для поля с ориентацией row или column, не являющегося последним с такой ориентацией, элементы всех следующих полей, имеющих такую же ориентацию, отображаться не будут. Вместо этого данные этих полей будут суммироваться.

<define name="table-data-pilot-member-attlist" combine="interleave">
    <optional>
        <attribute name="table:show-details">
            <ref name="boolean"/>
        </attribute>
    </optional>
</define>

8.8.10 Информация об отображении сводной таблицы[править]

Элемент <table:data-pilot-display-info> ограничивает количество строк, отображаемых для поля категории до определенного числа значений поля данных.

<define name="table-data-pilot-display-info">
    <element name="table:data-pilot-display-info">
        <ref name="table-data-pilot-display-info-attlist"/>
        <empty/>
    </element>
</define>
Разрешение[править]

Атрибут table:enabled определяет, принимается ли во внимание элемент <table:data-pilot-display-info>.

<define name="table-data-pilot-display-info-attlist" combine="interleave">
    <attribute name="table:enabled">
        <ref name="boolean"/>
    </attribute>
</define>
Поле данных[править]

Атрибут table:data-field определяет поле данных, значения которого принимаются во внимание.

<define name="table-data-pilot-display-info-attlist" combine="interleave">
    <attribute name="table:data-field">
        <ref name="string"/>
    </attribute>
</define>
Количество элементов[править]

Атрибут table:member-count определяет, сколько значений с верха или с низа столбца поля данных отображается.

<define name="table-data-pilot-display-info-attlist" combine="interleave">
    <attribute name="table:member-count">
        <ref name="nonNegativeInteger"/>
    </attribute>
</define>
Режим отображения элемента[править]

Атрибут table:display-member-mode определяет, должны ли значения, определенные атрибутом table:member-count, быть получены из верха или из низа столбца поля данных.

<define name="table-data-pilot-display-info-attlist" combine="interleave">
    <attribute name="table:display-member-mode">
        <choice>
            <value>from-top</value>
            <value>from-bottom</value>
        </choice>
    </attribute>
</define>

8.8.11 Информация о сортировке сводной таблицы[править]

Элемент <table:data-pilot-sort-info> определяет способ сортировки элементов, хранящихся в поле категории.

<define name="table-data-pilot-sort-info">
    <element name="table:data-pilot-sort-info">
        <ref name="table-data-pilot-sort-info-attlist"/>
        <empty/>
    </element>
</define>
Режим сортировки[править]

Атрибут table:sort-mode описывает, как сортируются элементы одного поля сводной таблицы. При использовании режима data, элементы текущего поля категории сортируются в соответствии с их значениями в поле данных, определенном атрибутом data-field. При использовании режима manual, пользователь может сортировать элементы в поле вручную. Если установлен режим name, элементы в поле сортируются по их именам.

<define name="table-data-pilot-sort-info-attlist" combine="interleave">
    <choice>
        <group>
            <attribute name="table:sort-mode">
                <value>data</value>
            </attribute>
            <attribute name="table:data-field">
                <ref name="string"/>
            </attribute>
        </group>
        <attribute name="table:sort-mode">
            <choice>
                <value>none</value>
                <value>manual</value>
                <value>name</value>
            </choice>
        </attribute>
    </choice>
</define>
Порядок сортировки[править]

Атрибут table:sort-order определяет, должны ли элементы сортироваться в порядке возрастания или убывания.

<define name="table-data-pilot-sort-info-attlist" combine="interleave">
    <attribute name="table:order">
        <choice>
            <value>ascending</value>
            <value>descending</value>
        </choice>
    </attribute>
</define>

8.8.12 Информация о разметке сводной таблицы[править]

Элемент <table:data-pilot-layout-info> описывает, каким образом размечается поле.

<define name="table-data-pilot-layout-info">
    <element name="table:data-pilot-layout-info">
        <ref name="table-data-pilot-layout-info-attlist"/>
        <empty/>
    </element>
</define>
Режим разметки[править]

Атрибут table:layout-mode определяет, каким образом размечается поле. Он может принимать следующие значения:

  • tabular-layout

Режим табулярной разметки — это разметка, при которой каждое имя элемента расположено на той же строке, что и первый элемент следующего поля. В этом режиме промежуточные суммы всегда отображаются ниже данных элементов.

  • outline-subtotals-top

В режиме структуры с промежуточными суммами cверху элементы из следующего поля начинаются в строке ниже имени элемента, подобно обычным отчетам баз данных. Промежуточные суммы отображаются вверху (в той же строке, что и имя элемента). Когда промежуточные суммы занимают более одной строки (выбрано вручную или из-за наличия нескольких полей данных), они всегда отображаются ниже данных элемента, независимо от настроек.

  • outline-subtotals-bottom

Подобен outline-subtotals-top, за исключением того, что промежуточные суммы отображаются снизу (ниже данных элементов, как и в режиме табулярной разметки).

<define name="table-data-pilot-layout-info-attlist" combine="interleave">
    <attribute name="table:layout-mode">
        <choice>
            <value>tabular-layout</value>
            <value>outline-subtotals-top</value>
            <value>outline-subtotals-bottom</value>
        </choice>
    </attribute>
</define>
Добавление пустых строк[править]

Если атрибут table:add-empty-lines имеет значение true, в сводной таблице после данных каждого элемента (включая промежуточные суммы) вставляется пустая строка.

<define name="table-data-pilot-layout-info-attlist" combine="interleave">
    <attribute name="table:add-empty-lines">
        <ref name="boolean"/>
    </attribute>
</define>

8.8.13 Ссылки полей сводной таблицы[править]

Элемент <table:data-pilot-field-reference> описывает данные, которые могут быть использованы для модификации отображаемых значений полей данных.

<define name="table-data-pilot-field-reference">
    <element name="table:data-pilot-field-reference">
        <ref name="table-data-pilot-field-reference-attlist"/>
    </element>
</define>
Поле ссылки[править]

Атрибут table:field-name ссылается на поле категории, элементы которого влияют на отображаемые значения поля данных, и является частью <table:data-pilot-field-reference>.

<define name="table-data-pilot-field-reference-attlist" combine="interleave">
    <attribute name="table:field-name">
        <ref name="string"/>
    </attribute>
</define>
Базовый элемент[править]

Атрибут table:member-type определяет базовый элемент поля категории, от значения которого зависит значение текущего поля данных. Если его значение равно next (previous), используется значение поля данных для следующего (предыдущего) видимого элемента указываемого поля категории. Если его значение равно named, то элемент, от значения которого зависит поле данных, определяется атрибутом table:member-name.

При значениях previous и next пустые элементы пропускаются.

<define name="table-data-pilot-field-reference-attlist" combine="interleave">
    <choice>
        <group>
            <attribute name="table:member-type">
                <value>named</value>
            </attribute>
            <attribute name="table:member-name">
                <ref name="string"/>
            </attribute>
        </group>
        <attribute name="table:member-type">
            <choice>
                <value>previous</value>
                <value>next</value>
            </choice>
        </attribute>
    </choice>
</define>
Тип ссылки[править]

Атрибут table:type определяет, каким образом базовое поле категории влияет на отображаемое значение поля данных. Он может принимать одно из следующих значений:

  • none (обычный)

Это значение устанавливает, что результаты в полях данных отображаются без изменения.

  • member-difference (разность)

Из каждого результата вычитается значение, базового элемента поля категории, определенного атрибутами member-type и table:member-name.

  • member-percentage (доля)

Каждый результат делится на значение, вычисленное для элемента поля категории, определенного атрибутами table:member-type и table:member-name. Деление на ноль приводит к ошибке. Отсутствующие результаты отображаются как «0». Если атрибут table:member-type имеет значение previous, в качестве первого значения отображается «1». Если атрибут table:member-type имеет значение next, в качестве последнего значения отображается «1».

  • member-percentage-difference (приведенная разность)

Из каждого результата вычитается значение, вычисленное для элемента поля категории, определенное атрибутами table:member-type и table:member-name, а результат делится на это же значение. Деление на ноль приводит к ошибке. В других случаях применяются правила member-difference.

  • running-total (нарастающий итог)

Каждый результат добавляется к сумме результатов предыдущих элементов в базовом поле категории, в порядке его сортировки, и отображается итоговая сумма.

  • row-percentage (доля по строке)

Каждый результат делится на общий результат по строке сводной таблицы. При наличии нескольких полей данных используется общий итог по полю данных результатов. Если имеются промежуточные суммы с функциями итога, выбранными вручную, общий итог вычисляется с использованием функции итогов поля данных. Деление на ноль приводит к ошибке.

  • column-percentage (доля по столбцу)

То же, что и row-percentage, но используется итог по столбцу результатов.

  • total-percentage (доля по итогу)

То же, что и row-percentage, но используется общий итог по полю данных результатов.

  • index (индекс)

На основании сумм по столбцу и строке, а также общей суммы по приведенным выше правилам вычисляется выражение: (первоначальный результат * общая сумма) / (сумма по строке * сумма по столбцу).

Деление на ноль приводит к ошибке.

<define name="table-data-pilot-field-reference-attlist" combine="interleave">
    <attribute name="table:type">
        <choice>
            <value>none</value>
            <value>member-difference</value>
            <value>member-percentage</value>
            <value>member-percentage-difference</value>
            <value>running-total</value>
            <value>row-percentage</value>
            <value>column-percentage</value>
            <value>total-percentage</value>
            <value>index</value>
        </choice>
    </attribute>
</define>

8.8.14 Группы в сводных таблицах[править]

Элемент <table:data-pilot-groups> определяет, что поле сводной таблицы является полем группировки. Поле группировки позволяет группировать другие поля. Например, если сводная таблица содержит поле столбца с именем «город», который имеет элементы «Берлин», «Мюнхен», «Франкфурт», «Гамбург», «Лондон», «Манчестер», «Хейстингс» и «Ливерпуль», и необходимо группировать города по странам, для этого в сводную таблицу может быть добавлено поле группировки с именем «город2», которое содержит две группы, называемые «Англия» и «Германия». Каждая группа содержит список имен ее элементов. В данном примере группа «Англия» будет содержать «Лондон», «Манчестер», «Хейстингс» и «Ливерпуль». Группа «Германия» содержит «Берлин», «Мюнхен», «Франкфурт» и «Гамбург».

Группировка может быть применена к числам и датам.

<define name="table-data-pilot-groups">
    <element name="table:data-pilot-groups">
        <ref name="table-data-pilot-groups-attlist"/>
        <oneOrMore>
            <ref name="table-data-pilot-group"/>
        </oneOrMore>
    </element>
</define>
Имя поля источника[править]

Атрибут table:source-field-name ссылается на поле, содержащее данные, подлежащие группировке, если эти данные не являются данными, представленными самим полем.

<define name="table-data-pilot-groups-attlist" combine="interleave">
    <attribute name="table:source-field-name">
        <ref name="string"/>
    </attribute>
</define>
Начало[править]

Если группируются числа или даты, атрибуты table:date-start и table:start определяют начальное значение для группировки. Все значения, меньшие начального значения, содержатся в одной группе, в то время как значения, большие или равные начальному значению, группируются, как определено атрибутами table:grouped-by и table:step.

Если значение атрибута равно auto, в качестве начального выбирается минимальное значение поля.

<define name="table-data-pilot-groups-attlist" combine="interleave">
    <choice>
        <attribute name="table:date-start">
            <choice>
                <ref name="dateOrDateTime"/>
                <value>auto</value>
            </choice>
        </attribute>
        <attribute name="table:start">
            <choice>
                <ref name="double"/>
                <value>auto</value>
            </choice>
        </attribute>
    </choice>
</define>
Конец[править]

Если группируются числа или даты, атрибуты table:date-end и table:end определяют конечное значение для группировки. Все значения, большие конечного значения, содержатся в одной группе, в то время как значения, меньшие или равные конечному значению, группируются, как определено атрибутами table:grouped-by и table:step.

Если значение атрибута равно auto, в качестве конечного выбирается максимальное значение поля.

<define name="table-data-pilot-groups-attlist" combine="interleave">
    <choice>
        <attribute name="table:date-end">
            <choice>
                <ref name="dateOrDateTime"/>
                <value>auto</value>
            </choice>
        </attribute>
        <attribute name="table:end">
            <choice>
                <ref name="double"/>
                <value>auto</value>
            </choice>
        </attribute>
    </choice>
</define>
Шаг[править]

Атрибут table:step определяет группировку числовых значений, задавая интервал между группами. Например, если атрибут группировки table:start имеет значение 5, а атрибут table:step имеет значение 2, все значения, равные или большие 5, но меньшие 7, будут в одной группе. Все значения, равные или большие 7, но меньшие 9, будут в следующей группе и так далее, пока не будет достигнуто конечное значение.

<define name="table-data-pilot-groups-attlist" combine="interleave">
    <attribute name="table:step">
        <ref name="double"/>
    </attribute>
</define>
Группировка по[править]

Атрибут table:grouped-by определяет группировку дат. Даты могут группироваться по секундам, минутам, часам, дням, месяцам, кварталам или годам. Если даты сгруппированы, например, по минутам, все даты и времена, которые имею одинаковые значения минут попадут в одну группу. Так, если даны даты 2004-08-27T12:34:46, 2004-08-27T12:34:56 и 2004-08-27T12:35:46, две первых попадут в одну группу, в то время как последняя будет единственной датой в собственной группе.

<define name="table-data-pilot-groups-attlist" combine="interleave">
    <attribute name="table:grouped-by">
        <choice>
            <value>seconds</value>
            <value>minutes</value>
            <value>hours</value>
            <value>days</value>
            <value>months</value>
            <value>quarters</value>
            <value>years</value>
        </choice>
    </attribute>
</define>

8.8.15 Группа сводной таблицы[править]

Если группировка осуществляется по определенным именам элементов, то имена элементов одной группы определяются элементом <table:data-pilot-group>.

<define name="table-data-pilot-group">
    <element name="table:data-pilot-group">
        <ref name="table-data-pilot-group-attlist"/>
        <oneOrMore>
            <ref name="table-data-pilot-group-member"/>
        </oneOrMore>
    </element>
</define>
Имя[править]

Атрибут table:name определяет имя группы.

<define name="table-data-pilot-group-attlist" combine="interleave">
    <attribute name="table:name">
        <ref name="string"/>
    </attribute>
</define>

8.8.16 Элемент группы сводной таблицы[править]

Элемент <table:data-pilot-group-member> определяет имя одного элемента группы.

<define name="table-data-pilot-group-member">
    <element name="table:data-pilot-group-member">
        <ref name="table-data-pilot-group-member-attlist"/>
    </element>
</define>
Имя[править]

Атрибут table:name определяет имя элемента.

<define name="table-data-pilot-group-member-attlist" combine="interleave">
    <attribute name="table:name">
        <ref name="string"/>
    </attribute>
</define>

8.9 Консолидация[править]

Консолидация — сбор данных из нескольких независимых диапазонов таблиц. Новый диапазон таблицы вычисляется с применением математических функций ко всем ячейкам в исходных диапазонах таблиц, имеющим одинаковый относительный адрес внутри своих диапазонов. Консолидация определяется элементом <table:consolidation>.

<define name="table-consolidation">
    <element name="table:consolidation">
        <ref name="table-consolidation-attlist"/>
        <empty/>
    </element>
</define>

С данным элементом могут быть связаны следующие атрибуты:

  • функция;
  • адреса диапазона ячеек источника;
  • адрес целевой ячейки;
  • использование надписи;
  • связь с исходными данными.

Функция[править]

Атрибут table:function содержит функцию, которая используется для консолидации данных. Возможные функции: auto, average, count, countnums, max, min, product, stdev, stdevp, sum, var и varp.

<define name="table-consolidation-attlist" combine="interleave">
    <attribute name="table:function">
        <choice>
            <value>auto</value>
            <value>average</value>
            <value>count</value>
            <value>countnums</value>
            <value>max</value>
            <value>min</value>
            <value>product</value>
            <value>stdev</value>
            <value>stdevp</value>
            <value>sum</value>
            <value>var</value>
            <value>varp</value>
            <ref name="string"/>
        </choice>
    </attribute>
</define>

Адреса диапазона ячеек источника[править]

Атрибут table:source-cell-range-addresses содержит список адресов диапазонов ячеек, определяющих исходные диапазоны данных.

<define name="table-consolidation-attlist" combine="interleave">
    <attribute name="table:source-cell-range-addresses">
        <ref name="cellRangeAddressList"/>
    </attribute>
</define>

Адрес целевой ячейки[править]

Атрибут table:target-cell-address содержит адрес целевой ячейки.

<define name="table-consolidation-attlist" combine="interleave">
    <attribute name="table:target-cell-address">
        <ref name="cellAddress"/>
    </attribute>
</define>

Использование надписи[править]

Атрибут table:use-label определяет, должны ли использоваться надписи при консолидации строк, столбцов или и тех, и других. Возможные значения: none, column, row и both. Если для строк и столбцов используются надписи, математическая функция применяется к ячейкам с одинаковыми надписями строк или столбцов вместо ячеек с одинаковыми относительными адресами.

<define name="table-consolidation-attlist" combine="interleave">
    <optional>
        <attribute name="table:use-labels" a:defaultValue="none">
            <choice>
                <value>none</value>
                <value>row</value>
                <value>column</value>
                <value>both</value>
            </choice>
        </attribute>
    </optional>
</define>

Связь с исходными данными[править]

Атрибут table:link-to-source-data определяет, должны ли данные в диапазоне консолидированной таблицы быть связанными с исходными данными, т. е. автоматически обновляться, если произошли изменения в исходных данных.

<define name="table-consolidation-attlist" combine="interleave">
    <optional>
        <attribute name="table:link-to-source-data" a:defaultValue="false">
            <ref name="boolean"/>
        </attribute>
    </optional>
</define>

8.10 DDE-ссылки[править]

Элемент-контейнер <table:dde-links> содержит все DDE-ссылки документа электронной таблицы. Каждая связь содержит источник DDE и данные последнего соединения. Детальную информация приведена в разделе 12.6.3.

<define name="table-dde-links">
    <element name="table:dde-links">
        <oneOrMore>
            <ref name="table-dde-link"/>
        </oneOrMore>
    </element>
</define>

8.11 Отслеживание изменений в электронных таблицах[править]

В документах электронных таблиц изменения могут отслеживаться. В данном разделе описано, каким образом представляется информация отслеживания изменений.

В текстовых документах отслеживание изменений в таблицах не поддерживается.

8.11.1 Отслеживаемые изменения[править]

Все изменения, внесенные в документ электронной таблицы, сохраняются в списке. Для каждого изменения, произошедшего в документе, в списке содержится элемент. Для отслеживания изменений в документе электронной таблицы должен быть представлен элемент <table:tracked-changes>.

<define name="table-tracked-changes">
    <element name="table:tracked-changes">
        <ref name="table-tracked-changes-attlist"/>
        <zeroOrMore>
            <choice>
                <ref name="table-cell-content-change"/>
                <ref name="table-insertion"/>
                <ref name="table-deletion"/>
                <ref name="table-movement"/>
            </choice>
        </zeroOrMore>
    </element>
</define>
Отслеживание изменений[править]

Атрибут table:track-changes определяет, разрешено ли отслеживание изменений.

<define name="table-tracked-changes-attlist" combine="interleave">
    <optional>
        <attribute name="table:track-changes" a:defaultValue="false">
            <ref name="boolean"/>
        </attribute>
    </optional>
</define>

8.11.2 Вставка[править]

Элемент <table:insertion> содержит информацию, необходимую для обнаружения любой вставки содержимого. Таким содержимым может быть одна строка или более строк, один столбец или более столбцов, или таблица.

<define name="table-insertion">
    <element name="table:insertion">
        <ref name="table-insertion-attlist"/>
        <ref name="common-table-change-attlist"/>
        <ref name="office-change-info"/>
        <optional>
            <ref name="table-dependencies"/>
        </optional>
        <optional>
            <ref name="table-deletions"/>
        </optional>
    </element>
</define>

С данным элементом могут быть связаны следующие атрибуты:

Тип[править]

Атрибут table:type определяет тип вставки. Он может принимать значения row, column или table.

<define name="table-insertion-attlist" combine="interleave">
    <attribute name="table:type">
        <choice>
            <value>row</value>
            <value>column</value>
            <value>table</value>
        </choice>
    </attribute>
</define>
Позиция[править]

Атрибут table:position определяет позицию, в которой была осуществлена вставка. В зависимости от типа вставки он может принимать значения номера строки, столбца или таблицы.

<define name="table-insertion-attlist" combine="interleave">
    <attribute name="table:position">
        <ref name="integer"/>
    </attribute>
</define>
Количество[править]

Атрибут table:count определяет количество вставленных строк, столбцов или таблиц.

<define name="table-insertion-attlist" combine="interleave">
    <optional>
        <attribute name="table:count" a:defaultValue="1">
            <ref name="positiveInteger"/>
        </attribute>
    </optional>
</define>
Таблица[править]

Атрибут table:table определяет номер таблицы, в которой осуществлена вставка. Этот атрибут существует для вставок столбца или строки.

<define name="table-insertion-attlist" combine="interleave">
    <optional>
        <attribute name="table:table">
            <ref name="integer"/>
        </attribute>
    </optional>
</define>

Пример — Вставка текста в ячейку:

<table:tracked-changes>
    <table:insertion table:id="c001" table:acceptance-state="pending"
                     table:type="column" table:position="5">
        <office:change-info>
            <dc:creator>Sascha Ballach</dc:creator>
            <dc:date>1999-55-18T12:56:04</dc:date>
        </office:change-info>
    </table:insertion>
</table:tracked-changes>

8.11.3 Зависимости[править]

Элемент <table:dependencies> содержит информацию о других отслеживаемых изменениях, от которых данное отслеживаемое изменение зависит. Каждый элемент отслеживаемых изменений может содержать элемент <table:dependencies>.

<define name="table-dependencies">
    <element name="table:dependencies">
        <oneOrMore>
            <ref name="table-dependency"/>
        </oneOrMore>
    </element>
</define>

8.11.4 Зависимость[править]

Элемент <table:dependency> содержит информацию об одном действии изменения, от которого зависит родительский элемент. Действие изменения определяется по его идентификатору.

<define name="table-dependency">
    <element name="table:dependency">
        <attribute name="table:id">
            <ref name="string"/>
        </attribute>
        <empty/>
    </element>
</define>

8.11.5 Удаления[править]

Элемент <table:deletions> содержит все удаления, произошедшие во время отслеживания одного изменения таблицы.

<define name="table-deletions">
    <element name="table:deletions">
        <oneOrMore>
        <choice>
            <ref name="table-cell-content-deletion"/>
            <ref name="table-change-deletion"/>
        </choice>
        </oneOrMore>
    </element>
</define>

8.11.6 Удаление содержимого ячейки[править]

Элемент <table:cell-content-deletion> определяет, что содержимое ячейки было удалено. Он содержит адрес обработанной ячейки и ее бывшее содержимое. Если представлен атрибут text:id, он определяет идентификатор предыдущего отслеженного изменения, которое было удалено текущим изменением.

<define name="table-cell-content-deletion">
    <element name="table:cell-content-deletion">
        <optional>
            <attribute name="table:id">
                <ref name="string"/>
            </attribute>
        </optional>
        <optional>
            <ref name="table-cell-address"/>
        </optional>
        <optional>
            <ref name="table-change-track-table-cell"/>
        </optional>
    </element>
</define>

8.11.7 Удаление изменений[править]

Элемент <table:change-deletion> определяет предыдущее отслеженное изменение, которое было удалено текущим изменением.

<define name="table-change-deletion">
    <element name="table:change-deletion">
        <optional>
            <attribute name="table:id">
            <ref name="string"/>
            </attribute>
        </optional>
        <empty/>
    </element>
</define>

8.11.8 Удаление[править]

Элемент <table:deletion> хранит содержимое, которое было удалено, пока отслеживание изменений было разрешено. Удаленное содержимое ячеек хранится в элементе <table:dependencies> или <table:deletions>.

<define name="table-deletion">
    <element name="table:deletion">
        <ref name="table-deletion-attlist"/>
        <ref name="common-table-change-attlist"/>
        <ref name="office-change-info"/>
        <optional>
            <ref name="table-dependencies"/>
        </optional>
        <optional>
            <ref name="table-deletions"/>
        </optional>
        <optional>
            <ref name="table-cut-offs"/>
        </optional>
    </element>
</define>

С данным элементом могут быть связаны следующие атрибуты:

  • идентификатор (см. раздел 8.11.18);
  • состояние принятия (см. раздел 8.11.18);
  • идентификатор отклоняемого изменения (см. раздел 8.11.18);
  • тип;
  • позиция;
  • таблица;
  • покрытие множественных удалений.
Тип[править]

Атрибут table:type определяет тип удаления. Он может принимать значения row, column или table.

<define name="table-deletion-attlist" combine="interleave">
    <attribute name="table:type">
        <choice>
            <value>row</value>
            <value>column</value>
            <value>table</value>
        </choice>
    </attribute>
</define>
Позиция[править]

Атрибут table:position определяет позицию, в которой было осуществлено удаление. В зависимости от типа удаления он может принимать значения номера строки, столбца или таблицы.

<define name="table-deletion-attlist" combine="interleave">
    <attribute name="table:position">
        <ref name="integer"/>
    </attribute>
</define>
Таблица[править]

Атрибут table:table определяет номер таблицы, в которой осуществлено удаление. Этот атрибут существует для удалений столбца или строки.

<define name="table-deletion-attlist" combine="interleave">
    <optional>
        <attribute name="table:table">
            <ref name="integer"/>
        </attribute>
    </optional>
</define>
Покрытие множественных удалений[править]

Если одновременно было удалено множество столбцов или строк, каждая удаленная строка или столбец получают свой собственный элемент <table:deletion>. Элемент удаленной первой строки или столбца в этом случае несет в себе атрибут table:multi-deletion-spanned, который определяет общее количество удаленных строк или столбцов.

<define name="table-deletion-attlist" combine="interleave">
    <optional>
        <attribute name="table:multi-deletion-spanned">
            <ref name="integer"/>
        </attribute>
    </optional>
</define>

8.11.9 Вырезки[править]

Элемент <table:cut-offs> содержит информацию о ранее отслеженных вставках или перемещениях, часть содержимого которых была удалена данной операцией. Например, это может быть перемещенный ранее диапазон ячеек, который перекрывался только что удаленной строкой.

<define name="table-cut-offs">
    <element name="table:cut-offs">
        <choice>
            <oneOrMore>
                <ref name="table-movement-cut-off"/>
            </oneOrMore>
            <group>
                <ref name="table-insertion-cut-off"/>
                <zeroOrMore>
                    <ref name="table-movement-cut-off"/>
                </zeroOrMore>
            </group>
        </choice>
    </element>
</define>

8.11.10 Вырезка вставки[править]

Элемент <table:insertion-cut-off> содержит информацию о том, где произошло удаление вставки и что было удалено.

<define name="table-insertion-cut-off">
    <element name="table:insertion-cut-off">
        <ref name="table-insertion-cut-off-attlist"/>
        <empty/>
    </element>
</define>

С данным элементом могут быть связаны следующие атрибуты:

Идентификатор[править]

Атрибут table:id содержит идентификатор вставки, часть которой была удалена.

<define name="table-insertion-cut-off-attlist" combine="interleave">
    <attribute name="table:id">
    <ref name="string"/>
    </attribute>
</define>
Позиция[править]

Атрибут table:position определяет количество строк или столбцов, которые были удалены внутри вставки.

<define name="table-insertion-cut-off-attlist" combine="interleave">
    <attribute name="table:position">
        <ref name="integer"/>
    </attribute>
</define>

8.11.11 Вырезка перемещения[править]

Элемент <table:movement-cut-off> содержит информацию о том, где произошло удаление перемещения и что было удалено.

<define name="table-movement-cut-off">
    <element name="table:movement-cut-off">
        <ref name="table-movement-cut-off-attlist"/>
        <empty/>
    </element>
</define>

С данным элементом могут быть связаны следующие атрибуты:

  • идентификатор (см. раздел 8.11.18);
  • начальная позиция, конечная позиция, позиция.
Начальная позиция, конечная позиция, позиция[править]

Атрибуты table:start-position, table:end-position и table:position определяют позицию внутри перемещения, которая была удалена. Если удалена одна строка или столбец, то в атрибуте table:position содержится ее номер. Если были удалены несколько строк или столбцов, атрибуты table:start-position и table:end-position содержат номер первой (включительно) и последней (не включительно) удаленных строк или столбцов.

<define name="table-movement-cut-off-attlist" combine="interleave">
    <choice>
        <attribute name="table:position">
            <ref name="integer"/>
        </attribute>
        <group>
            <attribute name="table:start-position">
                <ref name="integer"/>
            </attribute>
            <attribute name="table:end-position">
                <ref name="integer"/>
            </attribute>
        </group>
    </choice>
</define>

Пример — Удаление столбца, не имеющего содержимого:

<table:tracked-changes>
    <table:deletion table:id="c002" table:acceptance-state="pending"
                     table:type="column" table:position="9">
        <office:change-info>
            <dc:creator>Sascha Ballach</dc:creator>
            <dc:date>1999-05-18T12:56:04</dc:creator>
        </office:change-info>
    </table:deletion>
</table:tracked-changes>

8.11.12 Перемещение[править]

Элемент <table:movement> содержит информацию, необходимую для распознавания любого перемещения содержимого. Таким содержимым может быть содержимое ячейки или содержимое диапазона ячеек.

<define name="table-movement">
    <element name="table:movement">
        <ref name="common-table-change-attlist"/>
        <ref name="table-source-range-address"/>
        <ref name="table-target-range-address"/>
        <ref name="office-change-info"/>
        <optional>
            <ref name="table-dependencies"/>
        </optional>
        <optional>
            <ref name="table-deletions"/>
        </optional>
    </element>
</define>

С данным элементом могут быть связаны следующие атрибуты:

8.11.13 Адрес целевого диапазона, адрес диапазона источника[править]

Элементы <table:source-range-address> и <table:target-range-address> определяют адреса исходной и целевой ячеек или адреса диапазонов ячеек для перемещения.

<define name="table-source-range-address">
    <element name="table:source-range-address">
        <ref name="common-table-range-attlist"/>
        <empty/>
    </element>
</define>

<define name="table-target-range-address">
    <element name="table:target-range-address">
        <ref name="common-table-range-attlist"/>
        <empty/>
    </element>
</define>


<define name="common-table-range-attlist" combine="interleave">
    <choice>
        <group>
            <ref name="common-table-cell-address-attlist"/>
        </group>
        <group>
            <ref name="common-table-cell-range-address-attlist"/>
        </group>
    </choice>
</define>

С обоими элементами могут быть связаны следующие атрибуты:

  • столбец, строка и таблица;
  • начальный столбец, конечный столбец, начальная строка, конечная строка, начальная таблица, конечная таблица.
Столбец, строка и таблица[править]

Если адрес диапазона — это адрес ячейки, то три атрибута table:column, table:row и table:table определяют номера столбца, строки и таблицы ячейки.

<define name="common-table-cell-address-attlist" combine="interleave">
    <attribute name="table:column">
        <ref name="integer"/>
    </attribute>
    <attribute name="table:row">
        <ref name="integer"/>
    </attribute>
    <attribute name="table:table">
        <ref name="integer"/>
    </attribute>
</define>
Начальный столбец, конечный столбец, начальная строка, конечная строка, начальная таблица, конечная таблица[править]

Если адрес является адресом диапазона, а не адресом ячейки, атрибуты table:start-column, table:end-column, table:start-row, table:end-row, table:start-table и table:end-table определяют начальные и конечные столбцы, строки и таблицы диапазона. И начальные, и конечные номера указываются включительно.

<define name="common-table-cell-range-address-attlist" combine="interleave">
    <attribute name="table:start-column">
        <ref name="integer"/>
    </attribute>
    <attribute name="table:start-row">
        <ref name="integer"/>
    </attribute>
    <attribute name="table:start-table">
        <ref name="integer"/>
    </attribute>
    <attribute name="table:end-column">
        <ref name="integer"/>
    </attribute>
    <attribute name="table:end-row">
        <ref name="integer"/>
    </attribute>
    <attribute name="table:end-table">
        <ref name="integer"/>
    </attribute>
</define>

Пример — Перемещение ячейки:

<table:tracked-changes>
    <table:movement table:id="ct1">
        <table:source-range-address table:column="0" table:row="0"
                                     table:table="0"/>
        <table:target-range-address table:column="1" table:row="1"
                                     table:table="0"/>
        <office:change-info>
            <dc:creator>Michael Brauer</dc:creator>
            <dc:date>2003-12-29T11:46:13,21"</dc:date>
        </office:change-info>
    </table:movement>
</table:tracked-changes>

8.11.14 Ячейка отслеживания изменений[править]

Элемент <table:change-track-table-cell> содержит всю информацию ячейки таблицы, которая необходима внутри элементов отслеживания изменений. Элемент очень похож на элемент <table:table-cell>, но содержит некоторою дополнительную информацию.

<define name="table-change-track-table-cell" combine="interleave">
    <element name="table:change-track-table-cell">
        <ref name="table-change-track-table-cell-attlist"/>
        <zeroOrMore>
            <ref name="text-p"/>
        </zeroOrMore>
    </element>
</define>
Адрес ячейки[править]

Если ячейка содержит формулу, необходим атрибут table:cell-address, определяющий исходный адрес ячейки, используемой в вычислениях.

<define name="table-change-track-table-cell-attlist" combine="interleave">
    <optional>
        <attribute name="table:cell-address">
            <ref name="cellAddress"/>
        </attribute>
    </optional>
</define>
Покрытие матрицы[править]

Если ячейка является ячейкой матрицы, но не базой матрицы, то необходим атрибут table:matrix-covered, значение которого должно быть true для обозначения того, что ячейка содержится в матрице.

<define name="table-change-track-table-cell-attlist" combine="interleave">
    <optional>
        <attribute name="table:matrix-covered" a:defaultValue="false">
            <ref name="boolean"/>
        </attribute>
    </optional>
</define>
Формулы и значения[править]

Ячейки таблицы отслеживания изменений поддерживают атрибуты table:formula, table:number-matrix-rows-spanned, table:number-matrix-columns-spanned, office:value-type, office:value, office:date-value, office:time-value и office:string-value, описанные в разделе 8.1.3.

<define name="table-change-track-table-cell-attlist" combine="interleave">
    <optional>
        <attribute name="table:formula">
            <ref name="string"/>
        </attribute>
    </optional>
    <optional>
        <attribute name="table:number-matrix-columns-spanned">
            <ref name="positiveInteger"/>
        </attribute>
    </optional>
    <optional>
        <attribute name="table:number-matrix-rows-spanned">
            <ref name="positiveInteger"/>
        </attribute>
    </optional>
    <optional>
        <ref name="common-value-and-type-attlist"/>
    </optional>
</define>

8.11.15 Изменение содержимого ячейки[править]

Элемент <table:cell-content-change> содержит информацию, необходимую для распознавания изменений содержимого ячейки.

<define name="table-cell-content-change">
    <element name="table:cell-content-change">
        <ref name="common-table-change-attlist"/>
        <ref name="table-cell-address"/>
        <ref name="office-change-info"/>
        <optional>
            <ref name="table-dependencies"/>
        </optional>
        <optional>
            <ref name="table-deletions"/>
        </optional>
        <ref name="table-previous"/>
    </element>
</define>

С данным элементом могут быть связаны следующие атрибуты:

8.11.16 Адрес ячейки[править]

Элемент <table:cell-address> содержит адрес ячейки, которая была изменена. В отличие от других адресов ячеек, этот адрес содержит номера строки, столбца и таблицы ячейки. Это позволяет определять адреса, выходящие за пределы действительного диапазона адресов ячеек, например, имеющие отрицательный номер столбца.

<define name="table-cell-address">
    <element name="table:cell-address">
        <ref name="common-table-cell-address-attlist"/>
        <empty/>
    </element>
</define>

С данным элементом могут быть связаны следующие атрибуты:

8.11.17 Предыдущее содержимое ячейки[править]

Элемент table:previous содержит предыдущее содержимое ячейки, которое перезаписано текущим изменением. Если атрибут text:id представлен, он определяет ID ранее отслеженного изменения для ячейки, которая изменена снова текущим изменением.

<define name="table-previous">
    <element name="table:previous">
        <optional>
            <attribute name="table:id">
                <ref name="string"/>
            </attribute>
        </optional>
        <ref name="table-change-track-table-cell"/>
    </element>
</define>

8.11.18 Общие атрибуты отслеживания изменений[править]

Идентификатор[править]

Атрибут table:id определяет идентификационный номер отслеженного изменения.

<define name="common-table-change-attlist" combine="interleave">
    <attribute name="table:id">
        <ref name="string"/>
    </attribute>
</define>
Состояние принятия[править]

Атрибут table:acceptance-state определяет, принято или отклонено отслеженное изменение, или находится в состоянии ожидания принятия или отклонения.

<define name="common-table-change-attlist" combine="interleave">
    <optional>
        <attribute name="table:acceptance-state" a:defaultValue="pending">
            <choice>
                <value>accepted</value>
                <value>rejected</value>
                <value>pending</value>
            </choice>
        </attribute>
    </optional>
</define>
Идентификатор отклоняемого изменения[править]

Если атрибут table:rejecting-change-id представлен, текущее изменение должно быть выполнено как отмена другого ранее отслеженного изменения. Значением атрибута является идентификатор ранее отслеженного изменения, которое должно быть отклонено.

<define name="common-table-change-attlist" combine="interleave">
    <optional>
        <attribute name="table:rejecting-change-id">
            <ref name="string"/>
        </attribute>
    </optional>
</define>


Это произведение не охраняется авторским правом.
В соответствии со статьёй 1259 Гражданского кодекса Российской Федерации не являются объектами авторских прав официальные документы государственных органов и органов местного самоуправления муниципальных образований, в том числе законы, другие нормативные акты, судебные решения, иные материалы законодательного, административного и судебного характера, официальные документы международных организаций, а также их официальные переводы; государственные символы и знаки (флаги, гербы, ордена, денежные знаки и тому подобное), а также символы и знаки муниципальных образований; произведения народного творчества (фольклор), не имеющие конкретных авторов; сообщения о событиях и фактах, имеющие исключительно информационный характер (сообщения о новостях дня, программы телепередач, расписания движения транспортных средств и тому подобное).
Россия