HotXLS-Dokumentation

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

FeldBedeutung
SheetIndex / SheetNameAnsicht-lokale Arbeitsblattidentität
Row / ColEinsbasierte Zellkoordinaten
StyleIndexGespeicherter Classic-XF-Index oder XLSX-Zellformatindex
KindKlassifikation als Text, Zahl, Datum-Zeit, boolesch, Formel, Fehler oder leer
ValueGespeicherter Skalarwert oder Formelcache-Wert ohne Neuberechnung
HasFormulaCache / FormulaCacheVorhandensein, Herkunft, Wertart und eigener zwischengespeicherter Wert des FormelcachesTXLSFormulaCacheState), value kind (TXLSFormulaCacheValueKind), and owned cached value
FormulaEvaluationA TXLSFormulaEvaluationInfo record whose TXLSFormulaEvaluationState Ob die Auswertung nicht anwendbar, nicht angefordert, berechnet oder fehlgeschlagen war, plus Ergebniscode des Auswerters und eigener Ergebniswert
FormulaStandardmäß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;

Siehe auch