HotXLS-dokumentasjon

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

FeltBetydning
SheetIndex / SheetNameVisningslokal arkidentitet
Row / ColÉnbaserte cellekoordinater
StyleIndexLagret Classic XF-indeks eller XLSX-celleformatindeks
KindKlassifisering som tekst, tall, dato-klokkeslett, Boolean, formel, feil eller tom
ValueLagret skalarverdi eller formelbufferverdi uten rekalkulering
HasFormulaCache / FormulaCacheTilstedeværelse og opphav for formelbufferen (TXLSFormulaCacheState), verditype (TXLSFormulaCacheValueKind) og eid bufret verdi
FormulaEvaluationEn TXLSFormulaEvaluationInfo-post hvis TXLSFormulaEvaluationState rapporterer ikke aktuell, ikke etterspurt, beregnet eller mislyktes, pluss evaluatorens resultatkode og eid resultatverdi
FormulaTom 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;

Se også