Dokumentace HotXLS

Transakční aktualizace mezipaměti kontingenčních tabulek

Verze 2.384.92 aktualizuje lokální obdélníkové, názvové i tabulkové zdroje kontingenčních tabulek, aniž by měnila existující objekty polí, sdílené objekty položek nebo logické indexy členů; všechna zobrazení kontingenčních tabulek sdílející mezipaměť dál odkazují na tytéž členy

Aktualizace na úrovni sešitu

Workbook.Recalculate;
if Workbook.RefreshPivotCache(Pivot.CacheId) <> 1 then
  raise Exception.Create('Pivot cache refresh failed');

TXLSXWorkbook.RefreshPivotCache vrátí 1 po úspěšné aktualizaci a -1, když mezipaměť, zdroj, schéma nebo zdrojové hodnoty nelze aktualizovat; čte aktuální hodnoty buněk, takže když je potřeba vyhodnotit zdrojové vzorce, přepočítejte nejdřív sešit

Obdélníkový zdroj používá existující lokální list a řádek záhlaví; SourceFirstRow, SourceFirstCol, SourceLastRow a SourceLastCol používají včetné souřadnice číslované od jedničky a první řádek dodává názvy polí

Zdroje typu definovaný název a tabulka

Když je SourceIsNamedRange=True, identifikuje SourceName definovaný název nebo unikátní název či zobrazovaný název tabulky; aktualizace i materializace resolvují jeho aktuální geometrii při každém volání, se zachováním identity zdroje uložené v mezipaměti

SourceRangeSheet dodává kontext listu pro lokální definovaný název; tento rozsah má přednost před názvem sešitu se stejným pravopisem a jinak se resolvuje v rozsahu sešitu, aniž by se zvolil nesouvisející lokální název

Definovaný název musí obsahovat právě jeden explicitně kvalifikovaný listem absolutní obdélník; názvy listů v uvozovkách i Unicode jsou podporované, zatímco relativní odkazy, spojení, aliasy, vzorce, externí odkazy a dvojznačné kolize název/tabulka se odmítnou před mutací

Tabulka musí zachovat řádek záhlaví; záznamy sledují její aktuální rozsah a vylučují skutečný řádek součtů, zatímco kontroly kolizí chrání celou tabulku včetně jejích součtů; tabulka se záhlavím dodá nulový počet záznamů

Fyzické členství v součtech sleduje uložený totalsRowCount, jehož chybějící hodnota znamená nulu; samotná UI nápověda součtů neodstraní datový řádek a ukládání zapíše skutečné členství explicitně

Pro autorský řádek součtů dodávejte platná metadata sloupcových součtů a obsah listu přes ColumnTotalsRowLabels, ColumnTotalsRowFunctions a ColumnTotalsRowFormulas; nastavení TotalsRowShown=True nevytvoří součtové vzorce a nepřevede hodnoty buněk

Přesuny listů si zachovávají lokální rozsah názvů a přejmenování listů aktualizuje podporované lokální odkazy a kontext zdroje kontingenční tabulky, se zachováním nesouvisejících externích odkazů a neprůhledného importovaného XML mezipaměti; ukládání definovaných názvů odstraní volitelné úvodní rovnítko vzorce, aniž by změnilo vzorec v paměti

Záhlaví se párují se stávajícími databázovými poli podle názvu bez rozlišení velikosti písmen; změna pořadí zdrojových sloupců zachová logické indexy polí, zatímco duplicitní, přejmenovaná, chybějící či navíc zdrojová pole se odmítnou; prázdná záhlaví použijí stávající fallback FieldN

Prázdné zdrojové buňky zůstanou prázdné, aniž by se přidaly do kolekce buněk listu; zdroje se záhlavím produkují nulový počet záznamů a přitom si ponechají historické členy

Stabilní členové a sdílená zobrazení

Existující sdílené položky si zachovají své indexy a identity objektů a nové typované hodnoty se připojí k doméně; změna pořadí, odstranění a pozdější opětovné zavedení zdrojových členů zachová skryté položky, výběry stránek, odkazy na základní položky a explicitní mapování skupin, které už tyto členy identifikují

