HotXLS-dokumentation

Metoden CreateReadOnlyView

Skapar en lättviktig skrivskyddad vy över en inläsad Classic- eller XLSX-arbetsboksmodell

Syntax

function CreateReadOnlyView: IXLSReadOnlyWorkbookView;

CreateReadOnlyView deklareras av klassiska IXLSWorkbook i lxHandle och av XLSX IXLSXWorkbookOwner i lxHandleX; det gemensamma vygränssnittet, alternativen och ögonblicksbildstyperna deklareras i lxStandard

Vystatus och livstid

Att skapa en vy tar konstant tid och traverserar inte kalkylblad, celler, format, namn eller ritningar

Varje vy har sitt eget ettbaserade ActiveSheetIndex, så flera vyer kan välja olika kalkylblad utan att klassisk ActiveSheetIndex eller XLSX ActiveIndex, IsSelectedoch ActiveTab

Vyn håller ett läslån så länge den existerar, och arbetsboksmutationer misslyckas omedelbart med EXLSWorkbookWriteGuardUnavailable innan modellen ändras

Håll Classic-arbetsböcker via IXLSWorkbook och XLSX-arbetsböcker via IXLSXWorkbookOwner när vyer används; ägar-gränssnittet och varje vy behåller då samma referensräknade arbetsbok och kan släppas i valfri ordning

Anropa inte Free på en konkret TXLSWorkbook eller TXLSXWorkbook medan ett ägar-gränssnitt eller en vy fortfarande refererar till den

Cellögonblicksbilder

TryReadCell använder ettbaserade rad- och kolumnkoordinater på vyens aktiva kalkylblad och returnerar False endast när ingen lagrad cell finns vid koordinaten

En läsning av en saknad cell skapar ingen lagring och flyttar inte fram arbetsboksgenerationen

TXLSReadOnlyCellSnapshot äger sitt kalkylbladsnamn, värde, formeltext, cache- och utvärderingsinformation, koordinater, sort och formatindex och exponerar aldrig ett skrivbart arbetsboksobjekt

FältBetydelse
SheetIndex / SheetNameDet vylokala kalkylbladets identitet
Row / ColEttbaserade cellkoordinater
StyleIndexLagrat klassiskt XF-index eller XLSX-cellformatindex
KindKlassificering som text, tal, datum-tid, boolesk, formel, fel eller tom
ValueLagrat skalärt värde eller formelcache-värde utan omberäkning
HasFormulaCache / FormulaCacheFörekomst, ursprung, värdetyp och eget cachat värde för formelcachenTXLSFormulaCacheState), value kind (TXLSFormulaCacheValueKind), and owned cached value
FormulaEvaluationA TXLSFormulaEvaluationInfo record whose TXLSFormulaEvaluationState Huruvida utvärdering inte var tillämplig, inte efterfrågad, beräknad eller misslyckad, plus utvärderarens resultatkod och eget resultatvärde
FormulaTom som standard och fylld endast när formeltext uttryckligen har aktiverats

Formelpolicy

Som standard använder formelceller den befintliga lagrade cachen och beräknar aldrig, anropar aldrig en användarfunktion, uppdaterar aldrig skräpstatus eller skriver tillbaka någon cache till arbetsboken

Add xlsvIncludeFormulaText Lägg till Options i TXLSReadOnlyViewOptions = set of TXLSReadOnlyViewOptionnär formeltext krävs; Classic skapar en vyprivat avkodare på begäran, medan XLSX kopierar sin lagrade formulsträng, och ingen av vägarna initierar eller ändrar arbetsbokens kalkylator

En formel utan inläst eller beräknad cache rapporterar HasFormulaCache=False och lämnar Value som Unassigned

Lägg till xlsvEvaluateFormulas för att utvärdera formler genom en vyprivat kalkylator, rekursionsstatus, skalärcache, matriscache och XLSX-cache för kompilerade formler; det resulterande Value och FormulaEvaluation.Value ersätter aldrig arbetsbokens lagrade cache eller körtidsfält för kompilerade formler

Standardkalkylbladsfel returneras som Variant -felvärden med xlfesCalculated, medan utvärderingsfel som inte stöds eller är interna rapporterar xlfesFailed och behåller den ursprungliga lagrade cachen i FormulaCache

Upprepade läsningar genom en vy återanvänder dess privata utvärderingscache för lånets generation, medan olika vyer förblir oberoende och kan utvärdera samma delade formel samtidigt

XLSX extern formelutvärdering läser endast den fillokala externalLink -cachen och avrefererar aldrig en svag registrering av en live-arbetsbok eller utför extern I/O

Trådning och prestanda

Använd en vy per arbetstråd; separata vyer kan skanna olika kalkylblad eller utvärdera samma formel samtidigt, medan anropare inte får ändra en vys aktiva kalkylblad eller alternativ från en annan tråd

Efter skapandet går vanliga celläsningar inte in i en monitor eller kritisk sektion, eftersom lånet förhindrar samtidig arbetsboksmutation

Vid frigörandet valideras att varje inaktiv vy hålls under 64 KiB fast status, att hundra inaktiva vyer hålls under 8 MiB och att skapandet av vyer är oberoende av arbetsboksstorleken, med ett p95-tak på en millisekund på en modell med en miljon celler

Prestandasviten begränsar också effekten av en inaktiv vy på befintliga enkeltrådade markörskanningar till fem procent och kräver att åtta vyer som skannar oberoende kalkylblad når minst fem gånger genomströmningen för en enda vy på valideringsvärden

Exempel

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;

För XLSX, behåll den konkreta arbetsboken via dess ägar-gränssnitt innan vyer skapas

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 även