HotXLS-dokumentaatio

CreateReadOnlyView metodi

Luo kevyen vain luku -näkymän ladatun Classic- tai XLSX-työkirjamallin yli

Syntaksi

function CreateReadOnlyView: IXLSReadOnlyWorkbookView;

CreateReadOnlyView määritellään klassisessa IXLSWorkbook-rajapinnassa yksikössä lxHandle ja XLSX:n IXLSXWorkbookOwner-rajapinnassa yksikössä lxHandleX; yhteinen näkymärajapinta, asetukset ja tilannekuvaltyypit määritellään yksikössä lxStandard

Näkymän tila ja elinkaari

Näkymän luominen on vakioaikaista, eikä se käy läpi laskentataulukoita, soluja, tyylejä, nimiä tai piirroksia

Jokaisella näkymällä on oma yhdestä alkava ActiveSheetIndex -arvonsa, joten useat näkymät voivat valita eri laskentataulukot muuttamatta klassista ActiveSheetIndex -arvoa tai XLSX:n ActiveIndex-, IsSelected- ja ActiveTab -arvoja

Näkymä pitää lukulainan olemassaolonsa ajan, ja työkirjan muokkaukset epäonnistuvat nopeasti EXLSWorkbookWriteGuardUnavailable -poikkeukseen ennen mallin muuttamista

Pidä Classic-työkirjoista kiinni IXLSWorkbook-rajapinnan ja XLSX-työkirjoista IXLSXWorkbookOwner-rajapinnan kautta näkymiä käytettäessä; omistajarajapinta ja jokainen näkymä pitävät sitten kiinni samasta viitelaskennallisesta työkirjasta, ja ne voidaan vapauttaa missä tahansa järjestyksessä

Älä kutsu Free -metodia konkreettiselle TXLSWorkbook- tai TXLSXWorkbook-oliolle, kun omistajarajapinta tai näkymä viittaa siihen vielä

Solutilannekuvat

TryReadCell käyttää yhdestä alkavia rivi- ja sarakekoordinaatteja näkymän aktiivisella laskentataulukolla ja palauttaa False vain, kun tallennettua solua ei ole kyseisissä koordinaateissa

Puuttuvan solun lukeminen ei luo tallennusta eikä siirrä työkirjan generointia eteenpäin

TXLSReadOnlyCellSnapshot omistaa laskentataulukkonsa nimen, arvon, kaavatekstin, välimuisti- ja evaluointitiedot, koordinaatit, lajin ja tyyliindeksin, eikä se koskaan paljasta kirjoitettavaa työkirjaoliota

KenttäMerkitys
SheetIndex / SheetNameNäkymäkohtaisen laskentataulukon identiteetti
Row / ColYhdestä alkavat solukoordinaatit
StyleIndexTallennettu klassinen XF-indeksi tai XLSX-solumuotoiluindeksi
KindLuokittelu tekstiksi, luvuksi, päivämäärä-ajaksi, totuusarvoksi, kaavaksi, virheeksi tai tyhjäksi
ValueTallennettu skalaariarvo tai kaavavälimuistin arvo ilman uudelleenlaskentaa
HasFormulaCache / FormulaCacheKaavavälimuistin olemassaolo ja alkuperä (TXLSFormulaCacheState), arvon laji (TXLSFormulaCacheValueKind) ja omistettu välimuistissa oleva arvo
FormulaEvaluationTXLSFormulaEvaluationInfo-tietue, jonka TXLSFormulaEvaluationState raportoi ei-sovellettavissa, ei-pyydetty, laskettu tai epäonnistui -tilan sekä evaluaattorin tuloskoodin ja omistetun tulosarvon
FormulaOletuksena tyhjä ja täyttyy vain, kun kaavateksti on otettu nimenomaisesti käyttöön

Kaavakäytäntö

Oletuksena kaavasolut käyttävät olemassa olevaa tallennettua välimuistia, eivätkä ne koskaan laske, kutsu käyttäjän funktiota, päivitä muutostilan tietoja tai kirjoita välimuistia takaisin työkirjaan

Lisää xlsvIncludeFormulaText lippuna Options-joukkoon, kun kaavateksti tarvitaan; valintajoukon tyyppi on TXLSReadOnlyViewOptions = set of TXLSReadOnlyViewOption. Classic luo näkymäkohtaisen dekooderin tarpeen mukaan, kun taas XLSX kopioi tallennetun kaavamerkkijononsa, eikä kumpikaan polku alusta tai muuta työkirjan laskinta

Kaava ilman ladattua tai laskettua välimuistia raportoi HasFormulaCache=False ja jättää Value -arvon Unassigned

Lisää xlsvEvaluateFormulas -lippu kaavojen arvioimiseksi näkymäkohtaisen laskimen, rekursiotilan, skalaarivälimuistin, matriisivälimuistin ja XLSX:n käännettyjen kaavojen välimuistin kautta; tuloksena oleva Value ja FormulaEvaluation.Value eivät koskaan korvaa työkirjan tallennettua välimuistia tai käännettyjen kaavojen ajonaikaisia kenttiä

Tavalliset laskentataulukkovirheet palautetaan Variant-virhearvoina tilalla xlfesCalculated, kun taas ei-tuetut tai sisäiset evaluointivirheet raportoivat tilan xlfesFailed ja säilyttävät alkuperäisen tallennetun välimuistin FormulaCache -kentässä

Toistuvat lukemat yhden näkymän kautta käyttävät uudelleen sen yksityistä evaluointivälimuistia lainan generoinnin ajan, kun taas eri näkymät pysyvät itsenäisinä ja voivat arvioida saman jaetun kaavan rinnakkain

XLSX:n ulkoisten kaavojen evaluointi lukee vain tiedostokohtaisen externalLink -välimuistin, eikä se koskaan viittaa heikkoon aktiivisen työkirjan rekisteröintiin tai tee ulkoista I/O:ta

Säikeistys ja suorituskyky

Käytä yhtä näkymää työskentelysäiettä kohden; erilliset näkymät voivat käydä läpi eri laskentataulukoita tai arvioida saman kaavan rinnakkain, kun taas kutsujien ei pidä muuttaa toisen säikeen näkymän aktiivista laskentataulukkoa tai asetuksia

Luomisen jälkeen tavalliset solujen lukemat eivät siirry monitoriin tai kriittiseen osioon, koska laina estää rinnakkaisen työkirjan muokkauksen

Vapautusvalidointi pitää jokaisen joutilaan näkymän alle 64 KiB kiinteässä tilassa, sadan joutilaan näkymän alle 8 MiB ja näkymien luomisen riippumattomana työkirjan koosta millisekunnin p95-rajan kanssa miljoonan solun mallilla

Suorituskykytestisarja rajoittaa myös joutilaan näkymän vaikutuksen olemassa oleviin yksisäikeisiin kursoriskannauksiin viiteen prosenttiin ja edellyttää, että kahdeksan itsenäisiä laskentataulukoita käyvää näkymää saavuttaa vähintään viisinkertaisen läpäisyn yhteen näkymään verrattuna validointikoneella

Esimerkki

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:ää varten pidä konkreettinen työkirja kiinni sen omistajarajapinnan kautta ennen näkymien luomista

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;

Katso myös