Documentazione HotXLS

Metodo CreateReadOnlyView

Crea una vista leggera di sola lettura su un modello di workbook XLS classico o XLSX caricato

Sintassi

function CreateReadOnlyView: IXLSReadOnlyWorkbookView;

CreateReadOnlyView è dichiarato dal IXLSWorkbook classico in lxHandle e dal IXLSXWorkbookOwner XLSX in lxHandleX; l'interfaccia di vista condivisa, le opzioni e i tipi di snapshot sono dichiarati in lxStandard

Stato e durata della vista

La creazione di una vista avviene in tempo costante e non attraversa fogli di lavoro, celle, stili, nomi o disegni

Ogni vista ha il proprio ActiveSheetIndexin base 1, così più viste possono selezionare fogli di lavoro diversi senza modificare il ActiveSheetIndex classico né ActiveIndex, IsSelectede ActiveTab

La vista detiene un lease di lettura finché esiste, e le mutazioni del workbook falliscono immediatamente con EXLSWorkbookWriteGuardUnavailable prima di modificare il modello

Conservare i workbook classici tramite IXLSWorkbook e i workbook XLSX tramite IXLSXWorkbookOwner quando si usano le viste; l'interfaccia proprietaria e ogni vista trattengono quindi lo stesso workbook a conteggio dei riferimenti e possono essere rilasciate in qualsiasi ordine

Non chiamare Free su un TXLSWorkbook o TXLSXWorkbook concreto finché un'interfaccia proprietaria o una vista vi fa ancora riferimento

Snapshot di cella

TryReadCell usa coordinate di riga e colonna in base 1 sul foglio attivo della vista e restituisce False solo quando non esiste alcuna cella memorizzata a quelle coordinate

Una lettura di cella assente non crea archiviazione né fa avanzare la generazione del workbook

TXLSReadOnlyCellSnapshot possiede il proprio nome di foglio, valore, testo della formula, informazioni di cache e valutazione, coordinate, tipo e indice di stile e non espone mai un oggetto workbook scrivibile

CampoSignificato
SheetIndex / SheetNameIdentità del foglio di lavoro locale alla vista
Row / ColCoordinate della cella in base 1
StyleIndexIndice XF classico memorizzato o indice di formato cella XLSX
KindClassificazione testo, numero, data-ora, booleano, formula, errore o vuoto
ValueValore scalare memorizzato o valore della cache delle formule senza ricalcolo
HasFormulaCache / FormulaCachePresenza, provenienza, tipo di valore e valore in cache di proprietà della cache delle formuleTXLSFormulaCacheState), value kind (TXLSFormulaCacheValueKind), and owned cached value
FormulaEvaluationA TXLSFormulaEvaluationInfo record whose TXLSFormulaEvaluationState Indica se la valutazione non era applicabile, non richiesta, calcolata o fallita, più il codice di risultato dell'evaluator e il valore di risultato di proprietà
FormulaVuota per default e popolata solo quando il testo della formula è abilitato esplicitamente

Criteri delle formule

Per default le celle con formula usano la cache memorizzata esistente e non calcolano mai, non invocano una funzione utente, non aggiornano lo stato delle modifiche né riscrivono una cache nel workbook

Add xlsvIncludeFormulaText Aggiungere Options a TXLSReadOnlyViewOptions = set of TXLSReadOnlyViewOptionquando il testo della formula è richiesto; il classico crea un decoder privato della vista su richiesta, mentre XLSX copia la propria stringa di formula memorizzata, e nessuno dei due percorsi inizializza o modifica il calcolatore del workbook

Una formula senza cache caricata o calcolata riporta HasFormulaCache=False e lascia Value a Unassigned

Aggiungere xlsvEvaluateFormulas per valutare le formule tramite un calcolatore privato della vista, uno stato di ricorsione, una cache scalare, una cache di matrici e una cache di formule compilate XLSX; la Value risultante e FormulaEvaluation.Value non sostituiscono mai la cache memorizzata del workbook né i campi di runtime delle formule compilate

Gli errori standard del foglio di calcolo vengono restituiti come valori di errore Variant con xlfesCalculated, mentre i fallimenti di valutazione non supportati o interni riportano xlfesFailed e conservano la cache memorizzata originale in FormulaCache

Le letture ripetute attraverso una stessa vista riutilizzano la sua cache di valutazione privata per la generazione del lease, mentre viste diverse restano indipendenti e possono valutare la stessa formula condivisa simultaneamente

La valutazione delle formule esterne XLSX legge solo la cache externalLink locale al file e non dereferenzia mai una registrazione debole di un workbook attivo né esegue I/O esterni

Threading e prestazioni

Usare una vista per thread di lavoro; viste separate possono scansionare fogli di lavoro diversi o valutare la stessa formula simultaneamente, mentre i chiamanti non devono mutare il foglio attivo o le opzioni di una vista da un altro thread

Dopo la creazione, le letture ordinarie delle celle non entrano in un monitor o in una sezione critica perché il lease impedisce la mutazione concorrente del workbook

La validazione del rilascio mantiene ogni vista inattiva sotto 64 KiB di stato fisso, cento viste inattive sotto 8 MiB, e la creazione delle viste indipendente dalla dimensione del workbook con una soglia p95 di un millisecondo su un modello da un milione di celle

La suite delle prestazioni limita inoltre l'effetto di una vista inattiva sulle scansioni con cursore a thread singolo esistenti al cinque per cento e richiede che otto viste che scansionano fogli indipendenti raggiungano almeno cinque volte la velocità effettiva della vista singola sull'host di validazione

Esempio

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;

Per XLSX, conservare il workbook concreto tramite la sua interfaccia proprietaria prima di creare le viste

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;

Vedere anche