CreateReadOnlyView-Methode
Erstellt eine schlanke schreibgeschützte Ansicht über ein geladenes Classic- oder XLSX-Arbeitsmappenmodell
Syntax
function CreateReadOnlyView: IXLSReadOnlyWorkbookView;
CreateReadOnlyView wird von Classic IXLSWorkbook in lxHandle und von XLSX IXLSXWorkbookOwner in lxHandleXdeklariert; die gemeinsame Ansichtsschnittstelle, die Optionen und die Momentaufnahmetypen sind in lxStandard
Ansichtszustand und Lebensdauer
Das Erstellen einer Ansicht benötigt konstante Zeit und durchläuft keine Arbeitsblätter, Zellen, Stile, Namen oder Zeichnungen
Jede Ansicht besitzt ihren eigenen einsbasierten ActiveSheetIndex, sodass mehrere Ansichten unterschiedliche Arbeitsblätter wählen können, ohne Classic ActiveSheetIndex oder XLSX ActiveIndex, IsSelectedund ActiveTab
Die Ansicht hält eine Lese-Lease, solange sie existiert, und Arbeitsmappenänderungen scheitern schnell mit EXLSWorkbookWriteGuardUnavailable , bevor das Modell geändert wird
Halten Sie Classic-Arbeitsmappen über IXLSWorkbook und XLSX-Arbeitsmappen über IXLSXWorkbookOwner , wenn Sie Ansichten verwenden; die Besitzer-Schnittstelle und jede Ansicht halten dann dieselbe referenzgezählte Arbeitsmappe und dürfen in beliebiger Reihenfolge freigegeben werden
Rufen Sie Free nicht auf einer konkreten TXLSWorkbook - oder TXLSXWorkbook -Instanz auf, solange noch eine Besitzer-Schnittstelle oder Ansicht auf sie verweist
Zellmomentaufnahmen
TryReadCell verwendet einsbasierte Zeilen- und Spaltenkoordinaten auf dem aktiven Blatt der Ansicht und gibt nur dann False zurück, wenn an dieser Koordinate keine gespeicherte Zelle existiert
Das Lesen einer fehlenden Zelle erzeugt keinen Speicher und stellt die Arbeitsmappen-Generation nicht voran
TXLSReadOnlyCellSnapshot besitzt seinen Blattnamen, Wert, Formeltext, Cache- und Auswertungsinformationen, Koordinaten, Art und Stilindex und legt nie ein schreibbares Arbeitsmappenobjekt offen
| Feld | Bedeutung |
|---|---|
SheetIndex / SheetName | Ansicht-lokale Arbeitsblattidentität |
Row / Col | Einsbasierte Zellkoordinaten |
StyleIndex | Gespeicherter Classic-XF-Index oder XLSX-Zellformatindex |
Kind | Klassifikation als Text, Zahl, Datum-Zeit, boolesch, Formel, Fehler oder leer |
Value | Gespeicherter Skalarwert oder Formelcache-Wert ohne Neuberechnung |
HasFormulaCache / FormulaCache | Vorhandensein, Herkunft, Wertart und eigener zwischengespeicherter Wert des FormelcachesTXLSFormulaCacheState), value kind (TXLSFormulaCacheValueKind), and owned cached value |
FormulaEvaluation | A TXLSFormulaEvaluationInfo record whose TXLSFormulaEvaluationState Ob die Auswertung nicht anwendbar, nicht angefordert, berechnet oder fehlgeschlagen war, plus Ergebniscode des Auswerters und eigener Ergebniswert |
Formula | Standardmäßig leer und nur gefüllt, wenn Formeltext ausdrücklich aktiviert ist |
Formelrichtlinie
Standardmäßig verwenden Formelzellen den vorhandenen gespeicherten Cache und berechnen nie, rufen keine Benutzerfunktion auf, aktualisieren keinen Dirty-Zustand und schreiben keinen Cache in die Arbeitsmappe zurück
Add xlsvIncludeFormulaText Fügen Sie Options zu TXLSReadOnlyViewOptions = set of TXLSReadOnlyViewOptionhinzu, wenn Formeltext benötigt wird; Classic erzeugt bei Bedarf einen ansichtsprivaten Decoder, während XLSX seine gespeicherte Formelzeichenfolge kopiert, und keiner der Pfade initialisiert oder verändert den Arbeitsmappenrechner
Eine Formel ohne geladenen oder berechneten Cache meldet HasFormulaCache=False und lässt Value als Unassigned
Fügen Sie xlsvEvaluateFormulas hinzu, um Formeln über einen ansichtsprivaten Rechner, Rekursionszustand, Skalarcache, Array-Matrix-Cache und XLSX-Cache kompilierter Formeln auszuwerten; das resultierende Value und FormulaEvaluation.Value ersetzen nie den gespeicherten Cache der Arbeitsmappe oder die Laufzeitfelder kompilierter Formeln
Standard-Tabellenkalkulationsfehler werden als Variant -Fehlerwerte mit xlfesCalculatedzurückgegeben, während nicht unterstützte oder interne Auswertungsfehler xlfesFailed melden und den ursprünglichen gespeicherten Cache in FormulaCache
Wiederholte Lesevorgänge über eine Ansicht wiederverwenden deren privaten Auswertungscache für die Lease-Generation, während unterschiedliche Ansichten unabhängig bleiben und dieselbe gemeinsame Formel gleichzeitig auswerten dürfen
Die XLSX-Auswertung externer Formeln liest nur den dateilokalen externalLink -Cache, dereferenziert niemals eine schwache Registrierung einer Live-Arbeitsmappe und führt keine externe Ein-/Ausgabe durch
Threading und Leistung
Verwenden Sie eine Ansicht pro Worker-Thread; getrennte Ansichten dürfen verschiedene Arbeitsblätter durchsuchen oder dieselbe Formel gleichzeitig auswerten, während Aufrufer den aktiven Blattindex oder die Optionen einer Ansicht nicht aus einem anderen Thread ändern dürfen
Nach dem Erstellungsvorgang treten gewöhnliche Zelllesevorgänge nicht in einen Monitor oder kritischen Abschnitt ein, da die Lease gleichzeitige Arbeitsmappenänderungen verhindert
Die Freigabevalidierung hält jede inaktive Ansicht unter 64 KiB festem Zustand, hundert inaktive Ansichten unter 8 MiB, und die Ansichtserstellung bleibt unabhängig von der Arbeitsmappengröße mit einer Ein-Millisekunden-p95-Grenze auf einem Modell mit einer Million Zellen
Die Leistungssuite begrenzt zudem die Auswirkung einer inaktiven Ansicht auf bestehende Single-Thread-Cursordurchläufe auf fünf Prozent und verlangt, dass acht Ansichten, die unabhängige Arbeitsblätter durchsuchen, mindestens das Fünffache des Durchsatzes einer einzelnen Ansicht auf dem Validierungsrechner erreichen
Beispiel
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;Behalten Sie bei XLSX die konkrete Arbeitsmappe über ihre Besitzer-Schnittstelle, bevor Sie Ansichten erstellen
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;