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ält | Betydelse |
|---|---|
SheetIndex / SheetName | Det vylokala kalkylbladets identitet |
Row / Col | Ettbaserade cellkoordinater |
StyleIndex | Lagrat klassiskt XF-index eller XLSX-cellformatindex |
Kind | Klassificering som text, tal, datum-tid, boolesk, formel, fel eller tom |
Value | Lagrat skalärt värde eller formelcache-värde utan omberäkning |
HasFormulaCache / FormulaCache | Förekomst, ursprung, värdetyp och eget cachat värde för formelcachenTXLSFormulaCacheState), value kind (TXLSFormulaCacheValueKind), and owned cached value |
FormulaEvaluation | A 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 |
Formula | Tom 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;