Documentație HotXLS

Metoda CreateReadOnlyView

Creează o vedere ușoară, doar-citire, peste un model de registru de lucru Classic sau XLSX încărcat

Sintaxă

function CreateReadOnlyView: IXLSReadOnlyWorkbookView;

CreateReadOnlyView este declarat de clasicul IXLSWorkbook în lxHandle și de XLSX IXLSXWorkbookOwner în lxHandleX; interfața comună de vedere, opțiunile și tipurile de instantanee sunt declarate în lxStandard

Starea și durata de viață a vederii

Crearea unei vederi are cost constant și nu traversează foi de lucru, celule, stiluri, nume sau desene

Fiecare vedere are propriul său ActiveSheetIndex cu indexare de la 1, astfel încât mai multe vederi pot selecta foi de lucru diferite fără a schimba clasicul ActiveSheetIndex sau XLSX ActiveIndex, IsSelected și ActiveTab

Vederea deține un lease de citire cât timp există, iar mutațiile registrului de lucru eșuează rapid cu EXLSWorkbookWriteGuardUnavailable înainte de a schimba modelul

Păstrați registrele de lucru clasice prin IXLSWorkbook și registrele de lucru XLSX prin IXLSXWorkbookOwner când utilizați vederi; interfața deținător și fiecare vedere rețin apoi aceeași referință numărată către registru de lucru și pot fi eliberate în orice ordine

Nu apelați Free pe un TXLSWorkbook sau TXLSXWorkbook concret cât timp o interfață deținător sau o vedere îl mai referă

Instantanee de celule

TryReadCell folosește coordonate de rând și coloană cu indexare de la 1 pe foaia activă a vederii și returnează False doar când nu există o celulă stocată la acea coordonată

O citire a unei celule lipsă nu creează stocare și nu avansează generația registrului de lucru

TXLSReadOnlyCellSnapshot deține numele foii, valoarea, textul formulei, informațiile de cache și evaluare, coordonatele, tipul și indexul de stil și nu expune niciodată un obiect inscriptibil de registru de lucru

CâmpSemnificație
SheetIndex / SheetNameIdentitatea foii de lucru locală vederii
Row / ColCoordonate de celulă cu indexare de la 1
StyleIndexIndex clasic XF stocat sau index de format de celulă XLSX
KindClasificare text, număr, dată-oră, boolean, formulă, eroare sau gol
ValueValoare scalară stocată sau valoare din cache-ul formulei, fără recalcul
HasFormulaCache / FormulaCachePrezența cache-ului formulei, proveniența, tipul valorii și valoarea deținută din cache
FormulaEvaluationDacă evaluarea nu era aplicabilă, nu a fost cerută, a calculat sau a eșuat, plus codul de rezultat al evaluatorului și valoarea deținută a rezultatului
FormulaGol implicit și populat doar când textul formulei este activat explicit

Politica formulelor

Implicit, celulele cu formule folosesc cache-ul stocat existent și nu calculează niciodată, nu invoacă o funcție de utilizator, nu actualizează starea dirty și nu scriu un cache înapoi în registrul de lucru

Adăugați xlsvIncludeFormulaText la Options când este necesar textul formulei; clasicul creează la cerere un decoder privat al vederii, în timp ce XLSX își copiază șirul de formulă stocat, și niciuna dintre căi nu inițializează sau nu modifică calculatorul registrului de lucru

O formulă fără cache încărcat sau calculat raportează HasFormulaCache=False și lasă Value ca Unassigned

Adăugați xlsvEvaluateFormulas pentru a evalua formulele printr-un calculator privat al vederii, stare de recursivitate, cache scalar, cache de matrice și cache de formule compilate XLSX; Value rezultată și FormulaEvaluation.Value nu înlocuiesc niciodată cache-ul stocat al registrului de lucru sau câmpurile de execuție ale formulelor compilate

Erorile obișnuite de foi de calcul sunt returnate ca valori de eroare Variant cu xlfesCalculated, în timp ce evaluările nesuportate sau interne eșuate raportează xlfesFailed și păstrează cache-ul stocat original în FormulaCache

Citirile repetate printr-o vedere reutilizează cache-ul său privat de evaluare pentru generația lease-ului, în timp ce vederi diferite rămân independente și pot evalua simultan aceeași formulă partajată

Evaluarea formulelor externe XLSX citește doar cache-ul externalLink local fișierului și nu dereferențiază niciodată o înregistrare slabă a unui registru de lucru activ și nu efectuează I/O extern

Fire de execuție și performanță

Utilizați o vedere per fir de execuție lucrător; vederi separate pot scana foi de lucru diferite sau pot evalua aceeași formulă simultan, în timp ce apelanții nu trebuie să modifice foaia activă sau opțiunile unei vederi dintr-un alt fir

După creare, citirile obișnuite de celule nu intră într-un monitor sau într-o secțiune critică, deoarece lease-ul previne mutația concurentă a registrului de lucru

Validarea eliberării menține fiecare vedere inactivă sub 64 KiB de stare fixă, o sută de vederi inactive sub 8 MiB, iar crearea vederii independentă de dimensiunea registrului de lucru cu un prag p95 de un milisecund pe un model de un milion de celule

Suita de performanță limitează de asemenea efectul unei vederi inactive asupra scanărilor existente cu cursor pe un singur fir la cinci procente și cere opt vederi care scanează foi de lucru independente să atingă cel puțin de cinci ori debitul unei singure vederi pe gazda de validare

Exemplu

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;

Pentru XLSX, rețineți registrul de lucru concret prin interfața sa deținătoare înainte de a crea vederi

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;

Consultați și