Sélection de slicer Pivot non OLAP
La version 2.384.88 ajoute la sélection typée de membres aux caches de slicers Pivot non OLAP importés qui peuvent être liés à des champs de cache locaux ordinaires et à leurs vues de tableau croisé dynamique connectées
Inspecter et modifier une sélection
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 identifie la forme Pivot tabulaire ; TXLSXSlicerCache.ItemCount, TXLSXSlicerCache.ItemCacheIndex et TXLSXSlicerCache.ItemSelected exposent la liste de membres analysée et la sélection
Les positions de la liste de membres sont en base zéro ; chaque ItemCacheIndex identifie un membre partagé dans le champ du cache Pivot lié, donc les membres nombre, texte, Boolean, date, vide et erreur gardent des identités distinctes même quand leur texte affiché coïncide
TXLSXSlicerCacheItem stocke un CacheItemIndex: Integer et un Selected: Boolean ; TXLSXSlicerCacheItems est son type de tableau dynamique, tandis que le cache expose la sélection via des propriétés indexées en lecture seule
TXLSXSlicerCache.SetSelectedItems prend des indices de membres partagés et renvoie 1 en cas de succès ou -1 pour des liaisons non prises en charge, invalides ou dangereuses ; une sélection vide est rejetée car le format de fichier exige au moins un membre sélectionné
TXLSXSlicerCache.ClearSelection suit la même convention de statut et sélectionne tous les membres ; il retire cette contrainte de slicer tout en gardant les restrictions indépendantes sur les autres champs
Vues partagées et filtres existants
Les membres sélectionnés au sein d'un même cache de slicer forment une union ; les caches de slicers applicables s'intersectent pour chaque vue explicitement connectée, y compris quand le champ sélectionné est absent des axes affichés de cette vue ; plusieurs vues UI de slicer d'un même cache partagent la même sélection
Appelez TXLSPivotTable.Make avec le writer de résultats de l'application pour calculer les résultats courants ; les changements de sélection du cache ne réécrivent pas les cellules de la feuille et ne régénèrent pas chaque disposition native importée
Excel stocke les sélections de slicers non OLAP comme un masquage ordinaire de membres Pivot et une sélection de page ; le format n'enregistre pas quelle opération a créé un indicateur de masquage donné
Avant de modifier une liaison importée, HotXLS vérifie que ses anciens masques hidden et page du même champ correspondent à l'ancienne sélection effective du slicer ; les masques concordants sont traités comme gérés par le slicer, tandis que des masques incohérents ou ambigus sont rejetés sans deviner ; les filtres manuels, de page et avancés des autres champs restent actifs
Enregistrement et actualisation de la source
L'enregistrement met à jour ensemble la sélection du slicer et les masques de membres Pivot connectés, conserve les espaces de noms XML importés et les extensions inconnues, et remappe les connexions de feuilles vers leurs identités enregistrées ; les identifiants étendus de caches de slicers restent distincts des identifiants ordinaires de caches Pivot du classeur
L'actualisation locale du cache Pivot conserve les indices de membres partagés sélectionnés ; les sous-ensembles explicites excluent les nouveaux membres, tandis que des sélections effacées autorisent le domaine actualisé complet
Limites et comportement en cas d'échec
Les changements de sélection valident toutes les vues et tous les membres connectés avant le commit et emploient la garde de mutation du classeur ; un échec préserve la sélection existante, les restrictions de vues et le XML d'origine
L'ajout, la suppression et le vidage de caches de slicers emploient aussi la garde d'écriture du classeur ; une vue de classeur figée ne peut pas changer les résultats Pivot connectés par mutation de collections
Supprimer un cache Pivot non OLAP lié, ou vider une collection qui en contient un, est rejeté avant mutation ; l'opération explicite de cycle de vie RemoveSlicerCache supprime ses vues natives et efface ou transfère sa sélection vers des masques Pivot ordinaires
La sélection OLAP et de caches de tables, les champs sources groupés ou calculés, les connexions manquantes, les domaines incohérents et les masques importés ambigus d'un même champ restent hors de cette opération ; les contenus de cache non pris en charge conservent leur représentation d'origine
Cette API de sélection gère les caches de slicers Pivot importés et créés de façon prise en charge ; la création de vues partagées et la suppression explicite de caches sont disponibles en 2.384.94 ; la matérialisation sûre en feuille peut remplacer une sortie calculée prise en charge, tandis que l'évaluation d'affichage cross-filter sans données reste un travail séparé
Supprimer la dernière vue UI d'un cache non OLAP lié est rejeté avant toute modification de son dessin, de sa vue ou de son cache ; supprimer l'une de plusieurs vues UI conserve leur cache et leur sélection partagés
Vider les vues de slicers d'une feuille vérifie chaque cache affecté avant de supprimer la moindre vue ; une dernière vue liée provoque un rejet atomique, tandis que les vues partagées avec d'autres feuilles conservent leur cache et leur sélection
Filtres d'enregistrements supplémentaires
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 enregistre ou remplace un callback par propriétaire non nil, et TXLSPivotTable.ClearRecordFilter retire le callback de ce propriétaire ; passer un callback nil à SetRecordFilter le retire aussi
Les callbacks enregistrés et le TXLSPivotTable.ExternalRecordFilter facultatif s'intersectent avant les filtres et l'agrégation propres à la table ; le classeur enregistre son callback de slicer indépendamment, si bien qu'il n'écrase pas le prédicat de l'appelant
Les callbacks reçoivent des indices d'enregistrements en base zéro, sont photographiés à chaque appel de Make et ne sont ni sérialisés ni copiés par AssignPivotOnly ; les propriétaires et cibles de callbacks restent détenus par l'appelant et doivent survivre à leur enregistrement