Generering av inläst arbetsboksstruktur
Strukturgenerationer låter en läsare behålla billiga ögonblicksbilder och avvisa traversering efter att arbetsbokstopologin den är beroende av har ändrats
Genereringskällor
| Motor | Cellagrets generering | Kalkylbladssamlingsgenerering |
|---|---|---|
| Classic XLS | TXLSWorksheet.CellStructureGeneration | TXLSWorksheets.StructureGeneration |
| XLSX | TXLSXWorksheet.CellStructureGeneration eller TXLSXCells.StructureGeneration | TXLSXSheets.StructureGeneration |
Varje egenskap är ett skrivskyddat UInt64-värde och den exakta storleken på dess ändring är inte kontraktuell
Ogiltigförklarande åtgärder
Att skapa, ta bort eller tömma lagrade celler ändrar cellagrets generering när topologin faktiskt ändras
Infogning och borttagning av rader eller kolumner, koordinatflyttning, tilläggning till eller materialisering av packad lagring samt explicita ombyggnader av cellindex ogiltigförklarar också traverseringstillståndet för cellagret
Att lägga till, ta bort, flytta eller tömma kalkylblad ändrar kalkylbladssamlingsgenereringen när samlingen faktiskt ändras
Åtgärder som inte ogiltigförklarar
Att ändra värdet, formeln, det cachade värdet eller formatet för en befintlig cell ändrar inte cellagrets generering för cellen
Att byta namn på eller aktivera ett kalkylblad ändrar inte kalkylbladssamlingsgenereringen, och no-op-flyttningar, saknade borttagningar eller tömning av en redan tom samling behåller den aktuella generationen
Validering
Anropa XlsValidateStructureGeneration innan traverseringstillstånd som skapades för en tidigare generation flyttas framåt eller läses
En avvikelse utlöser EXLSLoadedCellCursorInvalidated, så att anroparen kan skilja strukturell ogiltigförklaring från data- eller formatfel
ExpectedGeneration := Worksheet.CellStructureGeneration;
{ Read or retain traversal state }
XlsValidateStructureGeneration(
ExpectedGeneration,
Worksheet.CellStructureGeneration);
Markör för klassisk arbetsbok
IXLSWorkbook.CreateLoadedCellCursor fångar den klassiska arbetsbokens aggregerade generering och validerar den före varje MoveNext- och Current-anrop
Markören traverserar allokerade grenar i den glesa lagringen direkt med konstant markörstatus och returnerar egna TXLSLoadedCellSnapshot-värden
Den booleska överlagringen fryser huruvida självständigt formaterade lagrade tomceller tas med; ärvda rad-, kolumn- och kalkylbladsformat skapar inga tomma markörposter
Markör för XLSX-arbetsbok
TXLSXWorkbook.CreateLoadedCellCursor fångar ett lån med arbetsbokens livstid och en aggregerad topologigenerering som delas av varje kalkylblads cellager och av kalkylbladssamlingen
Den materialiserade vägen läser glesa radblock direkt, medan den packade vägen återanvänder den packade iteratorn utan att materialisera celler eller behålla interna pekare i ögonblicksbilderna
Den booleska överlagringen kan ta med endast-formaterade lagrade tomceller i båda lagringsrepresentationerna, medan oformaterade Empty- och Null-platshållare förblir uteslutna
Att släppa arbetsboken ogiltigförklarar dess lån innan kalkylbladslagringen frigörs, så att senare marköråtkomst utlöser EXLSLoadedCellCursorInvalidated
Konkurrensgräns
Genereringskontroller ger endast fail-fast-detektering och gör inte samtidig arbetsboksmutation och traversering trådsäkert