Timelines Pivot et états de données des slicers
Disponible depuis la version 2.384.98 pour les tableaux croisés dynamiques locaux non OLAP pris en charge, via la facade du classeur XLSX
Créer et connecter une Timeline
TimelineCache := Workbook.CreatePivotTimelineCache(Pivot, 'EventDate');
if TimelineCache = nil then
raise Exception.Create('The Timeline cache was rejected');
TimelineView := ReportSheet.Timelines.Add(TimelineCache, 2, 7, 7, 12);
if TimelineView = nil then
raise Exception.Create('The Timeline view was rejected');
if TimelineCache.SetDateRange(EncodeDate(2026, 1, 1),
EncodeDate(2026, 1, 31)) < 0 then
raise Exception.Create('The Timeline selection was rejected');
TXLSXWorkbook.CreatePivotTimelineCache(ATable: TXLSPivotTable; const AFieldName: WideString): TXLSXTimelineCache crée ou réutilise un cache de champ de date validé ainsi que les identités de package requises ; un échec renvoie nil avant de valider l'état mis en staging
TXLSXWorkbook.TimelineCaches expose TXLSXTimelineCaches, avec Count, des Items[Index] en base zéro et un FindByName insensible à la casse ; le classeur est propriétaire de ces caches
TXLSXTimelineCache.Name identifie le cache, SourceName identifie son champ source et IsNonOlapPivot identifie la liaison validée prise en charge ; les caches importés non pris en charge conservent leur XML d'origine
TXLSXTimelineCache.ConnectPivotTable(ATable: TXLSPivotTable): Integer connecte une autre vue détenue du même PivotCache avec un champ de date compatible ; il renvoie 1 en cas de succès, connexion existante comprise, ou -1 en cas de refus
TXLSXTimelineCache.SetDateRange(AStartDate, AEndDate: TDateTime): Integer utilise des bornes de journées entières inclusives et renvoie 1 ou -1 ; les bornes doivent être des dates entières, du 1er janvier 1900 au 31 décembre 9999, dans l'ordre croissant
Le classeur pris en charge utilise le système de date 1900 ; une création en Date1904 et des bornes de sélection fractionnaires sont rejetées, tandis que les valeurs de dates sources peuvent conserver une heure du jour et les enregistrements de toute la journée de fin sélectionnée restent éligibles
TXLSXTimelineCache.SelectionActive, StartDate et EndDate exposent les bornes actives ; ClearSelection: Integer les efface sans toucher aux autres filtres et renvoie 1 ou -1
Les sélections s'intersectent avec les autres slicers, les filtres manuels ou de page et les prédicats de l'appelant ; ces opérations n'actualisent pas les caches sources, ne recalculent pas les formules et ne réécrivent pas les cellules de rapport existantes de la feuille
Vues Timeline et suppression
TXLSXWorksheet.Timelines expose la collection TXLSXTimelines détenue par la feuille, avec Add, FindByName, des Items[Index] en base zéro, Count, Delete(Index) et Clear ; la suppression retire l'UI tout en conservant son cache et sa sélection partagés
TXLSXTimelines.Add(ACache: TXLSXTimelineCache; ARow1, ACol1, ARow2, ACol2: Integer): TXLSXTimeline accepte un cache pris en charge détenu et un rectangle de feuille ordonné en base un, et renvoie une vue détenue ou nil
TXLSXTimeline.Name est en lecture seule, Cache identifie son cache partagé, et Caption change l'étiquette d'affichage ; Level accepte 0 pour les années, 1 pour les trimestres, 2 pour les mois ou 3 pour les jours
TXLSXTimeline.SetBounds change le rectangle en base un exposé par FromRow, FromCol, ToRow et ToCol ; une géométrie invalide, des liaisons non prises en charge ou une géométrie de dessin groupée lèvent une exception avant mutation
TXLSXDrawingObject.Timeline renvoie la vue associée pour le type de dessin xlsxDrawingTimeline ; les transformations de dessin non prises en charge directes restent protégées
Status := Workbook.RemoveTimelineCache(TimelineCache, xlsxSlicerPreserveCurrentSelection);
TXLSXWorkbook.RemoveTimelineCache(ACache: TXLSXTimelineCache; AMode: TXLSXSlicerRemovalMode): Integer met en staging ensemble les filtres connectés, l'UI, les noms et le nettoyage du package, puis renvoie 1 ou -1
xlsxSlicerClearSelection supprime la sélection ; xlsxSlicerPreserveCurrentSelection ne conserve une sélection active comme comparaison de dates à la journée entière que si le champ de date se trouve déjà sur un axe de lignes ou de colonnes dans chaque vue connectée
Un champ de date inutilisé ou réservé aux pages rejette atomiquement la suppression avec préservation de sélection ; utilisez une suppression avec effacement explicite de la sélection quand ce comportement est recherché
Les filtres importés ne se normalisent qu'après validation de chaque connexion, de chaque espace de noms hérité et de la provenance exacte des filtres détenus ; des attributs ou enfants opaques du même champ, des espaces de noms étrangers, des liaisons externes et des graphes multi-UI non pris en charge conservent leur XML et rejettent toute mutation
La matérialisation native met en staging la sélection courante de la Timeline avec les métadonnées et cellules du rapport, en ne retirant que la signature exacte du filtre détenu enregistré ; les restrictions arbitraires de callbacks n'ont pas de représentation XML native et ne peuvent pas être reproduites par une actualisation Excel
L'enregistrement OOXML préserve les types de relations natifs, les chemins d'origine et les extensions sans rapport ; l'enregistrement Strict réservé aux caches est rejeté, la conversion ODS signale la perte de la Timeline et le sous-ensemble valeurs-et-styles XLSB rejette les Timelines
Actualisation explicite de l'état de données des slicers natifs
function TXLSXSlicerCache.RefreshItemDataStates: Integer; overload; function TXLSXSlicerCache.RefreshItemDataStates( AMaxEvaluationSteps: Integer; ACancelFlag: PBoolean = nil): Integer; overload;
L'opération évalue et met en staging le vecteur natif complet sans données, puis valide sous une garde d'écriture du classeur ; le succès renvoie 1, le refus renvoie -1 sans modifier les indicateurs d'éléments sérialisés ni les sélections
Il ignore la propre sélection de ce slicer tout en intersectant les sélections des autres slicers et Timelines, les filtres manuels ou de page, les filtres d'agrégats pris en charge et les prédicats de l'appelant ; la disponibilité est l'union sur les vues connectées prises en charge
Les membres historiques sélectionnés sans enregistrements éligibles reçoivent l'indicateur natif sans données tout en conservant leur sélection ; les IDs stables de cache, l'ordre filaire d'origine des éléments et le XML sans rapport restent intacts
La limite cumulative par défaut est de 1000000 pas ; zéro signifie des pas illimités, une valeur négative est rejetée et FormulaArrayMemoryLimit borne cumulativement la mise en staging des métadonnées plus toutes les prévisualisations des vues connectées
Une annulation, des exceptions ou réentrances de callbacks, des vues figées, des liaisons non prises en charge, des budgets épuisés ou un état d'évaluation modifié sont rejetés avant la validation des indicateurs ; les changements indépendants du modèle commun opérés par les callbacks de l'appelant restent la responsabilité de l'appelant et provoquent le refus de l'actualisation
TXLSXSlicerCache.CrossFilter lit et écrit le réglage natif tabulaire de cross-filter sous la garde de mutation ; showItemsWithDataAtTop active l'ordre natif données-d'abord sans réécrire l'ordre filaire des éléments
ItemHasData reste une requête en lecture seule ; l'enregistrement n'appelle pas l'évaluateur et ne met pas à jour implicitement les indicateurs sans données, donc appelez RefreshItemDataStates explicitement avant d'enregistrer quand l'état UI natif doit être actualisé
Sémantique avancée des filtres de dates
TXLSPivotFilter.UseWholeDay demande des comparaisons de dates à la journée entière pour les filtres de dates pris en charge ; les sélections préservées générées par Timeline l'utilisent, tandis que les filtres de dates ordinaires conservent leur comportement précédent sensible à l'heure
Voir la sortie Pivot native et la disponibilité en lecture seule des slicers ainsi que le cycle de vie local du cache et des slicers pour les contrats d'actualisation et de possession englobants