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
| Felt | Betydning |
|---|---|
SheetIndex / SheetName | Visningslokal regnearksidentitet |
Row / Col | Cellekoordinater, der er 1-baserede |
StyleIndex | Gemt klassisk XF-indeks eller XLSX-celleformatindeks |
Kind | Klassificering som tekst, tal, dato-klokkeslæt, boolesk, formel, fejl eller tom |
Value | Gemt skalær værdi eller formelcache-værdi uden genberegning |
HasFormulaCache / FormulaCache | Formelcachens tilstedeværelse, oprindelse, værdiart og ejede cachede værdi |
FormulaEvaluation | Om evaluering ikke var anvendelig, ikke blev anmodet, blev beregnet eller fejlede, plus evaluatorens resultatkode og ejede resultatværdi |
Formula | Tom 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;