Dokumentace HotXLS

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

PoleVýznam
SheetIndex / SheetNameIdentita listu v rámci zobrazení
Row / ColSouřadnice buňky indexované od jedničky
StyleIndexUložený index classic XF nebo index formátu buňky XLSX
KindKlasifikace text, číslo, datum-čas, Boolean, vzorec, chyba nebo prázdná buňka
ValueUložená skalární hodnota nebo hodnota z mezipaměti vzorců bez přepočtu
HasFormulaCache / FormulaCachePřítomnost mezipaměti vzorců, její původ, druh hodnoty a vlastněná kešovaná hodnota
FormulaEvaluationZda 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
FormulaVe 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;

Viz také