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
| Campo | Significato |
|---|---|
SheetIndex / SheetName | Identità del foglio di lavoro locale alla vista |
Row / Col | Coordinate della cella in base 1 |
StyleIndex | Indice XF classico memorizzato o indice di formato cella XLSX |
Kind | Classificazione testo, numero, data-ora, booleano, formula, errore o vuoto |
Value | Valore scalare memorizzato o valore della cache delle formule senza ricalcolo |
HasFormulaCache / FormulaCache | Presenza, provenienza, tipo di valore e valore in cache di proprietà della cache delle formuleTXLSFormulaCacheState), value kind (TXLSFormulaCacheValueKind), and owned cached value |
FormulaEvaluation | A 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à |
Formula | Vuota 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;