Actualisation transactionnelle du cache Pivot
La version 2.384.92 actualise les sources Pivot locales rectangulaires, noms définis et tables sans modifier les objets de champs existants, les objets d'éléments partagés ni les index logiques de membres ; toutes les vues de tableau croisé dynamique partageant le cache continuent de pointer vers les mêmes membres
Actualisation du classeur
Workbook.Recalculate;
if Workbook.RefreshPivotCache(Pivot.CacheId) <> 1 then
raise Exception.Create('Pivot cache refresh failed');
TXLSXWorkbook.RefreshPivotCache renvoie 1 après une actualisation réussie et -1 quand le cache, la source, le schéma ou les valeurs sources ne peuvent pas être actualisés ; il lit les valeurs de cellules courantes, donc recalculez d'abord le classeur quand les formules sources doivent être évaluées
Une source rectangulaire utilise une feuille de calcul locale existante et une ligne d'en-tête ; SourceFirstRow, SourceFirstCol, SourceLastRow et SourceLastCol emploient des coordonnées inclusives en base un, et la première ligne fournit les noms de champs
Sources par nom défini et par table
Quand SourceIsNamedRange=True, SourceName désigne un nom défini, un nom de table unique ou un nom d'affichage ; l'actualisation et la matérialisation résolvent sa géométrie courante à chaque appel tout en préservant l'identité de source stockée dans le cache
SourceRangeSheet fournit le contexte de feuille de calcul d'un nom défini local ; cette portée prime sur un nom de classeur de même orthographe, et sinon la résolution passe par la portée du classeur sans choisir un nom local sans rapport
Un nom défini doit contenir un seul rectangle absolu explicitement qualifié par feuille de calcul ; les noms de feuilles entre guillemets et Unicode sont pris en charge, tandis que les références relatives, unions, alias, formules, références externes et collisions ambiguës nom/table sont rejetées avant toute mutation
Une table doit conserver une ligne d'en-tête ; les enregistrements suivent son étendue courante et excluent une vraie ligne de totaux, tandis que les vérifications de collision protègent la table entière, totaux compris ; une table réduite à son en-tête fournit zéro enregistrement
L'appartenance physique aux totaux suit le totalsRowCount stocké, dont l'absence vaut zéro ; une simple indication UI de totaux ne supprime pas une ligne de données, et l'enregistrement écrit explicitement l'appartenance réelle
Pour une ligne de totaux saisie, fournissez des métadonnées de totaux de colonnes valides et un contenu de feuille via ColumnTotalsRowLabels, ColumnTotalsRowFunctions et ColumnTotalsRowFormulas ; régler TotalsRowShown=True ne crée pas de formules de totaux ni ne contraint les valeurs de cellules
Les déplacements de feuilles conservent la portée locale des noms, et les renommages de feuilles mettent à jour les références locales prises en charge et le contexte de source Pivot tout en préservant les références externes sans rapport et le XML de cache importé opaque ; l'enregistrement des noms définis retire un signe égal de formule optionnel en tête sans modifier la formule en mémoire
Les en-têtes correspondent aux champs de base de données existants par nom, sans sensibilité à la casse ; réordonner les colonnes sources préserve les index logiques de champs, tandis que des champs sources dupliqués, renommés, absents ou superflus sont rejetés ; les en-têtes vides utilisent le repli FieldN existant
Les cellules sources vides restent vides sans être ajoutées à la collection de cellules de la feuille ; les sources réduites à l'en-tête produisent zéro enregistrement tout en conservant les membres historiques
Membres stables et vues partagées
Les éléments partagés existants gardent leurs index et identités d'objets, et les nouvelles valeurs typées s'ajoutent au domaine ; réordonner, supprimer puis réintroduire des membres sources préserve les éléments masqués, les sélections de page, les références d'éléments de base et les mappages de groupes explicites qui désignent déjà ces membres
Toutes les vues partageant un cache voient les enregistrements actualisés ; les membres historiques absents restent dans le domaine du cache mais ne créent pas seuls de lignes d'agrégats, car TXLSPivotTable.Make construit les résultats à partir des enregistrements courants
Les membres historiques sont conservés quelle que soit la valeur de MissingItemsLimit ; ce chemin d'actualisation ne purge pas les membres manquants, n'applique pas de limite de membres conservés et ne renumérote pas les index de sélection
Les valeurs numériques, dates, Boolean, texte, vides et erreurs représentables conservent leurs types lors de l'actualisation et de l'enregistrement XLSX ; les indicateurs de contenu des éléments partagés et les bornes représentables sont recalculés à partir du domaine conservé et des nouveaux ajouts
L'enregistrement complète les listes de membres des vues actualisées avant les éléments de sous-totaux en fin de liste tout en préservant l'ordre existant, les indicateurs masqués et les extensions de disposition importées ; les sélections de page font la correspondance entre les membres logiques du cache et les positions stockées dans chaque vue, si bien que des listes de membres réordonnées sélectionnent toujours le même membre après réouverture
Champs et groupes calculés
Les champs calculés ne consomment pas de colonnes sources ; leurs noms, formules et domaines d'éléments partagés restent disponibles, tandis que chaque enregistrement actualisé démarre avec un espace réservé vide pour ces champs ; Make évalue les formules calculées prises en charge à partir des valeurs sources courantes
Les enregistrements de cache XLSX ne stockent que les champs de base de données ; l'enregistrement et la réouverture préservent l'alignement des colonnes sources même quand des champs calculés s'intercalent entre des champs de base de données
Le regroupement numérique et de dates sur un champ source peut accepter de nouveaux membres ; le regroupement discret explicite accepte des membres existants réordonnés mais refuse un nouveau membre sans mappage explicite, en préservant l'intégralité du cache précédent
La version 2.384.94 reconstruit les champs groupés dérivés fixes pris en charge à partir de liens base/parent validés ; l'expansion automatique de domaine, les membres discrets non mappés et les champs de propriétés de membres sont rejetés transactionnellement, tandis que les sources externes et OLAP restent hors du contrat de sources locales ; voir les limites des caches groupés
Mises à jour atomiques et actualisation par callback
La validation de source, la lecture, la conversion de types, l'allocation d'enregistrements et la recherche de membres s'achèvent dans des données de staging détachées ; un échec laisse intacts les handles de champs et d'éléments actifs, les enregistrements, les métadonnées, l'état de replay brut et toutes les vues partagées
Le succès remplace les tampons d'enregistrements et de recherche, désactive le replay brut du cache, met à jour RefreshedDate et règle RefreshOnLoad=False ; l'enregistrement utilise le cache typé actualisé au lieu de rejouer sa représentation brute précédente
Le code autonome ou adossé à Classic peut utiliser la même implémentation de staging via TXLSPivotCache.RefreshFromSource ; son reader reçoit des coordonnées sources en base un et renvoie un Variant, et les échecs de validation ou du reader lèvent une exception
TlxPivotSourceCellValue = function(ARow, ACol: Integer): Variant of object;
procedure TXLSPivotCache.RefreshFromSource(AValueReader: TlxPivotSourceCellValue); procedure TXLSPivotCache.RefreshFromSource(AValueReader: TlxPivotSourceCellValue; AFirstRow, AFirstCol, ALastRow, ALastCol: Integer);
L'overload à un argument exige un rectangle local concret dans le cache ; l'overload à bornes explicites lit un rectangle local résolu par l'appelant sans modifier l'identité de source nommée ou tabulaire du cache, et les appelants restent responsables de résoudre correctement cette identité
L'actualisation du cache met à jour les données du cache ; les applications peuvent appeler Make avec leur propre writer de résultats ou MaterializePivotTable pour une sortie de feuille protégée ; la sélection typée de slicer Pivot non OLAP est disponible pour les liaisons importées prises en charge, tandis que la disposition native complète reste un travail séparé