Transaktionale Pivot-Cache-Aktualisierung
Version 2.384.92 aktualisiert lokale rechteckige Pivot-Quellen sowie Quellen als definierte Namen und Tabellen, ohne bestehende Feldobjekte, gemeinsame Elementobjekte oder logische Member-Indizes zu verändern; alle PivotTable-Views, die diesen Cache teilen, verweisen weiterhin auf dieselben Member
Arbeitsmappe aktualisieren
Workbook.Recalculate;
if Workbook.RefreshPivotCache(Pivot.CacheId) <> 1 then
raise Exception.Create('Pivot cache refresh failed');
TXLSXWorkbook.RefreshPivotCache liefert 1 nach erfolgreicher Aktualisierung und -1, wenn Cache, Quelle, Schema oder Quellwerte nicht aktualisiert werden können; es liest aktuelle Zellwerte, berechnen Sie die Arbeitsmappe also zuerst neu, wenn Quellformeln ausgewertet werden müssen
Eine rechteckige Quelle nutzt ein vorhandenes lokales Arbeitsblatt und eine Kopfzeile; SourceFirstRow, SourceFirstCol, SourceLastRow und SourceLastCol verwenden inklusive 1-basierte Koordinaten, und die erste Zeile liefert die Feldnamen
Quellen als definierte Namen und Tabellen
Wenn SourceIsNamedRange=True, identifiziert SourceName einen definierten Namen oder einen eindeutigen Tabellen- oder Anzeigenamen; Aktualisierung und Materialisierung lösen seine aktuelle Geometrie bei jedem Aufruf auf und behalten dabei die im Cache gespeicherte Quellidentität
SourceRangeSheet liefert den Arbeitsblattkontext für einen lokalen definierten Namen; dieser Scope hat Vorrang vor einem Arbeitsmappennamen mit derselben Schreibweise, andernfalls nutzt die Auflösung den Arbeitsmappenscope, ohne einen nicht verwandten lokalen Namen zu wählen
Ein definierter Name muss genau ein explizit arbeitsblattqualifiziertes absolutes Rechteck enthalten; gequotete und Unicode-Arbeitsblattnamen werden unterstützt, während relative Referenzen, Vereinigungen, Aliase, Formeln, externe Referenzen und mehrdeutige Name/Tabellen-Kollisionen vor der Veränderung zurückgewiesen werden
Eine Tabelle muss eine Kopfzeile behalten; Records folgen ihrer aktuellen Ausdehnung und schließen eine echte Ergebniszeile aus, während Kollisionsprüfungen die gesamte Tabelle einschließlich ihrer Ergebniszeile schützen; eine Tabelle nur mit Kopfzeile liefert null Records
Die physische Ergebniszeilen-Mitgliedschaft folgt dem gespeicherten totalsRowCount, dessen fehlender Wert null bedeutet; ein bloßer Ergebniszeilen-UI-Hinweis entfernt keine Datenzeile, und das Speichern schreibt die tatsächliche Mitgliedschaft explizit
Für eine verfasste Ergebniszeile liefern Sie gültige Spaltenergebnis-Metadaten und Arbeitsblattinhalte über ColumnTotalsRowLabels, ColumnTotalsRowFunctions und ColumnTotalsRowFormulas; das Setzen von TotalsRowShown=True erzeugt keine Ergebnisformeln und koerziert keine Zellwerte
Arbeitsblattverschiebungen behalten den lokalen Namensscope, und Arbeitsblattumbenennungen aktualisieren unterstützte lokale Referenzen und den Pivot-Quellkontext, während nicht verwandte externe Referenzen und opakes importiertes Cache-XML erhalten bleiben; das Speichern definierte Namen entfernt ein optionales führendes Formel-Gleichheitszeichen, ohne die In-Memory-Formel zu ändern
Kopfzeilen werden namensbasiert mit bestehenden Datenbankfeldern abgeglichen, ohne Groß-/Kleinschreibung; das Umordnen von Quellspalten erhält logische Feldindizes, während doppelte, umbenannte, fehlende oder zusätzliche Quellfelder zurückgewiesen werden; leere Kopfzeilen nutzen den bestehenden FieldN-Fallback
Leere Quellzellen bleiben leer, ohne der Arbeitsblatt-Zellsammlung hinzugefügt zu werden; Quellen nur mit Kopfzeile liefern null Records und behalten dabei historische Member
Stabile Member und geteilte Views
Vorhandene gemeinsame Elemente behalten ihre Indizes und Objektidentitäten, und neue typisierte Werte werden an die Domäne angehängt; Umordnen, Entfernen und späteres Wiedereinführen von Quellmembern erhält versteckte Elemente, Seitenauswahlen, Basiselement-Referenzen und explizite Gruppenzuordnungen, die diese Member bereits identifizieren
Alle Views, die einen Cache teilen, sehen die aktualisierten Records; fehlende historische Member bleiben in der Cache-Domäne, erzeugen aber nicht selbst Aggregatzeilen, weil TXLSPivotTable.Make Ergebnisse aus den aktuellen Records baut
Historische Member werden unabhängig von MissingItemsLimit behalten; dieser Aktualisierungspfad entfernt keine fehlenden Member, setzt kein Member-Limit durch und nummeriert Auswahlindizes nicht um
Numerische, Datums-, Boolean-, Text-, Leer- und darstellbare Fehlerwerte behalten ihre Typen über Aktualisierung und XLSX-Speichern hinweg; Shared-Item-Inhaltsflags und darstellbare Grenzen werden aus der behaltenen und neu angehängten Domäne neu berechnet
Das Speichern vervollständigt aktualisierte View-Memberlisten vor nachgestellten Teilsummen-Elementen und behält dabei bestehende Reihenfolge, versteckte Flags und importierte Layout-Erweiterungen; Seitenauswahlen werden zwischen logischen Cache-Membern und den in jeder View gespeicherten Positionen gemappt, sodass umgeordnete Memberlisten nach dem Neuöffnen dasselbe Member wählen
Berechnete und gruppierte Felder
Berechnete Felder verbrauchen keine Quellspalten; ihre Namen, Formeln und Shared-Item-Domänen bleiben verfügbar, während jeder aktualisierte Record mit einem leeren Platzhalter für diese Felder beginnt; Make wertet unterstützte berechnete Formeln aus den aktuellen Quellwerten aus
XLSX-Cache-Records speichern nur Datenbankfelder; Speichern und Neuöffnen erhalten die Quellspaltenausrichtung, selbst wenn berechnete Felder zwischen Datenbankfeldern liegen
Numerische und Datumsgruppierung auf einem Quellfeld kann neue Member akzeptieren; explizite diskrete Gruppierung akzeptiert umgeordnete bestehende Member, weist aber ein neues Member ohne explizite Zuordnung zurück und erhält dabei den gesamten vorherigen Cache
Version 2.384.94 rekonstruiert unterstützte feste abgeleitete gruppierte Felder aus validierten Basis-/Eltern-Links; automatische Domänenerweiterung, nicht gemappte diskrete Member und Member-Property-Felder weisen transaktional zurück, während externe und OLAP-Quellen außerhalb des Lokalquellen-Kontrakts bleiben; siehe Grenzen des gruppierten Caches
Atomare Updates und Callback-Aktualisierung
Quellvalidierung, Lesen, Typkonvertierung, Record-Allokation und Member-Lookup laufen in abgekoppelten Staging-Daten ab; ein Fehlschlag lässt lebende Feld- und Element-Handles, Records, Metadaten, Raw-Replay-Zustand und alle geteilten Views intakt
Erfolg ersetzt Record- und Lookup-Puffer, deaktiviert Raw-Cache-Replay, aktualisiert RefreshedDate und setzt RefreshOnLoad=False; das Speichern nutzt den aktualisierten typisierten Cache, statt seine vorherige Raw-Repräsentation zu replayen
Eigenständiger oder Classic-unterstützter Code kann dieselbe Staging-Implementierung über TXLSPivotCache.RefreshFromSource nutzen; sein Reader erhält 1-basierte Quellkoordinaten und liefert einen Variant, und Validierungs- oder Reader-Fehler lösen eine Exception aus
TlxPivotSourceCellValue = function(ARow, ACol: Integer): Variant of object;
procedure TXLSPivotCache.RefreshFromSource(AValueReader: TlxPivotSourceCellValue); procedure TXLSPivotCache.RefreshFromSource(AValueReader: TlxPivotSourceCellValue; AFirstRow, AFirstCol, ALastRow, ALastCol: Integer);
Die Ein-Argument-Überladung erfordert ein konkretes lokales Rechteck im Cache; die Überladung mit expliziten Grenzen liest ein vom Aufrufer aufgelöstes lokales Rechteck, ohne die Identität der benannten oder Tabellenquelle des Caches zu ändern, und die Aufrufer bleiben dafür verantwortlich, diese Identität korrekt aufzulösen
Die Cache-Aktualisierung aktualisiert Cachedaten; Anwendungen können Make mit ihrem eigenen Result Writer oder MaterializePivotTable für geschützte Arbeitsblattausgabe aufrufen; typisierte nicht-OLAP-Pivot-Slicer-Auswahl ist für unterstützte importierte Bindungen verfügbar, während das vollständige native Layout separate Arbeit bleibt