Metóda CreateReadOnlyView
Vytvorí ľahké zobrazenie len na čítanie nad modelom načítaného zošita Classic alebo XLSX
Syntax
function CreateReadOnlyView: IXLSReadOnlyWorkbookView;
CreateReadOnlyView deklaruje classic IXLSWorkbook v lxHandle a XLSX IXLSXWorkbookOwner v lxHandleX; zdieľané rozhranie zobrazenia, voľby a typy snímok sú deklarované v lxStandard
Stav zobrazenia a životnosť
Vytvorenie zobrazenia má konštantnú časovú zložitosť a neprechádza hárky, bunky, štýly, názvy ani kresby
Každé zobrazenie má vlastný ActiveSheetIndex indexovaný od jednotky, takže viacero zobrazení môže vyberať rôzne hárky bez zmeny classic ActiveSheetIndex alebo XLSX ActiveIndex, IsSelected a ActiveTab
Zobrazenie drží, pokiaľ existuje, čítaciu rezerváciu a mutácie zošita rýchlo zlyhajú s EXLSWorkbookWriteGuardUnavailable skôr, než sa model zmení
Pri používaní zobrazení držte classic zošity prostredníctvom IXLSWorkbook a XLSX zošity prostredníctvom IXLSXWorkbookOwner; rozhranie vlastníka aj každé zobrazenie potom uchovávajú ten istý zošit s referenčným počítaním a môžu byť uvoľnené v ľubovoľnom poradí
Nevolajte Free na konkrétny TXLSWorkbook alebo TXLSXWorkbook, kým naň stále odkazuje rozhranie vlastníka alebo zobrazenie
Snímky buniek
TryReadCell používa súradnice riadku a stĺpca indexované od jednotky na aktívnom hárku zobrazenia a vracia False len vtedy, keď na danej súradnici neexistuje uložená bunka
Čítanie chýbajúcej bunky nevytvára úložisko a neposúva generáciu zošita
TXLSReadOnlyCellSnapshot vlastní názov hárku, hodnotu, text vzorca, informácie o medzipamäti a vyhodnotení, súradnice, druh a index štýlu a nikdy nesprístupňuje zapisovateľný objekt zošita
| Pole | Význam |
|---|---|
SheetIndex / SheetName | Identita hárku v rámci zobrazenia |
Row / Col | Súradnice bunky indexované od jednotky |
StyleIndex | Uložený index classic XF alebo index formátu bunky XLSX |
Kind | Klasifikácia text, číslo, dátum-čas, Boolean, vzorec, chyba alebo prázdna bunka |
Value | Uložená skalárna hodnota alebo hodnota z medzipamäte vzorcov bez prepočtu |
HasFormulaCache / FormulaCache | Prítomnosť medzipamäte vzorcov, jej pôvod, druh hodnoty a vlastnená kešovaná hodnota |
FormulaEvaluation | Či vyhodnotenie nebolo použiteľné, nevyžiadalo sa, prebehlo alebo zlyhalo, plus kód výsledku vyhodnocovacieho modulu a vlastnená výsledná hodnota |
Formula | V predvolenom stave prázdny a vyplnený len vtedy, keď je text vzorca explicitne povolený |
Politika vzorcov
V predvolenom nastavení bunky so vzorcami používajú existujúcu uloženú medzipamäť a nikdy nepočítajú, nevolajú používateľskú funkciu, neaktualizujú stav neaktuálnosti ani nezapisujú medzipamäť späť do zošita
Pridajte xlsvIncludeFormulaText do Options, keď je vyžadovaný text vzorca; classic na požiadanie vytvorí súkromný dekodér zobrazenia, zatiaľ čo XLSX skopíruje svoj uložený reťazec vzorca, a ani jedna cesta neinicializuje ani nemení kalkulátor zošita
Vzorec bez načítanej alebo vypočítanej medzipamäte hlási HasFormulaCache=False a ponecháva Value ako Unassigned
Pridajte xlsvEvaluateFormulas na vyhodnocovanie vzorcov prostredníctvom súkromného kalkulátora zobrazenia, stavu rekurzie, skalárnej medzipamäti, medzipamäti polí-matíc a medzipamäte skompilovaných vzorcov XLSX; výsledné Value a FormulaEvaluation.Value nikdy nenahradia uloženú medzipamäť zošita ani behové polia skompilovaného vzorca
Štandardné chyby tabuľkových procesorov sa vracajú ako chybové hodnoty Variant s xlfesCalculated, zatiaľ čo nepodporované alebo interné zlyhania vyhodnotenia hlásia xlfesFailed a uchovávajú pôvodnú uloženú medzipamäť v FormulaCache
Opakované čítania cez jedno zobrazenie znovu používajú jeho súkromnú vyhodnocovaciu medzipamäť pre danú generáciu rezervácie, zatiaľ čo rôzne zobrazenia ostanú nezávislé a môžu vyhodnocovať ten istý zdieľaný vzorec súbežne
Vyhodnocovanie externých vzorcov XLSX číta len medzipamäť externalLink miestneho súboru a nikdy nedereferencuje slabú registráciu živého zošita ani nevykonáva externé I/O
Vlákna a výkon
Používajte jedno zobrazenie na pracovné vlákno; oddelené zobrazenia môžu prehľadávať rôzne hárky alebo súbežne vyhodnocovať ten istý vzorec, zatiaľ čo volajúci nesmú meniť aktívny hárok alebo voľby jedného zobrazenia z iného vlákna
Po vytvorení nevstupujú bežné čítania buniek do monitora ani do kritickej sekcie, pretože rezervácia brání súbeznej mutácii zošita
Validácia uvoľňovania udržiava každé nečinné zobrazenie pod 64 KiB pevného stavu, sto nečinných zobrazení pod 8 MiB a vytváranie zobrazenia nezávislé od veľkosti zošita s bránou p95 jednej milisekundy na modeli s jedným miliónom buniek
Výkonnostná sada tiež obmedzuje vplyv nečinného zobrazenia na existujúce jednovláknové prehľadávanie kurzorom na päť percent a vyžaduje, aby osem zobrazení prehľadávajúcich nezávislé hárky dosiahlo aspoň päťnásobok priepustnosti jedného zobrazenia na validačnom hostiteľovi
Príklad
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;
Pre XLSX uchovajte konkrétny zošit prostredníctvom jeho rozhrania vlastníka skôr, než vytvoríte zobrazenia
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;