Dokumentacija HotXLS

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

PoljeZnačenje
SheetIndex / SheetNameIdentitet radnog lista u kontekstu pogleda
Row / ColKoordinate ćelije koje broje od jedan
StyleIndexPohranjeni klasični XF indeks ili XLSX indeks formata ćelije
KindRazvrstavanje u tekst, broj, datum-vrijeme, Booleovu vrijednost, formulu, pogrešku ili praznu ćeliju
ValuePohranjena skalarna vrijednost ili vrijednost iz predmemorije formule bez ponovnog izračuna
HasFormulaCache / FormulaCachePostojanost, podrijetlo, vrsta vrijednosti i posjedovana predmemorirana vrijednost predmemorije formule
FormulaEvaluationJesu 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
FormulaStandardno 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;

Vidi također