CreateReadOnlyView metoda
Stvara lagani pogled samo za čitanje nad modelom učitane radne knjige Classic ili XLSX
Sintaksa
function CreateReadOnlyView: IXLSReadOnlyWorkbookView;
CreateReadOnlyView deklarira klasični IXLSWorkbook u lxHandle i XLSX IXLSXWorkbookOwner u lxHandleX; zajedničko sučelje pogleda, opcije i vrste snimaka deklarirani su u lxStandard
Stanje i životni vijek pogleda
Stvaranje pogleda traje konstantno vrijeme i ne obilazi radne listove, ćelije, stilove, imena niti crteže
Svaki pogled ima vlastiti ActiveSheetIndex koji broji od jedan, pa više pogleda može odabrati različite radne listove bez promjene klasičnog ActiveSheetIndex te XLSX ActiveIndex, IsSelected i ActiveTab
Pogled drži zakup čitanja dok postoji, a mutacije radne knjige brzo propadaju s EXLSWorkbookWriteGuardUnavailable prije promjene modela
Klasične radne knjige držite kroz IXLSWorkbook, a XLSX radne knjige kroz IXLSXWorkbookOwner kada upotrebljavate poglede; sučelje vlasnika i svaki pogled tada zadržavaju istu radnu knjigu s brojanjem referenci i mogu se otpustiti u bilo kojem redoslijedu
Ne pozivajte Free nad konkretnom TXLSWorkbook ili TXLSXWorkbook dok je još referencira neko sučelje vlasnika ili pogled
Snimci ćelija
TryReadCell upotrebljava koordinate retka i stupca koje broje od jedan na aktivnom listu pogleda i vraća False samo kada na toj koordinati ne postoji pohranjena ćelija
Čitanje nepostojeće ćelije ne stvara spremište i ne pomiče generaciju radne knjige
TXLSReadOnlyCellSnapshot posjeduje ime svojeg lista, vrijednost, tekst formule, podatke o predmemoriji i izračunu, koordinate, vrstu i indeks stila te nikada ne izlaže objekt radne knjige u koji se može pisati
| Polje | Značenje |
|---|---|
SheetIndex / SheetName | Identitet radnog lista u kontekstu pogleda |
Row / Col | Koordinate ćelije koje broje od jedan |
StyleIndex | Pohranjeni klasični XF indeks ili XLSX indeks formata ćelije |
Kind | Razvrstavanje u tekst, broj, datum-vrijeme, Booleovu vrijednost, formulu, pogrešku ili praznu ćeliju |
Value | Pohranjena skalarna vrijednost ili vrijednost iz predmemorije formule bez ponovnog izračuna |
HasFormulaCache / FormulaCache | Postojanost, podrijetlo, vrsta vrijednosti i posjedovana predmemorirana vrijednost predmemorije formule |
FormulaEvaluation | Jesu li izračunavanje bilo neprimjereno, nije bilo zatraženo, izračunato ili nije uspjelo, uz kôd rezultata izračunavača i posjedovanu vrijednost rezultata |
Formula | Standardno prazno i popunjeno samo kada je tekst formule izrijekom uključen |
Pravila za formule
Standardno ćelije s formulama upotrebljavaju postojeću pohranjenu predmemoriju i nikada ne izračunavaju, ne pozivaju korisničku funkciju, ne ažuriraju stanje neažurnosti niti vraćaju predmemoriju u radnu knjigu
Dodajte xlsvIncludeFormulaText u Options kada je potreban tekst formule; Classic na zahtjev stvara dekoder privatnog za pogled, dok XLSX kopira svoju pohranjeni niz formule, i nijedan put ne inicijalizira niti mijenja izračunavač radne knjige
Formula bez učitane ili izračunate predmemorije izvještava HasFormulaCache=False i ostavlja Value kao Unassigned
Dodajte xlsvEvaluateFormulas za izračunavanje formula kroz izračunavač, stanje rekurzije, skalarnu predmemoriju, predmemoriju matrica i predmemoriju kompiliranih formula privatne za pogled; dobiveni Value i FormulaEvaluation.Value nikada ne zamjenjuju pohranjenu predmemoriju radne knjige niti polja izvedbenog okruženja kompiliranih formula
Standardne tablične pogreške vraćaju se kao Variant vrijednosti pogrešaka s xlfesCalculated, dok nepodržana ili unutarnja neuspjela izračunavanja izvještavaju xlfesFailed i zadržavaju izvornu pohranjenu predmemoriju u FormulaCache
Ponovljena čitanja kroz jedan pogled ponovno upotrebljavaju njegovu privatnu predmemoriju izračuna za generaciju zakupa, dok različiti pogledi ostaju neovisni i mogu istovremeno izračunavati istu dijeljenu formulu
Izračunavanje vanjskih formula u XLSX-u čita samo predmemoriju externalLink iz lokalne datoteke i nikada ne dereferencira slabu registraciju žive radne knjige niti izvodi vanjski ulazno-izlazni rad
Niti i učinkovitost
Upotrebljavajte jedan pogled po radnoj niti; odvojeni pogledi mogu skenirati različite radne listove ili istovremeno izračunavati istu formulu, dok pozivatelji ne smiju mijenjati aktivni list ili opcije jednog pogleda iz druge niti
Nakon stvaranja uobičajena čitanja ćelija ne ulaze u monitor ni kritični odsjek jer zakup sprječava istodobnu mutaciju radne knjige
Provjera otpuštanja drži svaki pogled bez aktivnosti ispod 64 KiB fiksnog stanja, sto pogleda bez aktivnosti ispod 8 MiB, a stvaranje pogleda neovisno o veličini radne knjige s pragom od jedne milisekunde p95 na modelu od milijun ćelija
Testni paket učinkovitosti također ograničava učinak pogleda bez aktivnosti na postojeća jednonitna skeniranja pokazivačem na pet posto i zahtijeva da osam pogleda koji skeniraju neovisne radne listove postigne najmanje peterostruku propusnost u odnosu na jedan pogled na računalo za provjeru
Primjer
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;
Za XLSX zadržite konkretnu radnu knjigu kroz njezino sučelje vlasnika prije stvaranja pogleda
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;