HotXLS-dokumentation

CreateReadOnlyView metode

Opretter en letvægts skrivebeskyttet visning over en indlæst klassisk eller XLSX-projektmappemodel

Syntaks

function CreateReadOnlyView: IXLSReadOnlyWorkbookView;

CreateReadOnlyView er deklareret af Classic IXLSWorkbook i lxHandle og XLSX IXLSXWorkbookOwner i lxHandleX; den fælles visningsgrænseflade, indstillinger og snapshot-typer er deklareret i lxStandard

Visningstilstand og levetid

Oprettelse af en visning tager konstant tid og gennemløber ikke regneark, celler, typografier, navne eller tegninger

Alle visninger har deres eget 1-baserede ActiveSheetIndex, så flere visninger kan vælge forskellige regneark uden at ændre Classic ActiveSheetIndex eller XLSX ActiveIndex, IsSelected og ActiveTab

Visningen holder en læse-lease, mens den eksisterer, og projektmappemutationer fejler hurtigt med EXLSWorkbookWriteGuardUnavailable, før modellen ændres

Hold klassiske projektmapper via IXLSWorkbook og XLSX-projektmapper via IXLSXWorkbookOwner, når du bruger visninger; ejerskabsgrænsefladen og enhver visning fastholder derefter den samme referencetællingsstyrede projektmappe og kan frigives i vilkårlig rækkefølge

Kald ikke Free på en konkret TXLSWorkbook eller TXLSXWorkbook, mens en ejerskabsgrænseflade eller visning stadig refererer til den

Celle-snapshots

TryReadCell bruger 1-baserede række- og kolonnekoordinater på visningens aktive ark og returnerer False kun, når der ikke findes en gemt celle på den koordinat

Læsning af en manglende celle opretter ikke lager og fremfører ikke projektmappens generation

TXLSReadOnlyCellSnapshot ejer sit arkenavn, værdi, formeltekst, cache- og evalueringsoplysninger, koordinater, art og stilindeks og eksponerer aldrig et skrivbart projektmappeobjekt

FeltBetydning
SheetIndex / SheetNameVisningslokal regnearksidentitet
Row / ColCellekoordinater, der er 1-baserede
StyleIndexGemt klassisk XF-indeks eller XLSX-celleformatindeks
KindKlassificering som tekst, tal, dato-klokkeslæt, boolesk, formel, fejl eller tom
ValueGemt skalær værdi eller formelcache-værdi uden genberegning
HasFormulaCache / FormulaCacheFormelcachens tilstedeværelse, oprindelse, værdiart og ejede cachede værdi
FormulaEvaluationOm evaluering ikke var anvendelig, ikke blev anmodet, blev beregnet eller fejlede, plus evaluatorens resultatkode og ejede resultatværdi
FormulaTom som standard og kun udfyldt, når formeltekst eksplicit er aktiveret

Formelpolitik

Som standard bruger formelceller den eksisterende gemte cache og beregner aldrig, kalder aldrig en brugerfunktion, opdaterer aldrig dirty-tilstand eller skriver aldrig en cache tilbage til projektmappen

Tilføj xlsvIncludeFormulaText til Options, når formeltekst kræves; Classic opretter ved behov en visningsprivat dekoder, mens XLSX kopierer sin gemte formelstreng, og ingen af vejene initialiserer eller ændrer projektmappens beregningsmotor

En formel uden indlæst eller beregnet cache rapporterer HasFormulaCache=False og efterlader Value som Unassigned

Tilføj xlsvEvaluateFormulas for at evaluere formler gennem en visningsprivat beregningsmotor, rekursionstilstand, skalærcache, matrix-cache og XLSX-cache for kompilerede formler; den resulterende Value og FormulaEvaluation.Value erstatter aldrig projektmappens gemte cache eller kompilerede formelkørselsfelter

Standardregnearksfejl returneres som Variant-fejlværdier med xlfesCalculated, mens ikke-understøttede eller interne evalueringsfejl rapporterer xlfesFailed og bevarer den oprindelige gemte cache i FormulaCache

Gentagne læsninger gennem én visning genbruger dens private evalueringscache for lease-generationen, mens forskellige visninger forbliver uafhængige og kan evaluere den samme delte formel samtidig

Ekstern XLSX-formelevaluering læser kun den fil-lokale externalLink-cache og afrefererer aldrig en svag registrering af en levende projektmappe eller udfører ekstern I/O

Tråde og ydelse

Brug én visning pr. arbejdertråd; separate visninger kan scanne forskellige regneark eller evaluere den samme formel samtidig, mens kaldere ikke må mutere én visnings aktive ark eller indstillinger fra en anden tråd

Efter oprettelse går almindelige cellelæsninger ikke ind i en monitor eller kritisk sektion, fordi leasen forhindrer samtidig projektmappemutation

Frigørelsesvalidering holder hver inaktiv visning under 64 KiB fast tilstand, hundrede inaktive visninger under 8 MiB, og visningsoprettelse uafhængig af projektmappens størrelse med en p95-grænse på ét millisekund på en model med en million celler

Ydelsespakken begrænser også en inaktiv visnings effekt på eksisterende enkelttrådede cursor-scanninger til fem procent og kræver, at otte visninger, der scanner uafhængige regneark, opnår mindst fem gange den enkelte visnings gennemstrømning på valideringsværten

Eksempel

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;

For XLSX skal du fastholde den konkrete projektmappe via dens ejerskabsgrænseflade, før du opretter visninger

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;

Se også