Säker pivotmaterialisering i kalkylblad
Version 2.384.90 lägger till isolerad pivotutvärdering och skyddat utbyte av kalkylbladsresultat; version 2.384.92 utökar de stödda lokala källorna till definierade namn och tabeller som slås fast vid varje anrop
Materialisera en vy
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 beräknar resultat från den aktuella cachen och placerar dem i vyns FirstRow och FirstCol; den returnerar 1 vid lyckat resultat och -1 för ostödda källor, osäkra mål, utvärderingsfel eller en avslagen arbetsboksändring
Uppdatering och kalkylbladsomberäkning förblir uttryckliga åtgärder; en lyckad materialisering ogiltigförklarar beräkningsberoenden så att uppringare kan omberäkna underordnade formler när det passar
Standardöverladdningen accepterar tomma målceller och oförändrade celler som tidigare ägts av samma vy; upptagna celler utan ägare någonstans inuti den fullständiga utdatarektangeln avslår åtgärden, även luckor som resultatskrivaren inte fyller
if Workbook.MaterializePivotTable(Pivot, True) <> 1 then
raise Exception.Create('Existing Pivot values cannot be adopted safely');
TXLSXWorkbook.MaterializePivotTable(ATable: TXLSPivotTable; AAdoptExisting: Boolean): Integer kan uttryckligen överta befintliga skalära celler inuti vyns deklarerade tidigare rektangel vid dess första materialisering; den ger inte tillstånd att ersätta formler, matrismedlemmar, rich text, celler med metadata eller innehåll utanför den rektangeln
Ägarskap, storleksändring och flytt
Vyn behåller exakta koordinater och typade värdeögonblicksbilder för skrivna celler; XLSX-sparningen bevarar detta ägarskap i pivotdefinitionen, så senare uppdateringar kan validera det efter återöppning
Ändrat typat innehåll eller en borttagen icke-tom ägd cell avslår hela uppdateringen; talsubtyper delar en kanonisk numerisk representation, medan text, Boolean-värden och fel behåller åtskilda identiteter
Krymper man eller flyttar ett resultat rensas bara oförändrade ägda värden som inte längre produceras; befintliga cellobjekt, formatering och kommentarer finns kvar, och orelaterade celler förblir utanför ägarskapsmängden
Ändrar man FirstRow eller FirstCol flyttas nästa utdata, medan tidigare ägarskapskoordinater finns kvar för städning; ett tomt resultat rensar ägda värden och behåller en plats med bara ankare
Isolerad förhandsvisning
function TXLSPivotTable.MakePreview(AWriter: TlxPivotResultWriter): Integer; property TXLSPivotTable.EvaluationSourceTable: TXLSPivotTable;
TXLSPivotTable.MakePreview använder oberoende kopior av cachen och vyn, inklusive platshållare för beräknade fält, och kastar dem efter utvärderingen; vanlig Make behåller sitt befintliga beteende med aktiv cache
Skrivaren tar emot nollbaserade rad- och kolumnoffset samt typade värden; returvärdet följer Make:s antal aggregerade celler, vilket är skilt från antalet skrivaranrop; en saknad cache eller skrivare returnerar noll, och utvärderings- eller skrivarundantag propageras
Upringarnas postpredikat och registrerade ägarefilter förblir aktiva i förhandsvisningar, inklusive arbetsbokens Slicer-val; callbacks tar emot den tillfälliga utvärderade vyn och dess tillfälliga cache
TXLSPivotTable.EvaluationSourceTable returnerar den aktiva vyn vid en vanlig utvärdering och den ursprungliga aktiva vyn vid en förhandsvisning; använd den när en callback behöver identifiera en ansluten vy, medan utvärderade poster läses från callbackens tillfälliga Cache
Callbackägare förblir uppringarens ägo; förhandsvisningsobjekt och deras poster får inte behållas efter att callbacken eller förhandsvisningsanropet avslutats
Säkerhetsgränser
Materialisering kräver en vy och en cache registrerade i samma arbetsbok samt en stödd lokal källa av typen rektangel, definierat namn eller tabell; källuppslagningen följer aktuella namn och tabellomfattningar, och ostödda eller olösta källor avslås innan ändringen
Aktuell källgeometri, andra pivotplatser, strukturerade tabeller, frågeresultatsområden, sammanslagna celler och fasta eller dynamiska matriser får inte korsa den nya utdata eller gamla ägda celler som behöver rensas; tabellsummor förblir skyddade även om de exkluderas ur cacheposterna
Validering och utdatamellanlagring körs under ett läslease, följt av det normala skrivlåset för arbetsboken och generationskontrollen; en fryst skrivskyddad arbetsboksvy avslår materialisering utan att byta ut celler eller ändra geometri
Filter måste vara skrivskyddade och följa arbetsbokens vanliga enskild-skrivare-kontrakt; isoleringen hindrar normala förhandsberäkningar från att ändra den aktiva cachen, men godtyckliga callback-skrivningar via separat fångade aktiva objekt kan inte rullas tillbaka
Den här åtgärden materialiserar bibliotekets beräknade resultatslayout; komplett inbyggd pivotlayoutförfattning, skapande av Slicer-gränssnitt och utvärdering av korsfilter utan data förblir separata förmågor