Dokumentace HotXLS

Bezpečná materializace kontingenčních tabulek do listu

Verze 2.384.90 přidává izolované vyhodnocování kontingenčních tabulek a střeženou náhradu výsledků v listu; verze 2.384.92 rozšiřuje podporované lokální zdroje na definované názvy a tabulky resolvované při každém volání

Materializace zobrazení

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 spočítá výsledky z aktuální mezipaměti a umístí je na FirstRow a FirstCol zobrazení; vrací 1 při úspěchu nebo -1 pro nepodporované zdroje, nebezpečné cíle, selhání vyhodnocení či odmítnutou mutaci sešitu

Aktualizace mezipaměti i přepočet listu zůstávají explicitními operacemi; úspěšná materializace zneplatní výpočetní závislosti, takže volající mohou v případě potřeby přepočítat navazující vzorce

Výchozí přetížení přijme prázdné cílové buňky a nezměněné buňky dříve vlastněné stejným zobrazením; obsazené cizí buňky kdekoli uvnitř kompletního výstupního obdélníku operaci odmítnou, včetně mezer, které zapisovač výsledků nevyplní

if Workbook.MaterializePivotTable(Pivot, True) <> 1 then
  raise Exception.Create('Existing Pivot values cannot be adopted safely');

TXLSXWorkbook.MaterializePivotTable(ATable: TXLSPivotTable; AAdoptExisting: Boolean): Integer umí při první materializaci výslovně převzít existující skalární buňky uvnitř deklarovaného předchozího obdélníku zobrazení; neautorizuje přepis vzorců, členů polí, rich textu, buněk s metadaty ani obsahu mimo ten obdélník

Vlastnictví, změna velikosti a přesun

Zobrazení si uchová přesné souřadnice a typované snímky hodnot zapsaných buněk; ukládání do XLSX toto vlastnictví zachová v definici kontingenční tabulky, takže pozdější aktualizace ho po opětovném otevření mohou validovat

Změněný typovaný obsah nebo odstraněná neprázdná vlastněná buňka odmítnou celou aktualizaci; číselné podtypy sdílejí kanonickou numerickou reprezentaci, zatímco text, logické hodnoty a chyby si drží odlišené identity

Zmenšení nebo přesun výsledku vymaže jen nezměněné vlastněné hodnoty, které už se neprodukují; existující objekty buněk, formátování i komentáře zůstanou dostupné a nesouvisející buňky zůstanou mimo sadu vlastnictví

Změna FirstRow nebo FirstCol přesune příští výstup, zatímco předchozí vlastnické souřadnice zůstanou dostupné pro úklid; prázdný výsledek vymaže vlastněné hodnoty a ponechá umístění jen s kotvou

Izolovaný náhled

function TXLSPivotTable.MakePreview(AWriter: TlxPivotResultWriter): Integer;
property TXLSPivotTable.EvaluationSourceTable: TXLSPivotTable;

TXLSPivotTable.MakePreview použije nezávislé kopie mezipaměti i zobrazení, včetně zástupných míst počítaných polí, a po vyhodnocení je zahodí; obyčejné Make si ponechá stávající chování s živou mezipamětí

Zapisovač dostane offsety řádků a sloupců od nuly a typované hodnoty; návratová hodnota odpovídá počtu agregovaných buněk Make, což je oddělené od počtu volání zapisovače; chybějící mezipaměť nebo zapisovač vrátí nulu a výjimky vyhodnocení či zapisovače se propagují

Predikáty záznamů od volajícího a zaregistrované filtry vlastníků zůstávají v náhledech aktivní, včetně Slicer výběrů sešitu; zpětná volání dostanou dočasné vyhodnocené zobrazení a jeho dočasnou mezipaměť

TXLSPivotTable.EvaluationSourceTable vrátí živé zobrazení pro obyčejné vyhodnocení a původní živé zobrazení pro náhled; použijte ho, když zpětné volání potřebuje identifikovat připojené zobrazení, zatímco vyhodnocené záznamy čte z dočasného Cache zpětného volání

Vlastníci zpětných volání zůstávají majetkem volajícího; náhledové objekty ani jejich záznamy si po skončení zpětného volání či volání náhledu nesmíte uchovávat

Bezpečnostní hranice

Materializace vyžaduje zobrazení i mezipaměť zaregistrované ve stejném sešitu a podporovaný lokální obdélníkový, názvový či tabulkový zdroj; resolvování zdroje sleduje aktuální názvy a rozsahy tabulek a nepodporované či neresolvovatelné zdroje se odmítnou před mutací

Aktuální geometrie zdroje, umístění jiných kontingenčních tabulek, strukturované tabulky, oblasti výsledků dotazů, sloučené buňky i fixní a dynamická pole nesmí křížit nový výstup ani staré vlastněné buňky určené k vymazání; součty tabulek zůstávají chráněné, i když jsou z mezipaměťových záznamů vyloučené

Validace i příprava výstupu běží pod zámkem čtení, po něm následuje obvyklý hlídač mutací sešitu a kontrola generace; zamrzlé zobrazení sešitu jen pro čtení materializaci odmítne, aniž by vyměnilo buňky nebo změnilo geometrii

Filtry musí být jen pro čtení a dodržovat obvyklý kontrakt jednoho zapisovače sešitu; izolace brání obyčejným náhledovým výpočtům měnit živou mezipaměť, ale libovolné zápisy zpětných volání skrze samostatně zachycené živé objekty se vrátit nedají

Tato operace materializuje vypočtené rozvržení knihovny; kompletní autorské nativní rozvržení kontingenčních tabulek, tvorba Slicer UI i vyhodnocování zobrazení chybějících dat při křížovém filtrování zůstávají samostatné schopnosti