Выбор в не-OLAP срезах сводных таблиц
Версия 2.384.88 добавляет типизированный выбор элементов в импортированных кэшах не-OLAP срезов сводных таблиц, которые можно привязать к обычным локальным полям кэша и их подключённым представлениям сводных таблиц
Инспекция и изменение выборки
SlicerCache := Workbook.SlicerCaches.FindByName('SlicerCategory');
if (SlicerCache = nil) or not SlicerCache.IsNonOlapPivot then
raise Exception.Create('A non-OLAP Pivot Slicer cache is required');
if SlicerCache.SetSelectedItems([1]) <> 1 then
raise Exception.Create('Slicer selection could not be changed');
TXLSXSlicerCache.IsNonOlapPivot опознаёт табличную форму сводной таблицы; TXLSXSlicerCache.ItemCount, TXLSXSlicerCache.ItemCacheIndex и TXLSXSlicerCache.ItemSelected предоставляют разобранный список элементов и выборку
Позиции в списке элементов отсчитываются от нуля; каждый ItemCacheIndex идентифицирует общий элемент в привязанном поле кэша сводной таблицы, поэтому числа, текст, Boolean, даты, пустоты и ошибки сохраняют отдельные идентичности, даже если их отображаемый текст совпадает
TXLSXSlicerCacheItem хранит CacheItemIndex: Integer и Selected: Boolean; TXLSXSlicerCacheItems — его тип динамического массива, а кэш предоставляет выборку через индексированные свойства только для чтения
TXLSXSlicerCache.SetSelectedItems принимает индексы общих элементов и возвращает 1 при успехе или -1 для неподдерживаемых, неверных или небезопасных привязок; пустая выборка отклоняется, потому что формат файла требует хотя бы одного выбранного элемента
TXLSXSlicerCache.ClearSelection возвращает тот же статус и выбирает все элементы; он снимает ограничение этого среза, сохраняя независимые ограничения на других полях
Общие представления и существующие фильтры
Выбранные элементы внутри одного кэша среза образуют объединение; применимые кэши срезов пересекаются для каждого явно подключённого представления, в том числе когда выбранное поле отсутствует на отображаемых осях этого представления; несколько UI-представлений срезов одного кэша разделяют одну выборку
Вызовите TXLSPivotTable.Make с писателем результата приложения, чтобы вычислить текущие результаты; изменение выборки кэша не переписывает ячейки листа и не регенерирует каждый импортированный нативный макет
Excel хранит выборки не-OLAP срезов как обычные скрытия элементов сводной таблицы и выборки страниц; формат не записывает, какая операция создала отдельный флаг скрытия
Перед изменением импортированной привязки HotXLS проверяет, что её старые маски скрытия и страниц того же поля совпадают с действующей старой выборкой среза; совпавшие маски считаются управляемыми срезом, а несогласованные или неоднозначные маски отклоняются без догадок; ручные, страничные и расширенные фильтры других полей остаются активными
Сохранение и обновление источника
Сохранение обновляет выборку среза и подключённые маски элементов сводной таблицы вместе, сохраняет импортированные пространства имён XML и неизвестные расширения и перемаппит подключения листов на их сохранённые идентичности; расширенные идентификаторы кэшей срезов остаются отличными от обычных идентификаторов кэшей сводных таблиц книги
Локальное обновление кэша сводных таблиц сохраняет индексы выбранных общих элементов; явные подмножества исключают новые элементы, а очищенные выборки допускают полный обновлённый домен
Границы и поведение при сбоях
Изменения выборки проверяют все подключённые представления и элементы до фиксации и используют защиту изменений книги; сбой сохраняет существующую выборку, ограничения представлений и исходный XML
Добавление, удаление и очистка кэшей срезов также используют защиту записи книги; замороженное представление книги не может менять подключённые результаты сводных таблиц через изменение коллекций
Удаление привязанного не-OLAP кэша сводных таблиц или очистка коллекции, которая его содержит, отклоняется до изменения; явная жизненная операция RemoveSlicerCache удаляет его нативные представления и либо очищает его выборку, либо переносит её в обычные маски сводной таблицы
Выбор в OLAP и кэшах таблиц, группированные или вычисляемые исходные поля, отсутствующие подключения, несогласованные домены и неоднозначные импортированные маски одного поля остаются вне этой операции; неподдерживаемое содержимое кэша сохраняет исходное представление
Этот API выбора обрабатывает импортированные и поддерживаемые авторские кэши срезов сводных таблиц; авторинг общих представлений и явное удаление кэша доступны в 2.384.94; безопасная материализация на листе может заменить поддерживаемый вычисляемый вывод, а вычисление показа отсутствия данных при перекрёстной фильтрации остаётся отдельной работой
Удаление последнего UI-представления привязанного не-OLAP кэша отклоняется до изменения его рисунка, представления или кэша; удаление одного из нескольких UI-представлений сохраняет их общий кэш и выборку
Очистка представлений срезов листа проверяет каждый затронутый кэш перед удалением любого представления; последнее привязанное представление приводит к атомарному отклонению, а представления, разделяемые с другими листами, сохраняют свой кэш и выборку
Дополнительные фильтры записей
TlxPivotRecordFilter = function(ATable: TXLSPivotTable; ARecordIndex: Integer): Boolean of object; procedure TXLSPivotTable.SetRecordFilter(AOwner: TObject; AFilter: TlxPivotRecordFilter); procedure TXLSPivotTable.ClearRecordFilter(AOwner: TObject); property TXLSPivotTable.ExternalRecordFilter: TlxPivotRecordFilter;
TXLSPivotTable.SetRecordFilter регистрирует или заменяет один callback на каждого владельца не-nil, а TXLSPivotTable.ClearRecordFilter удаляет callback этого владельца; передача nil-callback в SetRecordFilter тоже удаляет его
Зарегистрированные callback'и и необязательный TXLSPivotTable.ExternalRecordFilter пересекаются до собственных фильтров и агрегации таблицы; книга регистрирует свой callback среза независимо, поэтому не перезаписывает предикат вызывающего
Callback'и получают индексы записей с отсчётом от нуля, фиксируются снимком на каждый вызов Make и не сериализуются и не копируются AssignPivotOnly; владельцы и цели callback'ов остаются собственностью вызывающего и должны переживать свою регистрацию