CreateReadOnlyView metódus
Könnyű, csak olvasható nézetet hoz létre egy betöltött Classic vagy XLSX munkafüzet-modell felett
Szintaxis
function CreateReadOnlyView: IXLSReadOnlyWorkbookView;
A CreateReadOnlyView-t a classic IXLSWorkbook a lxHandle-ben, az XLSX IXLSXWorkbookOwner pedig a lxHandleX-ben deklarálja; a megosztott nézetinterfészt, a beállításokat és a pillanatképtípusokat a lxStandard deklarálja
A nézet állapota és élettartama
A nézet létrehozása konstans idejű, és nem járja be a munkalapokat, cellákat, stílusokat, neveket vagy rajzokat
Minden nézetnek saját, 1-alapú ActiveSheetIndex értéke van, így több nézet különböző munkalapokat választhat a classic ActiveSheetIndex vagy az XLSX ActiveIndex, IsSelected és ActiveTab módosítása nélkül
A nézet létezése alatt olvasási foglalást tart, és a munkafüzet-mutációk fail-fast módon meghiúsulnak EXLSWorkbookWriteGuardUnavailable kivétellel, mielőtt a modell megváltozna
Nézetek használatakor a classic munkafüzeteket IXLSWorkbook-on, az XLSX munkafüzeteket IXLSXWorkbookOwner-on keresztül tartsa meg; a tulajdonosinterfész és minden nézet ugyanazt a referenciaszámlált munkafüzetet tartja meg, és bármilyen sorrendben felszabadíthatók
Ne hívja a Free metódust egy konkrét TXLSWorkbook vagy TXLSXWorkbook objektumon, amíg arra tulajdonosinterfész vagy nézet még hivatkozik
Cellapillanatképek
A TryReadCell a nézet aktív munkalapján 1-alapú sor- és oszlopkoordinátákat használ, és csak akkor ad vissza False értéket, ha az adott koordinátán nincs tárolt cella
Egy hiányzó cella olvasása nem hoz létre tárolást, és nem mozgatja előre a munkafüzet-generációt
A TXLSReadOnlyCellSnapshot saját tulajdonában tartja a munkalap nevét, az értéket, a képlet szövegét, a gyorsítótár- és kiértékelési információkat, a koordinátákat, a fajtát és a stílusindexet, és soha nem fed fel írható munkafüzet-objektumot
| Mező | Jelentés |
|---|---|
SheetIndex / SheetName | Nézeten belüli munkalap-identitás |
Row / Col | 1-alapú cellakoordináták |
StyleIndex | Tárolt classic XF index vagy XLSX cellaformátum-index |
Kind | Szöveg, szám, dátum-idő, logikai, képlet, hiba vagy üres besorolás |
Value | Tárolt skalár érték vagy képletgyorsítótár-érték újraszámolás nélkül |
HasFormulaCache / FormulaCache | A képletgyorsítótár jelenléte és eredete (TXLSFormulaCacheState), értéktípusa (TXLSFormulaCacheValueKind) és a saját tulajdonú gyorsítótárazott érték |
FormulaEvaluation | Egy TXLSFormulaEvaluationInfo rekord, amelynek TXLSFormulaEvaluationState állapota jelzi, hogy a kiértékelés nem volt alkalmazható, nem kérték, kiszámolták vagy meghiúsult, a kiértékelő eredménykódja és a saját tulajdonú eredményérték mellett |
Formula | Alapértelmezetten üres, és csak akkor kerül feltöltésre, ha a képlet szövege explicit módon engedélyezett |
Képletszabályzat
Alapértelmezetten a képletcellák a meglévő tárolt gyorsítótárat használják, és soha nem számolnak, nem hívnak felhasználói függvényt, nem frissítik a módosultsági állapotot, és nem írnak gyorsítótárat vissza a munkafüzetbe
Adja hozzá az xlsvIncludeFormulaText értéket az Options halmazhoz, ha a képlet szövege szükséges; a beállításhalmaz típusa TXLSReadOnlyViewOptions = set of TXLSReadOnlyViewOption. A Classic igény szerint nézetprivát dekódert hoz létre, míg az XLSX átmásolja a tárolt képletsztringjét, és egyik út sem inicializálja vagy módosítja a munkafüzet-kalkulátort
Egy betöltött vagy kiszámolt gyorsítótár nélküli képlet HasFormulaCache=False értéket jelez, és a Value értéke Unassigned marad
Adja hozzá az xlsvEvaluateFormulas értéket a képletek nézetprivát kalkulátoron, rekurziós állapoton, skalár gyorsítótáron, tömbmátrix-gyorsítótáron és XLSX lefordított képlet-gyorsítótáron keresztüli kiértékeléséhez; a kapott Value és FormulaEvaluation.Value soha nem helyettesíti a munkafüzet tárolt gyorsítótárát vagy a lefordított képlet futásidejű mezőit
A táblázatkezelők szabványos hibái Variant hibaértékként térnek vissza xlfesCalculated állapottal, míg a nem támogatott vagy belső kiértékelési hibák xlfesFailed állapotot jeleznek, és megtartják az eredeti tárolt gyorsítótárat a FormulaCache-ben
Egy nézeten keresztüli ismételt olvasások a foglalás generációjára vonatkozó privát kiértékelési gyorsítótárát használják újra, míg a különböző nézetek függetlenek maradnak, és ugyanazt a megosztott képletet egyidejűleg is kiértékelhetik
Az XLSX külső képletek kiértékelése csak a fájlhelyi externalLink gyorsítótárat olvassa, és soha nem old fel gyenge, élő munkafüzet-regisztrációt, valamint nem végez külső I/O-t
Szálkezelés és teljesítmény
Használjon nézetet munkaszálonként; a különálló nézetek bejárhatnak különböző munkalapokat, vagy egyidejűleg értékelhetik ki ugyanazt a képletet, miközben a hívó nem módosíthatja egyik nézet aktív munkalapját vagy beállításait egy másik szálról
Létrehozás után a szokásos cellaolvasások nem lépnek monitorba vagy kritikus szakaszba, mert a foglalás megakadályozza a munkafüzet egyidejű módosítását
A felszabadítási validáció minden üresjárati nézetet 64 KiB alatti rögzített állapotban tart, száz üresjárati nézetet 8 MiB alatt, a nézetlétrehozást pedig függetlenné teszi a munkafüzet méretétől, egymillió cellás modellen egymilliomásodperces p95 kapuval
A teljesítményteszt továbbá az üresjárati nézet meglévő egyszálas kurzorbejárásokra gyakorolt hatását öt százalékra korlátozza, és megköveteli, hogy nyolc, független munkalapokat bejáró nézet legalább ötszörös egynézeti áteresztőképességet érjen el a validációs gazdagépen
Példa
var
Workbook: IXLSWorkbook;
View: IXLSReadOnlyWorkbookView;
Cell: TXLSReadOnlyCellSnapshot;
begin
Workbook := TXLSWorkbook.Create;
Workbook.Sheets.Add;
Workbook.Sheets[1].Cells[1, 1].Value := 'ready';
View := Workbook.CreateReadOnlyView;
View.Options := [xlsvEvaluateFormulas];
if View.TryReadCell(1, 1, Cell) then
Memo1.Lines.Add(VarToStr(Cell.Value));
end;
XLSX esetén tartsa meg a konkrét munkafüzetet a tulajdonosinterfészén keresztül, mielőtt nézeteket hozna létre
var
Owner: IXLSXWorkbookOwner;
Workbook: TXLSXWorkbook;
View: IXLSReadOnlyWorkbookView;
begin
Workbook := TXLSXWorkbook.Create;
Owner := Workbook;
Workbook.Sheets.Add('Data').Cells[1, 1].Value := 42;
View := Owner.CreateReadOnlyView;
end;