Inbyggda pivotutdata, korsfilterfrågor och saknade medlemmar
Inbyggd cachad kalkylbladsutmatning
function TXLSXWorkbook.MaterializeNativePivotTable( ATable: TXLSPivotTable): Integer; function TXLSXWorkbook.MaterializeNativePivotTable( ATable: TXLSPivotTable; AAdoptExisting: Boolean): Integer;
Åtgärden mellanlagrar både det kompletta inbyggda kompakta, tabellformade eller dispositionsbaserade rapportrutnätet och dess plats-, rowItems-, colItems- och dataaxelmetadata innan kalkylbladsvärden och utdataägarskap engageras tillsammans; den returnerar 1 vid lyckat resultat eller -1 med diagnostik vid tillstånd som inte stöds eller en kollision
Stödda icke-tomma lokala vyer behåller aktuella filter, exakta cachemedlemsidentiteter, vanliga hierarkier, stödda grupperade domäner, standard- eller anpassade delsummor och valfri stödd dataaxel; det inbyggda rutnätet använder ursprungliga aggregeringsvärden i stället för att kombinera om visade medelvärden eller andra icke-additiva resultat
Befintliga cellobjekt och formatering finns kvar, medan krympning eller flytt av rapporten bara rensar oförändrade tidigare ägda värden; redigerade utdata, källöverlapp, sammanslagningar, formler, matriser och andra rapporter avslås innan ändringen
Importerad skalär utdata kräver uttryckligt övertagande med AAdoptExisting=True; efterföljande uppdateringar använder beständigt per-cell-ägarskap, även efter sparande och återöppning
Åtgärden läser aktuella cacheposter och uppdaterar inte källdata eller omberäknar formler; Cache.RefreshOnLoad=False är giltigt eftersom kalkylbladet nu innehåller faktiska mellanlagrade inbyggda resultat
Upringarnas postfiltercallbacks deltar i den fristående förhandsvisningen men har ingen OOXML-representation; Excel:s uttryckliga inbyggda uppdatering kan inte återge godtyckliga callback-begränsningar, medan stödda beständiga manuella filter och Slicer-filter behåller sitt serialiserade format
Stödda beräknade cachefält med SUM och cacheägda beräknade objekt använder kontextsummokontraktet som beskrivs i Inbyggda beräknade pivotfält och cacheägda objekt; anpassade medlemsbildtexter och layoutkombinationer som inte stöds avslås uttryckligen, medan stödd genererad rålayout behåller orelaterad XML och aktuella medlemsmasker
TryXLSXMakeNativePivotLayout(const Xml: WideString; Table: TXLSPivotTable; AWriter: TlxPivotResultWriter; out ResultXml, Reason: WideString): Boolean är hjälparen för mellanlagrad layout på lägre nivå i lxPivotXml
Dess skrivare tar emot hela rapportrektangeln i radordning (row-major), inklusive tomma celler, med nollbaserade offset från tabellankaret; XML- och rutnätpreflight avslutas innan första callbacken, men uppringarägda skrivningar kan inte rullas tillbaka om en callback utlöser ett undantag
Arbetsboksfasaden tillhandahåller en fristående inspelningsskrivare för transaktionella celluppdateringar; den kombinerade mellanlagrade förhandsvisningen och de inbyggda Variant-rutnäten avgränsas till 4194304 celler
Den inbyggda förhandsvisningsvägen kan begära inbyggd totalsummaorientering via den valfria parametern AUseNativeGrandTotals i TXLSPivotTable.MakePreview; befintliga anrop med en enda skrivare och layoutskrivare bevarar sitt tidigare beteende
Layout och upprepade etiketter
Sätt Compact och Outline på rapporten och varje radfält före materialiseringen; tabellformade fält använder båda flaggorna som False, dispositionsfält använder Compact=False och Outline=True, och kompakta fält använder båda flaggorna som True
property TXLSPivotField.RepeatLabels: Boolean;
RepeatLabels är False som standard, kopieras oberoende med fältet och läser eller skriver det inbyggda tillägget x14:pivotField fillDownLabels; det upprepar överordnade etiketter i tabellformad och dispositionsbaserad utdata och har ingen effekt på ett fält där både compact- och outline-flaggorna är aktiverade
Varje separat radfält får sin egen fysiska kolumn, medan intilliggande kompakta dispositionsfält delar en etikettkolumn; flera mått på rader följer CompactData, och flera mått på kolumner behåller oberoende dataetiketter och totalsummor
Standardtabellformade delsummor visas under sin grupp; dispositionens SubtotalTop väljer placering överst eller nederst, medan mått på rader använder separata aggregeringsrader under gruppen och behåller varje måtts bildtext
Inbyggd cachad utdata lämnar frånvarande rad- och kolumnskärningar tomma och bevarar en verklig numerisk nolla; vanlig Make och förhandsvisningar utan det inbyggda alternativet behåller sitt tidigare beteende för tomt resultat
Inaktiva fält och måttfält ärver rapportlayouten i mellanlagrad inbyggd metadata så att Excel:s uttryckliga uppdatering behåller lämpliga fält- och dataetiketter; åtgärden bevarar de aktiva fältinställningarna och befintliga ägarskapskontroller
Importerade tillägg för upprepade etiketter accepterar namnområdesalias, inklusive deklarationer på själva tilläggselementet; okänd orelaterad XML förblir bevarad av den inbyggda materialiseringsvägen
Grupperade medlemmar, axelordning och anpassade delsummor
Inbyggd utdata stöder kompletta numeriska intervallgrupper, datumgrupper och manuella medlemsgrupper som representeras av cachens befintliga typade grupperingsmetadata; genererade etiketter behåller de exakta importerade GroupItemLabels, inklusive Unicode- och lokaliserade datumtexter
Grupperingen utvärderas på en fristående cache, vilket bevarar den aktiva cachens poster, delade objekthandtag och gruppidentiteter; ogiltiga gränser, nollintervall, ofullständiga domäner eller gruppvärdestyper som inte stöds avslås innan kalkylbladsutdata ändras
Den befintliga nollbaserade TXLSPivotField.Position avgör den stabila inbyggda rad- eller kolumnaxelordningen; lika positioner behåller den författade fältordningen, så nyskapade fält med standardpositionen behåller sin tidigare ordning
Inbyggda importerade Year/Month- och förälder-/manuell-medlem-hierarkier behåller sin uttryckliga axelsekvens, medan cache-fältindex, vyfältindex och identiteter för beräkningsbas vid visning förblir oförändrade; manuella grupper respekterar uttrycklig Pivot-objektordning i stället för att sortera gruppetiketter eller cacheindex
Anpassade delsummor på rader stöder xlpsSum, xlpsCount, xlpsAverage, xlpsMax, xlpsMin, xlpsProduct, xlpsCountNumbers, xlpsStdDev, xlpsStdDevP, xlpsVar och xlpsVarP, inklusive flera valda funktioner, tabellformade eller dispositionsfält och mått på rader
Varje funktion aggregerar de ursprungliga källposterna inom sitt eget delsummaskop; dess mellanlagrade radmetadata identifierar den valda funktionen oberoende, vilket bevarar Excel:s uttryckliga uppdateringsbeteende för icke-additiva beräkningar samt tomma eller felaktiga resultat
Ett importerat anpassat delsummorval exkluderar den underförstådda automatiska delsumman även när defaultSubtotal saknas i inbyggd XML; program får inte kombinera xlpsDefault med anpassade funktioner, och en sådan tvetydig typad begäran avslås innan ändringen
Flera kolumnfältsnivåer med delsummor, ostödda kompakta dataaxelkombinationer, komprimerade medlemmar och anpassade bildtexter ligger fortfarande utanför det här inbyggda utdatakontraktet; beräknade fält och objekt har sina egna snävare krav på SUM och medlemsidentitet, och rå bevarande innebär inte stöd för att omberäkna eller materialisera en funktion
Sparande, återöppning och ommaterialisering behåller stödd gruppering, axelordning och delsummaidentiteter; importerade inbyggda vyer och oberoende kopierade typade cacher har också verifierats mot Excel vid både första öppning och uttrycklig uppdatering
Inbyggda visningsberäkningar
Sätt varje vanligt datafälts ShowDataAs eller ExtendedShowDataAs innan MaterializeNativePivotTable anropas; grundläggande och utökade visningslägen utesluter varandra
Grundläggande lägen omfattar differens, procent av ett basobjekt, procentdifferens, löpande total, procent av rad, kolumn eller totalsumma samt index; utökade lägen omfattar förälderad, förälderkolumn och valda förälderprocentsatser, kumulativ procentsats samt stigande eller fallande dense ranks
BaseField är det nollbaserade pivotfältindexet för jämförelser, löpande totaler, valda förälderprocentsatser och rangordningar; jämförelser använder den nollbaserade BaseItem-positionen, eller xlPivotBaseItemPrevious och xlPivotBaseItemNext för intilliggande synliga medlemmar i den effektiva visningsordningen
Procentsatser för förälderad och förälderkolumn väljer motsvarande innersta axelfält utan att använda BaseField; en saknad motsvarande axel lämnar de resultaten tomma
Enkla procentsatser dividerar med den ursprungliga aggregeringen inom relevant omfattning, inklusive icke-additiva medelvärden; kumulativa procentsatser summerar visade medlemsaggregeringar och använder den ursprungliga axelsumman för ett innersta basfält, medan ett yttre basfält använder summan över sina matchande kvarvarande medlemmar, så medelvärden kan överstiga 100 procent
Inbyggda rangordningar räknar åtskilda föregående aggregeringsvärden, och jämförelser bevarar Excel:s beteende för tomma värden och fel vid frånvarande skärningar, saknade baser, nolldelare samt föregående- eller nästa-gränser; enkla procentsatser behandlar en saknad täljare som noll
Totalsummor använder det valda lägets inbyggda semantik, inklusive tomma totaler längs en jämförelse- eller löpande axel; byte av visningsläge behåller rapportens transaktionella ägarskaps-, kollisions- och budgetkontroller
Sparande och återöppning behåller det valda grundläggande eller utökade läget och basidentiteterna, och mellanlagrad inbyggd metadata stöder en uttrycklig Excel-uppdatering; vanlig Make och förhandsvisningar utan det inbyggda alternativet behåller sitt befintliga beräkningskontrakt
Slicer-korsfiltertillgänglighet
property TXLSXSlicerCache.ItemHasData[Index: Integer]: Boolean;
Den här skrivskyddade frågan utvärderar aktuella stödda icke-OLAP-cacheposter medan den ignorerar denna Slicers eget urval och behåller andra Slicer-val, manuella filter, uppringarpredikat och tillämpliga aggregeringsfilter
Tillgängligheten är unionen över anslutna vyer; historiska medlemmar utan matchande poster saknar data, tomma mått saknar data, och icke-tom text, Boolean, nolla, fel och datum räknas som data enligt det verifierade inbyggda kontraktet
Frågan använder ett läslease och fristående postförhandsvisning, bevarar aktiva handtag och urval och respekterar FormulaArrayMemoryLimit; callback-fel, återinträde, ogiltiga bindningar eller ostödda aggregeringsberäknade medlemmar utlöser undantag utan att aktiva ändringar engageras
Att fråga efter tillgänglighet uppdaterar inte cacher, omberäknar inte formler, utför ingen fil-I/O och uppdaterar inte serialiserade inbyggda no-data-flaggor; program bör inte härleda inbyggt UI-tillstånd från den här skrivskyddade åtgärden
TlxPivotRecordWriter = procedure(ATable: TXLSPivotTable; ARecordIndex: Integer) of object; function TXLSPivotTable.MakeRecordPreview(AWriter: TlxPivotRecordWriter; AFilterOwner: TObject = nil; AFilter: TlxPivotRecordFilter = nil): Integer;
Den avancerade postcallbacken tar emot den fristående förhandsvisningen och ett nollbaserat postindex efter stödd enkel och aggregerande filtrering; EvaluationSourceTable behåller den ursprungliga vyidentiteten, och returvärdet är antalet utsända poster
Ett ersättningsfilter ersätter bara den angivna ägarens registrerade callback; andra ägare och det externa predikatet förblir aktiva, och ett ersättningscallback som inte är nil kräver en ägare som inte är nil
Uttrycklig rensning av historiska medlemmar
Removed := Workbook.PurgePivotCacheMissingItems(
Pivot.CacheId, 0);
if Removed < 0 then
raise Exception.Create('The cache member purge was rejected');
TXLSXWorkbook.PurgePivotCacheMissingItems(ACacheId: Integer; ARetainMissingItemsPerField: Integer = 0): Integer tar bort oanvända medlemmar efter fullständig validering och ommappning av stödda länkade vyer och Slicers
Den returnerar totalt antal borttagna delade objekt över alla fält, noll för en lyckad no-op, eller -1 med diagnostiken 1402; aktuella poster behåller varje refererad medlem, plus högst det begärda antalet oanvända medlemmar per fält, valda efter störst ursprungligt delat objektindex
Behållna medlemmar behåller sin ursprungliga relativa ordning och sina objekthandtag medan logiska index komprimeras; länkade fält-/objekthandtag, manuella dold- och detaljflaggor, aktiva sid- eller jämförelsemedlemmar och Slicer-val behåller sina identiteter
Domänflaggor och gränser räknas om från den behållna domänen; stödda importerade komprimerade rad-/kolumn- och sidpositioner mappas om uttryckligen, medan dummyreferenser för totalsumma och ordningstal för datapseudofält förblir oförändrade
Vanliga kompletta lokala kalkylbladscacher stöds; grupperade, beräknade, medlemsegenskaps-, OLAP-, externa, ofullständiga eller tvetydiga cacher samt ogenomskinlig identitetsmetadata som inte stöds avslås innan ändringen
Att ta bort en aktiv sid- eller jämförelsemedlem, en hel vald Slicer-delmängd eller en tidigare icke-tom effektiv skärning avslås atomärt; primitiva medlemsattribut som skulle gå förlorade vid typad ombyggnad avslås också
Det kända materialiseringsägarskapstillägget förblir oförändrat eftersom dess koordinater och typade värdetecken inte innehåller cachemedlemsindex; orelaterade ogenomskinliga tillägg antas inte vara säkra
Rensningen uppdaterar inte källdata, skriver inte om kalkylbladets rapportceller, anropar inte postcallbacks och tillämpar inte MissingItemsLimit-metadata automatiskt; uppdatering förblir enbart-tillägg om inte den här åtgärden uttryckligen begärs
Avancerad rensningskoordinering
TXLSPivotCache._PrepareMissingItemPurge returnerar en ogenomskinlig TXLSPivotCachePurgePlan; program bör normalt använda arbetsboksfasaden så att varje länkad vy och Slicer inkluderas
MapItem och RemainingItemCount inspekterar cacheommappning, StagePivotField registrerar ett länkat fält och returnerar dess mellanlagringsindex, och MapViewItemPosition inspekterar den fältets serialiserade positionsmappning; borttagna medlemmar mappas till -1, och RemovedCount rapporterar totalt antal borttag
Validate kontrollerar ursprungligt schema, poster, identiteter för fält-/objektägarskap och mellanlagrade vyval; Commit validerar igen och överför förberett ägarskap utan allokering eller callbacks efter det första aktiva utbytet
Planen äger fristående ögonblicksbilder, håller sin föränderliga mellanlagrade cache privat och äger aldrig ursprungliga cache- eller vyobjekt; håll de originalen vid liv tills planens Destroy släpper mellanlagringen, och engagera varje plan bara en gång
Avslagen fältmellanlagring rullar tillbaka det steget så att planen kan återanvändas; mutationer som inte stöds efter förberedelsen avslås före committen