HotXLS dokumentáció

CreateReadOnlyView metódus

Könnyű, csak olvasható nézetet hoz létre egy betöltött Classic vagy XLSX munkafüzet-modell felett

Szintaxis

function CreateReadOnlyView: IXLSReadOnlyWorkbookView;

A CreateReadOnlyView-t a classic IXLSWorkbook a lxHandle-ben, az XLSX IXLSXWorkbookOwner pedig a lxHandleX-ben deklarálja; a megosztott nézetinterfészt, a beállításokat és a pillanatképtípusokat a lxStandard deklarálja

A nézet állapota és élettartama

A nézet létrehozása konstans idejű, és nem járja be a munkalapokat, cellákat, stílusokat, neveket vagy rajzokat

Minden nézetnek saját, 1-alapú ActiveSheetIndex értéke van, így több nézet különböző munkalapokat választhat a classic ActiveSheetIndex vagy az XLSX ActiveIndex, IsSelected és ActiveTab módosítása nélkül

A nézet létezése alatt olvasási foglalást tart, és a munkafüzet-mutációk fail-fast módon meghiúsulnak EXLSWorkbookWriteGuardUnavailable kivétellel, mielőtt a modell megváltozna

Nézetek használatakor a classic munkafüzeteket IXLSWorkbook-on, az XLSX munkafüzeteket IXLSXWorkbookOwner-on keresztül tartsa meg; a tulajdonosinterfész és minden nézet ugyanazt a referenciaszámlált munkafüzetet tartja meg, és bármilyen sorrendben felszabadíthatók

Ne hívja a Free metódust egy konkrét TXLSWorkbook vagy TXLSXWorkbook objektumon, amíg arra tulajdonosinterfész vagy nézet még hivatkozik

Cellapillanatképek

A TryReadCell a nézet aktív munkalapján 1-alapú sor- és oszlopkoordinátákat használ, és csak akkor ad vissza False értéket, ha az adott koordinátán nincs tárolt cella

Egy hiányzó cella olvasása nem hoz létre tárolást, és nem mozgatja előre a munkafüzet-generációt

A TXLSReadOnlyCellSnapshot saját tulajdonában tartja a munkalap nevét, az értéket, a képlet szövegét, a gyorsítótár- és kiértékelési információkat, a koordinátákat, a fajtát és a stílusindexet, és soha nem fed fel írható munkafüzet-objektumot

MezőJelentés
SheetIndex / SheetNameNézeten belüli munkalap-identitás
Row / Col1-alapú cellakoordináták
StyleIndexTárolt classic XF index vagy XLSX cellaformátum-index
KindSzöveg, szám, dátum-idő, logikai, képlet, hiba vagy üres besorolás
ValueTárolt skalár érték vagy képletgyorsítótár-érték újraszámolás nélkül
HasFormulaCache / FormulaCacheA képletgyorsítótár jelenléte és eredete (TXLSFormulaCacheState), értéktípusa (TXLSFormulaCacheValueKind) és a saját tulajdonú gyorsítótárazott érték
FormulaEvaluationEgy TXLSFormulaEvaluationInfo rekord, amelynek TXLSFormulaEvaluationState állapota jelzi, hogy a kiértékelés nem volt alkalmazható, nem kérték, kiszámolták vagy meghiúsult, a kiértékelő eredménykódja és a saját tulajdonú eredményérték mellett
FormulaAlapértelmezetten üres, és csak akkor kerül feltöltésre, ha a képlet szövege explicit módon engedélyezett

Képletszabályzat

Alapértelmezetten a képletcellák a meglévő tárolt gyorsítótárat használják, és soha nem számolnak, nem hívnak felhasználói függvényt, nem frissítik a módosultsági állapotot, és nem írnak gyorsítótárat vissza a munkafüzetbe

Adja hozzá az xlsvIncludeFormulaText értéket az Options halmazhoz, ha a képlet szövege szükséges; a beállításhalmaz típusa TXLSReadOnlyViewOptions = set of TXLSReadOnlyViewOption. A Classic igény szerint nézetprivát dekódert hoz létre, míg az XLSX átmásolja a tárolt képletsztringjét, és egyik út sem inicializálja vagy módosítja a munkafüzet-kalkulátort

Egy betöltött vagy kiszámolt gyorsítótár nélküli képlet HasFormulaCache=False értéket jelez, és a Value értéke Unassigned marad

Adja hozzá az xlsvEvaluateFormulas értéket a képletek nézetprivát kalkulátoron, rekurziós állapoton, skalár gyorsítótáron, tömbmátrix-gyorsítótáron és XLSX lefordított képlet-gyorsítótáron keresztüli kiértékeléséhez; a kapott Value és FormulaEvaluation.Value soha nem helyettesíti a munkafüzet tárolt gyorsítótárát vagy a lefordított képlet futásidejű mezőit

A táblázatkezelők szabványos hibái Variant hibaértékként térnek vissza xlfesCalculated állapottal, míg a nem támogatott vagy belső kiértékelési hibák xlfesFailed állapotot jeleznek, és megtartják az eredeti tárolt gyorsítótárat a FormulaCache-ben

Egy nézeten keresztüli ismételt olvasások a foglalás generációjára vonatkozó privát kiértékelési gyorsítótárát használják újra, míg a különböző nézetek függetlenek maradnak, és ugyanazt a megosztott képletet egyidejűleg is kiértékelhetik

Az XLSX külső képletek kiértékelése csak a fájlhelyi externalLink gyorsítótárat olvassa, és soha nem old fel gyenge, élő munkafüzet-regisztrációt, valamint nem végez külső I/O-t

Szálkezelés és teljesítmény

Használjon nézetet munkaszálonként; a különálló nézetek bejárhatnak különböző munkalapokat, vagy egyidejűleg értékelhetik ki ugyanazt a képletet, miközben a hívó nem módosíthatja egyik nézet aktív munkalapját vagy beállításait egy másik szálról

Létrehozás után a szokásos cellaolvasások nem lépnek monitorba vagy kritikus szakaszba, mert a foglalás megakadályozza a munkafüzet egyidejű módosítását

A felszabadítási validáció minden üresjárati nézetet 64 KiB alatti rögzített állapotban tart, száz üresjárati nézetet 8 MiB alatt, a nézetlétrehozást pedig függetlenné teszi a munkafüzet méretétől, egymillió cellás modellen egymilliomásodperces p95 kapuval

A teljesítményteszt továbbá az üresjárati nézet meglévő egyszálas kurzorbejárásokra gyakorolt hatását öt százalékra korlátozza, és megköveteli, hogy nyolc, független munkalapokat bejáró nézet legalább ötszörös egynézeti áteresztőképességet érjen el a validációs gazdagépen

Példa

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;

XLSX esetén tartsa meg a konkrét munkafüzetet a tulajdonosinterfészén keresztül, mielőtt nézeteket hozna létre

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;

Lásd még