Matérialisation sûre des Pivot en feuille
La version 2.384.90 ajoute l'évaluation Pivot isolée et le remplacement protégé des résultats en feuille ; la version 2.384.92 étend les sources locales prises en charge aux noms définis et aux tables résolus à chaque appel
Matérialiser une vue
if Workbook.RefreshPivotCache(Pivot.CacheId) <> 1 then
raise Exception.Create('Pivot cache refresh failed');
if Workbook.MaterializePivotTable(Pivot) <> 1 then
raise Exception.Create('Pivot output cannot be replaced safely');
TXLSXWorkbook.MaterializePivotTable(ATable: TXLSPivotTable): Integer calcule les résultats à partir du cache courant et les place aux FirstRow et FirstCol de la vue ; il renvoie 1 en cas de succès ou -1 pour des sources non prises en charge, des destinations dangereuses, un échec d'évaluation ou une mutation de classeur refusée
L'actualisation et le recalcul de feuille restent des opérations explicites ; une matérialisation réussie invalide les dépendances de calcul pour que les appelants recalculent les formules en aval au moment opportun
L'overload par défaut accepte les cellules de destination vides et les cellules inchangées précédemment détenues par la même vue ; des cellules occupées sans propriétaire, où que ce soit dans le rectangle de sortie complet, rejettent l'opération, y compris les trous que le writer de résultats ne remplit pas
if Workbook.MaterializePivotTable(Pivot, True) <> 1 then
raise Exception.Create('Existing Pivot values cannot be adopted safely');
TXLSXWorkbook.MaterializePivotTable(ATable: TXLSPivotTable; AAdoptExisting: Boolean): Integer peut adopter explicitement, lors de la première matérialisation, les cellules scalaires existantes à l'intérieur du rectangle précédent déclaré de la vue ; cela n'autorise pas le remplacement de formules, de membres de tableaux, de texte enrichi, de cellules porteuses de métadonnées ni de contenu hors de ce rectangle
Possession, redimensionnement et déplacement
La vue conserve les coordonnées exactes et des instantanés typés des valeurs pour les cellules écrites ; l'enregistrement XLSX préserve cette possession dans la définition Pivot, afin que les mises à jour ultérieures puissent la valider après réouverture
Un contenu typé modifié ou une cellule détenue non vide supprimée rejette la mise à jour entière ; les sous-types numériques partagent une représentation numérique canonique, tandis que texte, Boolean et erreurs gardent des identités distinctes
Rétrécir ou déplacer un résultat n'efface que les valeurs détenues inchangées qui ne sont plus produites ; les objets de cellules, le formatage et les commentaires existants restent disponibles, et les cellules sans rapport restent hors de l'ensemble possédé
Changer FirstRow ou FirstCol déplace la prochaine sortie tandis que les coordonnées de possession précédentes restent disponibles pour le nettoyage ; un résultat vide efface les valeurs détenues et conserve un emplacement réduit à l'ancre
Prévisualisation isolée
function TXLSPivotTable.MakePreview(AWriter: TlxPivotResultWriter): Integer; property TXLSPivotTable.EvaluationSourceTable: TXLSPivotTable;
TXLSPivotTable.MakePreview utilise des copies indépendantes du cache et de la vue, espaces réservés des champs calculés compris, puis les abandonne après l'évaluation ; le Make ordinaire conserve son comportement existant sur cache actif
Le writer reçoit des offsets de lignes et de colonnes en base zéro et des valeurs typées ; la valeur de retour suit le nombre de cellules d'agrégats de Make, distinct du nombre d'appels du writer ; un cache ou un writer absent renvoie zéro, et les exceptions d'évaluation ou du writer se propagent
Les prédicats d'enregistrements de l'appelant et les filtres de propriétaires enregistrés restent actifs dans les prévisualisations, sélections de slicer du classeur comprises ; les callbacks reçoivent la vue évaluée temporaire et son cache temporaire
TXLSPivotTable.EvaluationSourceTable renvoie la vue active pour une évaluation ordinaire et la vue active d'origine pour une prévisualisation ; utilisez-la quand un callback doit identifier une vue connectée, tout en lisant les enregistrements évalués depuis le Cache temporaire du callback
Les propriétaires de callbacks restent détenus par l'appelant ; les objets de prévisualisation et leurs enregistrements ne doivent pas être conservés après la fin du callback ou de l'appel de prévisualisation
Frontières de sécurité
La matérialisation exige une vue et un cache enregistrés dans le même classeur et une source locale prise en charge — rectangulaire, nom défini ou table ; la résolution de source suit les noms et étendues de tables courants, et des sources non prises en charge ou non résolues sont rejetées avant mutation
La géométrie source courante, les autres emplacements Pivot, les tables structurées, les plages de résultats de requêtes, les cellules fusionnées et les tableaux fixes ou dynamiques ne peuvent pas intersecter la nouvelle sortie ni les anciennes cellules détenues à nettoyer ; les totaux de table restent protégés même s'ils sont exclus des enregistrements du cache
La validation et la mise en staging de la sortie s'exécutent sous un bail de lecture, suivies par la garde de mutation ordinaire du classeur et la vérification de génération ; une vue de classeur en lecture seule figée refuse la matérialisation sans remplacer de cellules ni changer la géométrie
Les filtres doivent être en lecture seule et suivre le contrat ordinaire d'écriture unique du classeur ; l'isolation empêche les calculs de prévisualisation ordinaires de changer le cache actif, mais des écritures arbitraires de callback via des objets actifs capturés séparément ne peuvent pas être annulées
Cette opération matérialise la disposition de résultats calculés de la bibliothèque ; la création complète de dispositions Pivot natives, l'UI de slicer et l'évaluation d'affichage cross-filter sans données restent des capacités séparées