Všechna zobrazení sdílející jednu mezipaměť vidí aktualizované záznamy; absentující historické členy zůstávají v doméně mezipaměti, ale samy o sobě nevytvoří agregované řádky, protože TXLSPivotTable.Make staví výsledky z aktuálních záznamů

Historické členy se uchovávají bez ohledu na MissingItemsLimit; tato cesta aktualizace nečistí chybějící členy, nevynucuje limit uchovaných členů a nepřečíslovává indexy výběrů

Numerické, datumové, logické, textové, prázdné i reprezentovatelné chybové hodnoty si zachovají své typy skrze aktualizaci i ukládání do XLSX; příznaky obsahu sdílených položek i reprezentovatelné meze se přepočtou z uchované a nově připojené domény

Ukládání dokončí aktualizované seznamy členů zobrazení před koncovými položkami mezisoučtů, se zachováním stávajícího pořadí, skrytých příznaků i importovaných rozvržení; výběry stránek se mapují mezi logické členy mezipaměti a pozice uložené v každém zobrazení, takže i změněné seznamy členů vyberou po opětovném otevření téhož člena

Počítaná a seskupená pole

Počítaná pole nespotřebovávají zdrojové sloupce; jejich názvy, vzorce i domény sdílených položek zůstávají dostupné, zatímco každý aktualizovaný záznam začíná prázdným zástupným místem pro tato pole; Make vyhodnotí podporované počítané vzorce z aktuálních zdrojových hodnot

Záznamy mezipaměti XLSX ukládají jen databázová pole; ukládání a opětovné otevření zachová zarovnání na zdrojové sloupce, i když počítaná pole leží mezi databázovými

Numerické a datumové seskupení zdrojového pole může přijmout nové členy; explicitní diskrétní seskupení přijme změněné pořadí existujících členů, ale odmítne nového člena bez explicitního mapování a zachová celou předchozí mezipaměť

Verze 2.384.94 znovu sestaví podporovaná fixní odvozená seskupená pole z validovaných základních/nadřazených odkazů; automatické rozšiřování domény, nemapované diskrétní členy a pole vlastností členů se transakčně odmítnou, zatímco externí a OLAP zdroje zůstávají mimo kontrakt lokálních zdrojů; hranice seskupené mezipaměti popisuje téma Životní cyklus seskupené mezipaměti

Atomické aktualizace a zpětná volání

Validace zdroje, čtení, konverze typů, alokace záznamů i vyhledání členů proběhnou v oddělených přípravných datech; selhání ponechá živé handlery polí a položek, záznamy, metadata, stav raw replay i všechna sdílená zobrazení nedotčená

Úspěch nahradí buffery záznamů a vyhledávání, zakáže raw replay mezipaměti, aktualizuje RefreshedDate a nastaví RefreshOnLoad=False; ukládání použije aktualizovanou typovanou mezipaměť, místo aby přehrávala předchozí raw reprezentaci

Samostatný nebo klasikou podložený kód může použít tutéž přípravnou implementaci přes TXLSPivotCache.RefreshFromSource; jeho čtečka dostane zdrojové souřadnice od jedničky a vrátí Variant a selhání validace či čtečky vyvolá výjimku

TlxPivotSourceCellValue = function(ARow, ACol: Integer): Variant of object;
procedure TXLSPivotCache.RefreshFromSource(AValueReader: TlxPivotSourceCellValue);
procedure TXLSPivotCache.RefreshFromSource(AValueReader: TlxPivotSourceCellValue;
  AFirstRow, AFirstCol, ALastRow, ALastCol: Integer);

Přetížení s jedním argumentem vyžaduje konkrétní lokální obdélník v mezipaměti; přetížení s explicitními mezemi přečte volajícím resolvovaný lokální obdélník, aniž by změnilo identitu pojmenovaného či tabulkového zdroje mezipaměti, a správné resolvování této identity zůstává na volajícím

Aktualizace mezipaměti mění data mezipaměti; aplikace můžou volat Make s vlastním zapisovačem výsledků nebo MaterializePivotTable pro střežený výstup do listu; typovaný výběr Pivot Sliceru pro data mimo OLAP je dostupný pro podporované importované vazby, zatímco kompletní nativní rozvržení zůstává samostatnou prací