CreateReadOnlyView metode
Oppretter en lett skrivebeskyttet visning over en innlastet Classic- eller XLSX-arbeidsbokmodell
Syntaks
function CreateReadOnlyView: IXLSReadOnlyWorkbookView;
CreateReadOnlyView deklareres av Classic IXLSWorkbook i lxHandle og av XLSX IXLSXWorkbookOwner i lxHandleX; det delte visningsgrensesnittet, alternativene og øyeblikksbildetypene deklareres i lxStandard
Visningstilstand og levetid
Å opprette en visning tar konstant tid og traverserer ikke ark, celler, stiler, navn eller tegninger
Hver visning har sin egen énbaserte ActiveSheetIndex, slik at flere visninger kan velge ulike ark uten å endre Classic ActiveSheetIndex eller XLSX ActiveIndex, IsSelected og ActiveTab
Visningen holder en lese-lease så lenge den finnes, og arbeidsbokmutasjoner svikter raskt med EXLSWorkbookWriteGuardUnavailable før modellen endres
Hold Classic-arbeidsbøker gjennom IXLSWorkbook og XLSX-arbeidsbøker gjennom IXLSXWorkbookOwner når du bruker visninger; eiergrensesnittet og hver visning beholder da den samme referansetalte arbeidsboken og kan frigis i vilkårlig rekkefølge
Ikke kall Free på en konkret TXLSWorkbook- eller TXLSXWorkbook-instans mens et eiergrensesnitt eller en visning fortsatt refererer til den
Celleøyeblikksbilder
TryReadCell bruker énbaserte rad- og kolonnekoordinater på visningens aktive ark og returnerer False bare når det ikke finnes noen lagret celle på den koordinaten
Å lese en manglende celle oppretter ingen lagring og avanserer ikke arbeidsbokgenereringen
TXLSReadOnlyCellSnapshot eier sitt arknavn, verdi, formeltekst, buffer- og evalueringsinformasjon, koordinater, type og stilindeks, og eksponerer aldri et skrivbart arbeidsbokobjekt
| Felt | Betydning |
|---|---|
SheetIndex / SheetName | Visningslokal arkidentitet |
Row / Col | Énbaserte cellekoordinater |
StyleIndex | Lagret Classic XF-indeks eller XLSX-celleformatindeks |
Kind | Klassifisering som tekst, tall, dato-klokkeslett, Boolean, formel, feil eller tom |
Value | Lagret skalarverdi eller formelbufferverdi uten rekalkulering |
HasFormulaCache / FormulaCache | Tilstedeværelse og opphav for formelbufferen (TXLSFormulaCacheState), verditype (TXLSFormulaCacheValueKind) og eid bufret verdi |
FormulaEvaluation | En TXLSFormulaEvaluationInfo-post hvis TXLSFormulaEvaluationState rapporterer ikke aktuell, ikke etterspurt, beregnet eller mislyktes, pluss evaluatorens resultatkode og eid resultatverdi |
Formula | Tom som standard og fylt ut bare når formeltekst er eksplisitt aktivert |
Formelpolicy
Som standard bruker formelceller den eksisterende lagrede bufferen og beregner aldri, kaller aldri en brukerfunksjon, oppdaterer aldri skitten-tilstand eller skriver aldri en buffer tilbake til arbeidsboken
Legg til xlsvIncludeFormulaText i Options når formeltekst er nødvendig; valgsettet har type TXLSReadOnlyViewOptions = set of TXLSReadOnlyViewOption. Classic oppretter en visningsprivat dekoder etter behov, mens XLSX kopierer sin lagrede formelstreng, og ingen av veiene initialiserer eller endrer arbeidsbokens kalkulator
En formel uten innlastet eller beregnet buffer rapporterer HasFormulaCache=False og lar Value være Unassigned
Legg til xlsvEvaluateFormulas for å evaluere formler gjennom en visningsprivat kalkulator, rekursjonstilstand, skalarbuffer, matrisebuffer og XLSX-buffer for kompilerte formler; den resulterende Value og FormulaEvaluation.Value erstatter aldri arbeidsbokens lagrede buffer eller kjøretidsfeltene for kompilerte formler
Standard regnearkfeil returneres som Variant-feilverdier med xlfesCalculated, mens ustøttede eller interne evalueringsfeil rapporterer xlfesFailed og beholder den opprinnelige lagrede bufferen i FormulaCache
Gjentatte lesinger gjennom én visning gjenbruker dens private evalueringsbuffer for lease-genereringen, mens ulike visninger forblir uavhengige og kan evaluere den samme delte formelen samtidig
Ekstern formelevaluering i XLSX leser bare den fillokale externalLink-bufferen og refererer aldri til en svak registrering av en levende arbeidsbok eller utfører ekstern I/O
Tråder og ytelse
Bruk én visning per arbeidertråd; separate visninger kan gjennomsøke ulike ark eller evaluere den samme formelen samtidig, mens den som kaller, ikke kan endre én visnings aktive ark eller alternativer fra en annen tråd
Etter opprettelsen går ordinære celletesinger ikke inn i en monitor eller kritisk seksjon, fordi leasen forhindrer samtidig arbeidsbokmutasjon
Frigjøringsvalidering holder hver ledig visning under 64 KiB fast tilstand, hundre ledige visninger under 8 MiB, og visningsopprettelse uavhengig av arbeidsbokstørrelse med en p95-grense på ett millisekund på en modell med én million celler
Ytelsespakken begrenser også effekten av en ledig visning på eksisterende enkeltrådede markørgjennomsøkinger til fem prosent, og krever at åtte visninger som gjennomsøker uavhengige ark, oppnår minst fem ganger gjennomstrømningen til én enkelt visning på valideringsverten
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, behold den konkrete arbeidsboken gjennom eiergrensesnittet før du oppretter 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;