Aggiornamento transazionale della cache pivot
La versione 2.384.92 aggiorna sorgenti pivot locali rettangolari, con nome definito e a tabella, senza cambiare gli oggetti campo esistenti, gli oggetti shared item o gli indici logici dei membri; tutte le viste della tabella pivot che condividono la cache continuano a riferirsi agli stessi membri
Aggiornamento del workbook
Workbook.Recalculate;
if Workbook.RefreshPivotCache(Pivot.CacheId) <> 1 then
raise Exception.Create('Pivot cache refresh failed');
TXLSXWorkbook.RefreshPivotCache restituisce 1 dopo un aggiornamento riuscito e -1 quando cache, sorgente, schema o valori della sorgente non possono essere aggiornati; legge i valori correnti delle celle, quindi ricalcola prima il workbook quando le formule della sorgente devono essere valutate
Una sorgente rettangolare usa un foglio di lavoro locale esistente e una riga di intestazione; SourceFirstRow, SourceFirstCol, SourceLastRow e SourceLastCol usano coordinate inclusive a base uno, e la prima riga fornisce i nomi dei campi
Sorgenti con nome definito e a tabella
Quando SourceIsNamedRange=True, SourceName identifica un nome definito oppure un nome di tabella o di visualizzazione univoco; l'aggiornamento e la materializzazione ne risolvono la geometria corrente a ogni chiamata, preservando l'identità della sorgente memorizzata nella cache
SourceRangeSheet fornisce il contesto del foglio di lavoro per un nome definito locale; quell'ambito ha precedenza su un nome del workbook con la stessa ortografia, e in caso contrario la risoluzione usa l'ambito del workbook senza scegliere un nome locale non correlato
Un nome definito deve contenere un solo rettangolo assoluto esplicitamente qualificato con foglio di lavoro; sono supportati i nomi di foglio tra apici e Unicode, mentre riferimenti relativi, unioni, alias, formule, riferimenti esterni e collisioni ambigue nome/tabella vengono rifiutati prima della mutazione
Una tabella deve conservare una riga di intestazione; i record seguono la sua estensione corrente ed escludono un'eventuale riga dei totali reale, mentre i controlli di collisione proteggono l'intera tabella inclusi i suoi totali; una tabella con sola intestazione fornisce zero record
L'appartenenza fisica ai totali segue il totalsRowCount memorizzato, il cui valore assente significa zero; un solo suggerimento UI dei totali non rimuove una riga di dati, e il salvataggio scrive esplicitamente l'appartenenza reale
Per una riga dei totali creata dall'autore, fornisci metadati e contenuti validi dei totali di colonna tramite ColumnTotalsRowLabels, ColumnTotalsRowFunctions e ColumnTotalsRowFormulas; impostare TotalsRowShown=True non crea formule dei totali né forza i valori delle celle
Gli spostamenti di fogli di lavoro conservano l'ambito locale dei nomi, e le rinomine aggiornano i riferimenti locali supportati e il contesto della sorgente pivot preservando i riferimenti esterni non correlati e l'XML opaco della cache importata; il salvataggio dei nomi definiti rimuove un eventuale segno uguale iniziale della formula senza cambiare la formula in memoria
Le intestazioni corrispondono ai campi del database esistenti per nome senza distinzione tra maiuscole e minuscole; riordinare le colonne della sorgente preserva gli indici logici dei campi, mentre campi sorgente duplicati, rinominati, mancanti o extra vengono rifiutati; le intestazioni vuote usano il fallback esistente FieldN
Le celle sorgente vuote restano vuote senza essere aggiunte alla raccolta delle celle del foglio di lavoro; le sorgenti con sola intestazione producono zero record conservando i membri storici
Membri stabili e viste condivise
Gli shared item esistenti conservano i loro indici e identità di oggetto, e i nuovi valori tipizzati si aggiungono al dominio; riordinare, rimuovere e reintrodurre in seguito membri della sorgente preserva gli elementi nascosti, le selezioni di pagina, i riferimenti a elementi di base e le mappature di gruppo esplicite che già identificano quei membri
Tutte le viste che condividono una cache vedono i record aggiornati; i membri storici assenti restano nel dominio della cache ma non creano da soli righe di aggregato, perché TXLSPivotTable.Make costruisce i risultati dai record correnti
I membri storici vengono conservati indipendentemente da MissingItemsLimit; questo percorso di aggiornamento non epura i membri mancanti, non applica un limite di membri trattenuti e non rinumera gli indici di selezione
I valori numerici, di data, Boolean, testuali, vuoti e gli errori rappresentabili conservano i loro tipi attraverso l'aggiornamento e il salvataggio XLSX; i flag di contenuto degli shared item e i confini rappresentabili vengono ricalcolati dal dominio conservato e dalle nuove aggiunte
Il salvataggio completa gli elenchi dei membri delle viste aggiornate prima degli elementi finali dei subtotali, preservando l'ordine esistente, i flag nascosti e le estensioni di layout importate; le selezioni di pagina vengono mappate tra i membri logici della cache e le posizioni memorizzate in ogni vista, quindi elenchi di membri riordinati selezionano comunque lo stesso membro dopo la riapertura
Campi e gruppi calcolati
I campi calcolati non consumano colonne della sorgente; i loro nomi, formule e domini di shared item restano disponibili, mentre ogni record aggiornato parte con un segnaposto vuoto per quei campi; Make valuta le formule calcolate supportate dai valori correnti della sorgente
I record della cache XLSX memorizzano solo i campi del database; salvataggio e riapertura preservano l'allineamento alle colonne della sorgente anche quando i campi calcolati compaiono tra i campi del database
Il raggruppamento numerico e per data su un campo della sorgente può accettare nuovi membri; il raggruppamento discreto esplicito accetta membri esistenti riordinati ma rifiuta un nuovo membro privo di mappatura esplicita, preservando l'intera cache precedente
La versione 2.384.94 ricostruisce i campi raggruppati derivati fissi supportati dai collegamenti base/parent validati; l'espansione automatica del dominio, i membri discreti senza mappatura e i campi member-property vengono rifiutati in modo transazionale, mentre le sorgenti esterne e OLAP restano fuori dal contratto delle sorgenti locali; vedi i confini delle cache raggruppate
Aggiornamenti atomici e refresh tramite callback
Validazione della sorgente, lettura, conversione dei tipi, allocazione dei record e lookup dei membri si completano in dati di staging scollegati; un fallimento lascia intatti gli handle attivi di campi ed elementi, i record, i metadati, lo stato di replay grezzo e tutte le viste condivise
Il successo sostituisce i buffer di record e lookup, disabilita il replay grezzo della cache, aggiorna RefreshedDate e imposta RefreshOnLoad=False; il salvataggio usa la cache tipizzata aggiornata invece di riprodurre la sua precedente rappresentazione grezza
Il codice standalone o basato su Classic può usare la stessa implementazione di staging tramite TXLSPivotCache.RefreshFromSource; il suo reader riceve coordinate della sorgente a base uno e restituisce un Variant, e i fallimenti di validazione o del reader sollevano un'eccezione
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 a un argomento richiede un rettangolo locale concreto nella cache; l'overload con confini espliciti legge un rettangolo locale risolto dal chiamante senza cambiare l'identità della sorgente denominata o a tabella della cache, e i chiamanti restano responsabili di risolvere correttamente quella identità
L'aggiornamento della cache aggiorna i dati della cache; le applicazioni possono chiamare Make con il proprio writer dei risultati oppure MaterializePivotTable per un output protetto nel foglio di lavoro; la selezione tipizzata dei Slicer pivot non-OLAP è disponibile per i binding importati supportati, mentre il layout nativo completo resta un lavoro separato