Metoda CreateReadOnlyView
Vytvoří lehké zobrazení jen pro čtení nad modelem načteného sešitu Classic nebo XLSX
Syntaxe
function CreateReadOnlyView: IXLSReadOnlyWorkbookView;
CreateReadOnlyView deklaruje classic IXLSWorkbook v lxHandle a XLSX IXLSXWorkbookOwner v lxHandleX; sdílené rozhraní zobrazení, volby a typy snímků jsou deklarovány v lxStandard
Stav zobrazení a životnost
Vytvoření zobrazení má konstantní časovou složitost a neprochází listy, buňky, styly, názvy ani kresby
Každé zobrazení má vlastní ActiveSheetIndex indexovaný od jedničky, takže více zobrazení může vybírat různé listy beze změny classic ActiveSheetIndex nebo XLSX ActiveIndex, IsSelected a ActiveTab
Zobrazení drží, dokud existuje, čtecí rezervaci a mutace sešitu rychle selžou s EXLSWorkbookWriteGuardUnavailable dříve, než se model změní
Při používání zobrazení držte classic sešity prostřednictvím IXLSWorkbook a XLSX sešity prostřednictvím IXLSXWorkbookOwner; rozhraní vlastníka i každé zobrazení poté uchovávají stejný sešit s referenčním počítáním a mohou být uvolněny v libovolném pořadí
Nevolejte Free na konkrétní TXLSWorkbook nebo TXLSXWorkbook, dokud na něj stále odkazuje rozhraní vlastníka nebo zobrazení
Snímky buněk
TryReadCell používá souřadnice řádku a sloupce indexované od jedničky na aktivním listu zobrazení a vrací False pouze tehdy, když na dané souřadnici neexistuje uložená buňka
Čtení chybějící buňky nevytváří úložiště a neposouvá generaci sešitu
TXLSReadOnlyCellSnapshot vlastní název listu, hodnotu, text vzorce, informace o mezipaměti a vyhodnocení, souřadnice, druh a index stylu a nikdy nezpřístupňuje zapisovatelný objekt sešitu
| Pole | Význam |
|---|---|
SheetIndex / SheetName | Identita listu v rámci zobrazení |
Row / Col | Souřadnice buňky indexované od jedničky |
StyleIndex | Uložený index classic XF nebo index formátu buňky XLSX |
Kind | Klasifikace text, číslo, datum-čas, Boolean, vzorec, chyba nebo prázdná buňka |
Value | Uložená skalární hodnota nebo hodnota z mezipaměti vzorců bez přepočtu |
HasFormulaCache / FormulaCache | Přítomnost mezipaměti vzorců, její původ, druh hodnoty a vlastněná kešovaná hodnota |
FormulaEvaluation | Zda vyhodnocení nebylo použitelné, nebylo vyžádáno, proběhlo nebo selhalo, plus kód výsledku vyhodnocovacího modulu a vlastněná výsledná hodnota |
Formula | Ve výchozím stavu prázdný a vyplněný pouze tehdy, když je text vzorce explicitně povolen |
Politika vzorců
Ve výchozím nastavení buňky se vzorci používají existující uloženou mezipaměť a nikdy nepočítají, nevolají uživatelskou funkci, neaktualizují stav neaktuálnosti ani nezapisují mezipaměť zpět do sešitu
Přidejte xlsvIncludeFormulaText do Options, když je vyžadován text vzorce; classic na požádání vytvoří soukromý dekodér zobrazení, zatímco XLSX zkopíruje svůj uložený řetězec vzorce, a ani jedna cesta neinicializuje ani nemění kalkulátor sešitu
Vzorec bez načtené nebo vypočtené mezipaměti hlásí HasFormulaCache=False a ponechává Value jako Unassigned
Přidejte xlsvEvaluateFormulas pro vyhodnocování vzorců prostřednictvím soukromého kalkulátoru zobrazení, stavu rekurze, skalární mezipaměti, mezipaměti polí-matic a mezipaměti zkompilovaných vzorců XLSX; výsledné Value a FormulaEvaluation.Value nikdy nenahradí uloženou mezipaměť sešitu ani běhová pole zkompilovaného vzorce
Standardní chyby tabulkových procesorů se vracejí jako chybové hodnoty Variant s xlfesCalculated, zatímco nepodporovaná nebo interní selhání vyhodnocení hlásí xlfesFailed a uchovávají původní uloženou mezipaměť v FormulaCache
Opakovaná čtení přes jedno zobrazení znovu používají jeho soukromou vyhodnocovací mezipaměť pro danou generaci rezervace, zatímco různá zobrazení zůstávají nezávislá a mohou vyhodnocovat stejný sdílený vzorec souběžně
Vyhodnocování externích vzorců XLSX čte pouze mezipaměť externalLink lokálního souboru a nikdy nedereferencuje slabou registraci živého sešitu ani neprovádí externí I/O
Vlákna a výkon
Používejte jedno zobrazení na pracovní vlákno; oddělená zobrazení mohou prohledávat různé listy nebo souběžně vyhodnocovat stejný vzorec, zatímco volající nesmí měnit aktivní list nebo volby jednoho zobrazení z jiného vlákna
Po vytvoření nevstupují běžná čtení buněk do monitoru ani do kritické sekce, protože rezervace brání souběžné mutaci sešitu
Validace uvolňování udržuje každé nečinné zobrazení pod 64 KiB pevného stavu, sto nečinných zobrazení pod 8 MiB a vytváření zobrazení nezávislé na velikosti sešitu s branou p95 jedno milisekunda na modelu s jedním milionem buněk
Výkonnostní sada rovněž omezuje vliv nečinného zobrazení na stávající jednovláknové prohledávání kurzorem na pět procent a vyžaduje, aby osm zobrazení prohledávajících nezávislé listy dosáhlo alespoň pětinásobku propustnosti jednoho zobrazení na validačním hostiteli
Pří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;
Pro XLSX uchovejte konkrétní sešit prostřednictvím jeho rozhraní vlastníka dříve, než vytvoříte zobrazení
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;