Документация HotXLS

Транзакционное обновление кэша сводной таблицы

Версия 2.384.92 обновляет локальные источники сводных таблиц — прямоугольные диапазоны, определённые имена и таблицы — не меняя существующие объекты полей, объекты общих элементов или логические индексы элементов; все представления сводных таблиц, разделяющие кэш, продолжают ссылаться на те же элементы

Обновление на уровне книги

Workbook.Recalculate;
if Workbook.RefreshPivotCache(Pivot.CacheId) <> 1 then
  raise Exception.Create('Pivot cache refresh failed');

TXLSXWorkbook.RefreshPivotCache возвращает 1 после успешного обновления и -1, когда кэш, источник, схема или значения источника не могут быть обновлены; метод читает текущие значения ячеек, поэтому при необходимости вычисления исходных формул сначала пересчитайте книгу

Прямоугольный источник использует существующий локальный лист и строку заголовков; SourceFirstRow, SourceFirstCol, SourceLastRow и SourceLastCol задаются включающими координатами с отсчётом от 1, а первая строка поставляет имена полей

Источники: определённые имена и таблицы

Когда SourceIsNamedRange=True, SourceName идентифицирует определённое имя либо уникальное имя или отображаемое имя таблицы; обновление и материализация разрешают её текущую геометрию при каждом вызове, сохраняя идентичность источника, записанную в кэше

SourceRangeSheet поставляет контекст листа для локального определённого имени; эта область имеет приоритет над именем книги с тем же написанием, а иначе разрешение использует область книги, не подбирая случайное локальное имя

Определённое имя должно содержать один явно квалифицированный листом абсолютный прямоугольник; имена листов в кавычках и Unicode поддерживаются, а относительные ссылки, объединения, псевдонимы, формулы, внешние ссылки и неоднозначные коллизии имени и таблицы отклоняются до изменения

Таблица должна сохранять строку заголовков; записи следуют её текущим размерам и исключают настоящую строку итогов, а проверки коллизий защищают всю таблицу, включая итоги; таблица только с заголовком поставляет ноль записей

Фактическое членство итогов следует за сохранённым totalsRowCount, отсутствие которого означает ноль; один лишь признак итогов в UI не убирает строку данных, а сохранение записывает фактическое членство явно

Для авторской строки итогов предоставьте корректные метаданные итогов столбцов и содержимое листа через ColumnTotalsRowLabels, ColumnTotalsRowFunctions и ColumnTotalsRowFormulas; установка TotalsRowShown=True не создаёт формул итогов и не приводит значения ячеек

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

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

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

Стабильные элементы и общие представления

Существующие общие элементы сохраняют индексы и идентичности объектов, а новые типизированные значения дописываются в домен; перестановка, удаление и повторное появление исходных элементов сохраняет скрытые элементы, выборки страниц, ссылки на базовые элементы и явные сопоставления групп, которые уже указывают на эти элементы

Все представления, разделяющие один кэш, видят обновлённые записи; отсутствующие исторические элементы остаются в домене кэша, но сами по себе не создают строк агрегатов, потому что TXLSPivotTable.Make строит результат из текущих записей

Исторические элементы сохраняются независимо от MissingItemsLimit; этот путь обновления не вычищает отсутствующие элементы, не соблюдает лимит удерживаемых элементов и не перенумеровывает индексы выборок

Числовые, датные, Boolean, текстовые, пустые и представимые ошибочные значения сохраняют типы при обновлении и сохранении XLSX; флаги содержимого общих элементов и представимые границы пересчитываются по удерживаемому и заново дописанному домену

Сохранение завершает обновлённые списки элементов представлений до конечных элементов промежуточных итогов, сохраняя существующий порядок, флаги скрытия и импортированные расширения раскладки; выборки страниц отображаются между логическими элементами кэша и позициями, записанными в каждом представлении, поэтому переставленные списки элементов после повторного открытия выбирают тот же элемент

Вычисляемые и группированные поля

Вычисляемые поля не потребляют исходные столбцы; их имена, формулы и домены общих элементов остаются доступны, при этом каждая обновлённая запись стартует с пустой заглушки для этих полей; Make вычисляет поддерживаемые вычисляемые формулы по текущим значениям источника

Записи кэша XLSX хранят только поля базы; сохранение и повторное открытие сохраняют выравнивание по исходным столбцам, даже когда вычисляемые поля стоят между полями базы

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

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

Атомарные обновления и обновление через callback

Проверка источника, чтение, преобразование типов, выделение записей и поиск элементов завершаются в отсоединённых промежуточных данных; сбой оставляет живыми дескрипторы полей и элементов, записи, метаданные, состояние воспроизведения сырых данных и все общие представления

Успех замещает буферы записей и поиска, отключает воспроизведение сырых данных кэша (raw replay), обновляет RefreshedDate и выставляет RefreshOnLoad=False; сохранение использует обновлённый типизированный кэш, а не воспроизводит прежнее представление сырых данных

Автономный или опирающийся на Classic код может использовать ту же staging-реализацию через TXLSPivotCache.RefreshFromSource; его читатель получает исходные координаты с отсчётом от 1 и возвращает Variant, а ошибки проверки или читателя приводят к исключению

TlxPivotSourceCellValue = function(ARow, ACol: Integer): Variant of object;
procedure TXLSPivotCache.RefreshFromSource(AValueReader: TlxPivotSourceCellValue);
procedure TXLSPivotCache.RefreshFromSource(AValueReader: TlxPivotSourceCellValue;
  AFirstRow, AFirstCol, ALastRow, ALastCol: Integer);

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

Обновление кэша обновляет данные кэша; приложения могут вызвать Make со своим писателем результата или MaterializePivotTable для защищённого вывода на лист; типизированный выбор в не-OLAP срезах сводных таблиц доступен для поддерживаемых импортированных привязок, а полноценная нативная раскладка остаётся отдельной работой