Transaktionell uppdatering av pivotcache
Version 2.384.92 uppdaterar lokala Pivot-källor av typen rektangel, definierat namn och tabell utan att befintliga fältobjekt, delade objekt eller logiska medlemsindex ändras; alla pivottabellvyer som delar cachen fortsätter att peka på samma medlemmar
Arbetsboksuppdatering
Workbook.Recalculate;
if Workbook.RefreshPivotCache(Pivot.CacheId) <> 1 then
raise Exception.Create('Pivot cache refresh failed');
TXLSXWorkbook.RefreshPivotCache returnerar 1 efter en lyckad uppdatering och -1 när cachen, källan, schemat eller källvärdena inte kan uppdateras; metoden läser aktuella cellvärden, så omberäkna arbetsboken först när källformler behöver utvärderas
En rektangulär källa använder ett befintligt lokalt kalkylblad och en rubrikrad; SourceFirstRow, SourceFirstCol, SourceLastRow och SourceLastCol använder inklusiva ettbaserade koordinater, och första raden bidrar med fältnamn
Källor med definierat namn och tabellkällor
När SourceIsNamedRange=True identifierar SourceName ett definierat namn eller ett unikt tabellnamn eller visningsnamn; uppdatering och materialisering slår fast dess aktuella geometri vid varje anrop, medan källidentiteten som lagrats i cachen bevaras
SourceRangeSheet tillhandahåller kalkylbladskontexten för ett lokalt definierat namn; det scopeet har företräde framför ett arbetsboksnamn med samma stavning, och i övrigt använder uppslagningen arbetsboksscopeat utan att välja ett orelaterat lokalt namn
Ett definierat namn måste innehålla exakt en uttryckligen bladkvalificerad absolut rektangel; citerade och Unicode-kalkylbladsnamn stöds, medan relativa referenser, föreningar, alias, formler, externa referenser och tvetydiga namn-/tabellkollisioner avslås innan någon ändring görs
En tabell måste behålla en rubrikrad; poster följer tabellens aktuella omfattning och exkluderar en verklig summorad, medan kollisionskontroller skyddar hela tabellen inklusive summorna; en tabell med bara rubrik bidrar med noll poster
Fysiskt summeradsmedlemskap följer den lagrade totalsRowCount, vars saknade värde betyder noll; enbart en UI-ledtråd om summerad tar inte bort en datarad, och sparandet skriver uttryckligen ut det faktiska medlemskapet
För en författad summerad, tillhandahåll giltig metadata för kolumnsummor och kalkylbladsinnehåll via ColumnTotalsRowLabels, ColumnTotalsRowFunctions och ColumnTotalsRowFormulas; att sätta TotalsRowShown=True skapar inga summerformler och tvingar inte fram cellvärden
Flytt av kalkylblad behåller det lokala namnscopeat, och namnbyte av kalkylblad uppdaterar stödda lokala referenser och Pivot-källkontext medan orelaterade externa referenser och ogenomskinlig importerad cache-XML bevaras; sparande av definierade namn tar bort ett valfritt inledande likhetstecken i formeln utan att formeln i minnet ändras
Rubriker matchas mot befintliga databasfält per namn utan skiftlägeskänslighet; omordning av källkolumner bevarar logiska fältindex, medan dubbletter, omdöpta, saknade eller extra källfält avslås; tomma rubriker använder den befintliga FieldN-reserven
Tomma källceller förblir tomma utan att läggas till i kalkylbladets cellsamling; källor med bara rubrik ger noll poster men behåller historiska medlemmar
Stabila medlemmar och delade vyer
Befintliga delade objekt behåller sina index och objektidentiteter, och nya typade värden läggs till i domänen; omordning, borttag och senare återinförande av källmedlemmar bevarar dolda objekt, sidval, basobjektreferenser och uttryckliga grupperingsmappningar som redan identifierar de medlemmarna
Alla vyer som delar en cache ser de uppdaterade posterna; frånvarande historiska medlemmar finns kvar i cachedomänen men skapar inte aggregeringsrader av sig själva, eftersom TXLSPivotTable.Make bygger resultat från aktuella poster
Historiska medlemmar behålls oavsett MissingItemsLimit; den här uppdateringsvägen rensar inte bort saknade medlemmar, tillämpar ingen gräns för behållna medlemmar och numrerar inte om valindex
Numeriska värden, datum, Boolean-värden, text, tomma värden och representerbara felvärden behåller sina typer genom uppdateringen och XLSX-sparningen; innehållsflaggorna för delade objekt och de representerbara gränserna räknas om från den behållna och nytilförda domänen
Sparandet fullbordar uppdaterade vy medlemslistor före avslutande delsummorposter medan befintlig ordning, dolda flaggor och importerade layouttillägg bevaras; sidval mappas mellan logiska cachemedlemmar och de positioner som lagrats i varje vy, så omordnade medlemslistor väljer fortfarande samma medlem efter återöppning
Beräknade och grupperade fält
Beräknade fält förbrukar inga källkolumner; deras namn, formler och delade objektdomäner finns kvar, medan varje uppdaterad post börjar med en tom platshållare för de fälten; Make utvärderar stödda beräknade formler från aktuella källvärden
XLSX cacheposter lagrar bara databasfält; sparande och återöppning bevarar källkolumnjusteringen även när beräknade fält förekommer mellan databasfält
Numerisk och datumbaserad gruppering på ett källfält kan acceptera nya medlemmar; uttrycklig diskret gruppering accepterar omordnade befintliga medlemmar men avslår en ny medlem utan uttrycklig mappning, med hela den tidigare cachen bevarad
Version 2.384.94 rekonstruerar stödda fasta härledda grupperade fält från validerade bas-/föräldralänkar; automatisk domänexpansion, omappade diskreta medlemmar och medlemsegenskapsfält avslås transaktionellt, medan externa och OLAP-källor förblir utanför det lokala källkontraktet; se gränser för grupperade cacher
Atomära uppdateringar och callback-uppdatering
Källvalidering, inläsning, typkonvertering, postallokering och medlemssökning fullbordas i fristående mellanlagringsdata; ett fel lämnar levande fält- och objekthandtag, poster, metadata, rått uppspelningstillstånd och alla delade vyer orörda
En lyckad körning ersätter post- och uppslagsbuffertar, inaktiverar rå cacheuppspelning, uppdaterar RefreshedDate och sätter RefreshOnLoad=False; sparandet använder den uppdaterade typade cachen i stället för att spela upp dess tidigare råa representation
Fristående eller Classic-baserad kod kan använda samma mellanlagringsimplementering via TXLSPivotCache.RefreshFromSource; dess läsare tar emot ettbaserade källkoordinater och returnerar en Variant, och validerings- eller läsfel utlöser ett undantag
TlxPivotSourceCellValue = function(ARow, ACol: Integer): Variant of object;
procedure TXLSPivotCache.RefreshFromSource(AValueReader: TlxPivotSourceCellValue); procedure TXLSPivotCache.RefreshFromSource(AValueReader: TlxPivotSourceCellValue; AFirstRow, AFirstCol, ALastRow, ALastCol: Integer);
Överladdningen med ett argument kräver en konkret lokal rektangel i cachen; överladdningen med explicita gränser läser en uppringarlöst lokal rektangel utan att cachens namn- eller tabellkällidentitet ändras, och uppringaren ansvarar fortfarande för att lösa den identiteten rätt
Cacheuppdateringen uppdaterar cachedata; program kan anropa Make med en egen resultatskrivare eller MaterializePivotTable för skyddad kalkylbladsutmatning; typat icke-OLAP Pivot Slicer-val finns för stödda importerade bindningar, medan komplett inbyggd layout förblir separat arbete