CreateReadOnlyView-methode
Maakt een lichtgewicht alleen-lezen weergave aan over een geladen klassiek of XLSX-werkmapmodel
Syntaxis
function CreateReadOnlyView: IXLSReadOnlyWorkbookView;
CreateReadOnlyView wordt gedeclareerd door klassieke IXLSWorkbook in lxHandle en door XLSX IXLSXWorkbookOwner in lxHandleX; de gedeelde weergave-interface, opties en momentopnametypen worden gedeclareerd in lxStandard
Weergavestatus en levensduur
Het aanmaken van een weergave kost constante tijd en doorloopt geen werkbladen, cellen, stijlen, namen of tekeningen
Elke weergave heeft zijn eigen ActiveSheetIndexmet basis 1, zodat verschillende weergaven andere werkbladen kunnen kiezen zonder klassieke ActiveSheetIndex of XLSX ActiveIndex, IsSelecteden ActiveTab
De weergave houdt een leeslease vast zolang ze bestaat, en werkmapmutaties falen snel met EXLSWorkbookWriteGuardUnavailable voordat het model wordt gewijzigd
Houd klassieke werkmappen vast via IXLSWorkbook en XLSX-werkmappen via IXLSXWorkbookOwner wanneer u weergaven gebruikt; de eigenaarsinterface en elke weergave houden dan dezelfde referentiegetelde werkmap vast en mogen in willekeurige volgorde worden vrijgegeven
Roep Free niet aan op een concrete TXLSWorkbook of TXLSXWorkbook terwijl er nog een eigenaarsinterface of weergave naartoe verwijst
Celmomentopnames
TryReadCell gebruikt rij- en kolomcoördinaten met basis 1 op het actieve werkblad van de weergave en geeft alleen False terug wanneer er op die coördinaat geen opgeslagen cel bestaat
Het lezen van een ontbrekende cel maakt geen opslag aan en schuift de werkmapgeneratie niet op
TXLSReadOnlyCellSnapshot is eigenaar van zijn werkbladnaam, waarde, formuletekst, cache- en evaluatiegegevens, coördinaten, soort en stijlindex en legt nooit een schrijfbaar werkmapobject bloot
| Veld | Betekenis |
|---|---|
SheetIndex / SheetName | Weergavelokale werkbladidentiteit |
Row / Col | Celcoördinaten met basis 1 |
StyleIndex | Opgeslagen klassieke XF-index of XLSX-celformaatindex |
Kind | Classificatie als tekst, getal, datum-tijd, booleaans, formule, fout of leeg |
Value | Opgeslagen scalaire waarde of formulecachewaarde zonder herberekening |
HasFormulaCache / FormulaCache | Aanwezigheid, herkomst, waardesoort en eigen gecachte waarde van de formulecacheTXLSFormulaCacheState), value kind (TXLSFormulaCacheValueKind), and owned cached value |
FormulaEvaluation | A TXLSFormulaEvaluationInfo record whose TXLSFormulaEvaluationState Of evaluatie niet van toepassing was, niet is aangevraagd, is berekend of is mislukt, plus de resultaatcode van de evaluator en de eigen resultaatwaarde |
Formula | Standaard leeg en alleen gevuld wanneer formuletekst expliciet is ingeschakeld |
Formulebeleid
Standaard gebruiken formulecellen de bestaande opgeslagen cache en berekenen ze nooit, roepen ze nooit een gebruikersfunctie aan, werken ze nooit de dirty-status bij en schrijven ze nooit een cache terug naar de werkmap
Add xlsvIncludeFormulaText Voeg Options toe aan TXLSReadOnlyViewOptions = set of TXLSReadOnlyViewOptionwanneer formuletekst nodig is; klassiek maakt op verzoek een weergave-eigen decoder aan, terwijl XLSX zijn opgeslagen formuletekenreeks kopieert, en geen van beide paden initialiseert of wijzigt de werkmapcalculator
Een formule zonder geladen of berekende cache meldt HasFormulaCache=False en laat Value als Unassigned
Voeg xlsvEvaluateFormulas toe om formules te evalueren via een weergave-eigen calculator, recursiestatus, scalaire cache, array-matrixcache en XLSX-cache voor gecompileerde formules; de resulterende Value en FormulaEvaluation.Value vervangen nooit de opgeslagen cache van de werkmap of de runtimevelden van gecompileerde formules
Standaardfouten van het rekenblad worden teruggegeven als Variant -foutwaarden met xlfesCalculated, terwijl niet-ondersteunde of interne evaluatiefouten xlfesFailed melden en de oorspronkelijke opgeslagen cache in FormulaCache
Herhaalde lezingen via één weergave hergebruiken de privé-evaluatiecache van die weergave voor de leasegeneratie, terwijl verschillende weergaven onafhankelijk blijven en dezelfde gedeelde formule gelijktijdig mogen evalueren
XLSX-evaluatie van externe formules leest alleen de bestandslokale externalLink -cache, verwijst nooit door naar een zwakke registratie van een live werkmap en voert geen externe I/O uit
Threading en prestaties
Gebruik één weergave per werkthread; aparte weergaven mogen verschillende werkbladen doorzoeken of dezelfde formule gelijktijdig evalueren, terwijl aanroepers het actieve werkblad of de opties van een weergave niet vanuit een andere thread mogen muteren
Na het aanmaken treden gewone cellezingen niet binnen in een monitor of kritieke sectie, omdat de lease gelijktijdige werkmapmutatie voorkomt
De validatie bij vrijgave houdt elke inactieve weergave onder 64 KiB vaste status, honderd inactieve weergaven onder 8 MiB, en het aanmaken van weergaven blijft onafhankelijk van de werkgrootte met een p95-grens van één milliseconde op een model met een miljoen cellen
De prestatiemeting beperkt bovendien het effect van een inactieve weergave op bestaande single-thread cursorscans tot vijf procent en vereist dat acht weergaven die onafhankelijke werkbladen doorzoeken minstens vijf keer de doorvoer van één weergave halen op de validatiehost
Voorbeeld
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;Houd bij XLSX de concrete werkmap vast via de eigenaarsinterface voordat u weergaven aanmaakt
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;