Dokumentacija HotXLS

CreateReadOnlyView metoda

Kreira lagan prikaz samo za čitanje nad modelom učitane Classic ili XLSX radne sveske

Sintaksa

function CreateReadOnlyView: IXLSReadOnlyWorkbookView;

CreateReadOnlyView deklariše klasični IXLSWorkbook u lxHandle i XLSX IXLSXWorkbookOwner u lxHandleX; zajednički interfejs prikaza, opcije i tipovi snimaka deklarisani su u lxStandard

Stanje i životni vek prikaza

Kreiranje prikaza traje konstantno vreme i ne obilazi radne listove, ćelije, stilove, imena niti crteže

Svaki prikaz ima svoj ActiveSheetIndexkoji počinje od jedan, pa više prikaza može da izabere različite radne listove bez promene klasičnog ActiveSheetIndex te XLSX ActiveIndex, IsSelectedi ActiveTab

Prikaz drži zakup čitanja dok postoji, a mutacije radne sveske brzo propadaju sa EXLSWorkbookWriteGuardUnavailable pre promene modela

Klasične radne sveske držite preko IXLSWorkbook , a XLSX radne sveske preko IXLSXWorkbookOwner kada koristite prikaze; interfejs vlasnika i svaki prikaz tada zadržavaju istu radnu svesku sa brojanjem referenci i mogu se otpustiti u bilo kom redosledu

Ne pozivajte Free nad konkretnom TXLSWorkbook ili TXLSXWorkbook dok na nju još upućuje neki interfejs vlasnika ili prikaz

Snimci ćelija

TryReadCell koristi koordinate reda i kolone koje počinju od jedan na aktivnom listu prikaza i vraća False samo kada na toj koordinati ne postoji uskladištena ćelija

Čitanje nepostojeće ćelije ne stvara skladište i ne pomera generaciju radne sveske

TXLSReadOnlyCellSnapshot poseduje ime svog lista, vrednost, tekst formule, podatke o kešu i izračunavanju, koordinate, vrstu i indeks stila i nikada ne izlaže objekat radne sveske u koji se može pisati

PoljeZnačenje
SheetIndex / SheetNameIdentitet radnog lista u kontekstu prikaza
Row / ColKoordinate ćelije koje počinju od jedan
StyleIndexUskladišteni klasični XF indeks ili XLSX indeks formata ćelije
KindRazvrstavanje u tekst, broj, datum-vreme, Bulovu vrednost, formulu, grešku ili praznu ćeliju
ValueUskladištena skalarna vrednost ili vrednost iz keša formule bez ponovnog izračunavanja
HasFormulaCache / FormulaCachePostojanje, poreklo, vrsta vrednosti i keširana vrednost u vlasništvu keša formuleTXLSFormulaCacheState), value kind (TXLSFormulaCacheValueKind), and owned cached value
FormulaEvaluationA TXLSFormulaEvaluationInfo record whose TXLSFormulaEvaluationState Da li je izračunavanje bilo neprimenljivo, nije bilo zatraženo, izračunato ili nije uspelo, uz kod rezultata izračunavača i vrednost rezultata u vlasništvu
FormulaPodrazumevano prazno i popunjeno samo kada je tekst formule eksplicitno uključen

Pravila za formule

Podrazumevano ćelije sa formulama koriste postojeći uskladišteni keš i nikada ne izračunavaju, ne pozivaju korisničku funkciju, ne ažuriraju stanje neažurnosti niti upisuju keš nazad u radnu svesku

Dodajte xlsvIncludeFormulaText u Options kada je potreban tekst formule; Classic po potrebi kreira dekoder privatnog za prikaz, dok XLSX kopira svoj uskladišteni string formule, i nijedan put ne inicijalizuje niti menja izračunavač radne sveske TXLSReadOnlyViewOptions = set of TXLSReadOnlyViewOption. Classic po potrebi kreira dekoder privatnog za prikaz, dok XLSX kopira svoj sačuvani string formule, i nijedan put ne inicijalizuje niti menja kalkulator radne sveske

Formula bez učitanog ili izračunatog keša izveštava HasFormulaCache=False i ostavlja Value kao Unassigned

Dodajte xlsvEvaluateFormulas za izračunavanje formula kroz izračunavač, stanje rekurzije, skalarni keš, keš matrica i keš kompajliranih formula privatne za prikaz; dobijeni Value i FormulaEvaluation.Value nikada ne zamenjuju uskladišteni keš radne sveske niti polja izvršnog okruženja kompajliranih formula

Standardne tabelarne greške vraćaju se kao Variant Standardne tabelarne greške vraćaju se kao Variant vrednosti grešaka sa xlfesCalculated, dok nepodržana ili unutrašnja neuspela izračunavanja izveštavaju xlfesFailed i zadržavaju izvorni uskladišteni keš u FormulaCache

Ponovljena čitanja kroz jedan prikaz ponovo koriste njegov privatni keš izračunavanja za generaciju zakupa, dok različiti prikazi ostaju nezavisni i mogu istovremeno da izračunavaju istu deljenu formulu

Izračunavanje spoljnih formula u XLSX-u čita samo keš externalLink iz lokalne datoteke i nikada ne dereferencira slabu registraciju žive radne sveske niti izvodi spoljni ulazno-izlazni rad

Niti i učinkovitost

Koristite jedan prikaz po radnoj niti; odvojeni prikazi mogu da skeniraju različite radne listove ili istovremeno da izračunavaju istu formulu, dok pozivaoci ne smeju da menjaju aktivni list ili opcije jednog prikaza iz druge niti

Nakon kreiranja uobičajena čitanja ćelija ne ulaze u monitor ni kritičnu sekciju jer zakup sprečava istovremenu mutaciju radne sveske

Provera otpuštanja drži svaki neaktivan prikaz ispod 64 KiB fiksnog stanja, sto neaktivnih prikaza ispod 8 MiB, a kreiranje prikaza nezavisno od veličine radne sveske sa pragom od jedne milisekunde p95 na modelu sa milion ćelija

Testni paket učinkovitosti takođe ograničava uticaj neaktivnog prikaza na postojeća jednonitna skeniranja kursorom na pet odsto i zahteva da osam prikaza koja skeniraju nezavisne radne listove postignu najmanje petostruku propusnost u odnosu na jedan prikaz na računaru za proveru

Primer

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 svesku preko njenog interfejsa vlasnika pre kreiranja prikaza

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đe