HotXLS-documentatie

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

VeldBetekenis
SheetIndex / SheetNameWeergavelokale werkbladidentiteit
Row / ColCelcoördinaten met basis 1
StyleIndexOpgeslagen klassieke XF-index of XLSX-celformaatindex
KindClassificatie als tekst, getal, datum-tijd, booleaans, formule, fout of leeg
ValueOpgeslagen scalaire waarde of formulecachewaarde zonder herberekening
HasFormulaCache / FormulaCacheAanwezigheid, herkomst, waardesoort en eigen gecachte waarde van de formulecacheTXLSFormulaCacheState), value kind (TXLSFormulaCacheValueKind), and owned cached value
FormulaEvaluationA 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
FormulaStandaard 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;

Zie ook