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âmp | Semnificație |
|---|---|
SheetIndex / SheetName | Identitatea foii de lucru locală vederii |
Row / Col | Coordonate de celulă cu indexare de la 1 |
StyleIndex | Index clasic XF stocat sau index de format de celulă XLSX |
Kind | Clasificare text, număr, dată-oră, boolean, formulă, eroare sau gol |
Value | Valoare scalară stocată sau valoare din cache-ul formulei, fără recalcul |
HasFormulaCache / FormulaCache | Prezența cache-ului formulei, proveniența, tipul valorii și valoarea deținută din cache |
FormulaEvaluation | Dacă 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 |
Formula | Gol 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;