HotXLS-Dokumentation

Direct-Reader- und Direct-Writer-API

TXLSDirectReader und TXLSDirectWriter verarbeiten XLSX-Pakete, ohne ein vollständiges Arbeitsblattraster im Speicher zu halten — API-Aufrufe, die ein Blatt beschreiben, müssen also vor oder während der entsprechenden Streaming-Phase erfolgen

Writer-Lebenszyklus und Zellwerte

TXLSDirectWriter.BeginFile oder BeginStream startet ein Paket, die Sheet-Methoden definieren je ein Arbeitsblatt, und Finish commitet das finale Paket

Scalar cellsWriteString, WriteRichString, WriteNumber, WriteBoolean, WriteDateTimeund WriteError
Formula cellsWriteFormula, WriteFormulaNumber, WriteFormulaString, WriteFormulaBoolean, WriteFormulaDateTimeund WriteFormulaError nehmen zwischengespeicherte Ergebnisse des Aufrufers entgegen
Shared stringsUseSharedStrings aktiviert die paketweite Zeichenfolgen-Deduplizierung
StatisticsCellCount meldet die Anzahl der ausgegebenen Zellen
PanesFreezePanes(ColSplit, RowSplit) schreibt eine Fixierung an der gegebenen 1-basierten Spalte und Zeile

Zeilen und Spalten sind in der öffentlichen Writer-Oberfläche 1-basiert und müssen in Vorwärts-Arbeitsblattreihenfolge geliefert werden

Lebenszyklus des Worksheet-Patch

BeginPatch ersetzt ein Arbeitsblatt oder fügt ein neues ein, während unberührte Paketteile erhalten bleiben. Eine fehlgeschlagene Initialisierung gibt das Quellarchiv und den Quell-Stream sofort frei — etwa bei einem fehlenden Arbeitsblatt, einem fehlenden erforderlichen Paketteil, einem ungültigen Archiv oder einem Fehler beim Anlegen des Ziels. Quelldateien und temporäre Registrierungen im Besitz des Aufrufers bleiben in dessen Verantwortung; die freigegebenen Handles erlauben es, diese Quellen zu entfernen oder freizugeben

Close und die Zerstörung geben Quell-Handles frei, selbst wenn kein aktives Ziel existiert oder die Patch-Finalisierung eine Exception auslöst. Eine erfolglose Zielersetzung behält ihre zwischengestellte Ausgabe zur Inspektion, und der Writer kann nach einem Initialisierungsfehler einen weiteren Patch oder eine gewöhnliche Dateioperation starten

Wiederverwendbare Styles

AddCellStyle registriert ein unveränderliches Style-Handle auf Paketebene, und CloneCellStyle leitet ein neues Handle ab, ohne Arbeitsblattzeilen vorzuhalten

Definierte Namen und Hyperlinks

AddDefinedName, AddLocalDefinedName, AddDefinedRangeund AddLocalDefinedRange fügen arbeitsmappen- oder blattlokale Namen hinzu, bevor das Paket finalisiert wird

AddHyperlink, AddHyperlinkRange, AddInternalHyperlinkund AddInternalHyperlinkRange geben externe Beziehungen oder interne Blattziele für eine Zelle oder einen Bereich aus

Datenüberprüfung

AddDataValidation und AddDataValidationSqRef legen die vollständige Regelfläche offen, während AddListValidation, AddWholeNumberValidation, AddDecimalValidation, AddDateValidation, AddTimeValidation, AddTextLengthValidationund AddCustomValidation typisierte Helfer bereitstellen

Bedingte Formatierung

AddConditionalFormat, AddConditionalFormatExpression, AddConditionalFormatContainsText, AddConditionalFormatNotContainsText, AddConditionalFormatBeginsWith, AddConditionalFormatEndsWith, AddConditionalFormatTop10, AddConditionalFormatAboveAverage, AddConditionalFormatDuplicateValues, AddConditionalFormatUniqueValues, AddConditionalFormatContainsBlanks, AddConditionalFormatNotContainsBlanks, AddConditionalFormatContainsErrorsund AddConditionalFormatNotContainsErrors fügen skalare Regeln hinzu

AddConditionalFormatDataBar, AddConditionalFormatColorScale2, AddConditionalFormatColorScale3und AddConditionalFormatIconSet fügen visuelle Regeln hinzu; ClearConditionalFormats entfernt schwebende Regeln des aktuellen Blatts

AutoFilter und Tabellen

AddAutoFilterValue, AddAutoFilterDateGroupund AddAutoFilterSortCondition konfigurieren den Arbeitsblattfilter

AddTable erstellt einen Tabellenteil, und AddTableFilterValue, AddTableFilterDateGroupsowie AddTableSortCondition konfigurieren seinen Filter- und Sortierzustand

Schutz und Seitenumbrüche

ProtectSheet, UnprotectSheet, AddProtectedRangeund ClearProtectedRanges konfigurieren den Arbeitsblattschutz; ProtectWorkbook und UnprotectWorkbook konfigurieren Arbeitsmappenstruktur- und Fenstersperren

AddHorizontalPageBreak und AddVerticalPageBreak geben manuelle Seitenumbrüche für das aktuelle Arbeitsblatt aus

Speicherdiagnose des Direkt-Readers

TXLSDirectReader.SharedStringMemoryLimit begrenzt den Speicher dekodierter gemeinsamer Zeichenfolgen, SharedStringsOnDisk meldet die Migration in temporären indizierten Speicher, SharedStringCount meldet die Anzahl der geladenen Einträge, und ParallelDiag legt begrenzte Diagnosen der Parallel-Parser offen

Reader-Projektion und Formelzustand

FirstRow, LastRow, IncludeColumnund ClearColumnProjection schieben Zeilen- und 1-basierte Spaltenauswahl in den Arbeitsblatt-Parser, bevor Werte, Formeln oder Rich Text alloziert werden

IncludeFormulaText steht standardmäßig auf true; schaltet man es ab, bleiben zwischengespeicherte Werte, Koordinaten, Styles und HasFormula erhalten, während FormulaTextAvailable false wird und Formula leer bleibt

Zeilencursor

TXLSRowCursor.Open akzeptiert XLS-, XLSX-, XLSM-, ODS-, CSV- und TSV-Dateien oder -Streams; die ZIP-Erkennung unterscheidet ODS-Pakete von Open-XML-Arbeitsmappen, bevor ein Blatt geöffnet wird

SelectSheet und SelectSheetByName wählen ein Arbeitsblatt; SheetCount, SheetNames, SheetIndex, RowIndexund Eof legen den Traversierungszustand offen, während SharedStringMemoryLimit dieselbe begrenzte Shared-String-Richtlinie wie der Direkt-Reader anwendet

FirstRow, LastRow, IncludeColumnund ClearColumnProjection verwenden dieselben 1-basierten Filter über alle Cursor-Formate; Pass-Optionen können zwischen FindFirst und EOF nicht geändert werden, sind nach EOF, Blattwahl oder Schließen aber wieder änderbar

Jede TXLSRowCursorCell meldet HasFormula unabhängig von FormulaTextAvailable; klassisches XLS legt Formelpräsenz und zwischengespeicherte Ergebnisse offen, ohne nicht verfügbaren Token-Text zu behaupten, während IncludeFormulaText XLSX- und ODS-Formeltext schon vor der Akkumulation unterdrücken kann

Die ODS-Traversierung hält eine physische Zeilenvorlage, schneidet wiederholte Zeilenblöcke auf das angeforderte Intervall zurecht, springt innerhalb wiederholter Spannen direkt zwischen ausgewählten Spalten, läuft über abgedeckte Zellen hinweg, ohne sie als Werte zu liefern, und meldet ungültige oder rasterbedingte Wiederholungszählen über OnSkippedRecord

State unterscheidet xrcsClosed, xrcsBeforeFirst, xrcsActive, xrcsEof, xrcsCancelledund xrcsFaulted; Cancel ist idempotent, invalidiert die aktuelle Zeile und gibt den aktiven Arbeitsblatt-Stream frei, wahrt dabei die Quelle, sodass eine explizite Blattwahl einen neuen Durchlauf starten kann

Die Stream-Überladung steht standardmäßig auf xsoBorrowed, stellt die ursprüngliche Position des Aufrufers beim Schließen wieder her und akzeptiert xsoOwned , um nach erfolgreichem Öffnen die Ownership zu übertragen; fehlgeschlagene Öffnungen verbrauchen niemals die Ownership des Aufrufers

CurrentRowView leiht das aktuelle Zeilenarray, ohne es zu kopieren, und prüft vor jedem Zugriff eine Generation; Weiterbewegen, Auswählen, Abbrechen, Schließen oder Zerstören des Cursors invalidiert die Ansicht und löst bei späterem Zugriff EXLSRowCursorViewInvalidated aus

PeakRowBufferedBytes ist eine monotone Schätzung seit dem letzten Open über die Zelldatensätze, verwalteten Payloads, Rich Text und Format-Backend-Daten, die für eine logische Zeile vorgehalten werden; gedacht für Diagnosen zu begrenztem Speicher, nicht als exakte Heap-Bilanz

SheetPassesStarted zählt erfolgreiche Arbeitsblatt-Backend-Starts; das Einsehen von Blattnamen oder das Überspringen eines Blatts über die Callback-Fassade öffnet den Arbeitsblatt-Part nicht

Forward-Callback-Adapter

TXLSForwardReader delegiert das Dekodieren von XLS, XLSX, ODS, CSV und TSV an TXLSRowCursor, wandelt jede Zelle der aktuellen Zeile in einen OnCell -Callback um und bewahrt dieselben Verträge für Zeilengrenzen, Spaltenprojektion, Formelzustand, Rich Text, Passwort, übersprungene Datensätze, Streamposition und begrenzte Puffer

PeakRowBufferedBytes und SheetPassesStarted legen die gemeinsamen Cursor-Diagnosen auf der Callback-Oberfläche offen, während klassisches XLS zusätzlich ClassicBytesRead und ClassicPeakBufferedBytes

Reader-Ereignisse und Datensatztypen

Reader und Zeilencursor legen optionale Callbacks und plain records offen, alle deklariert in lxDirectRead. Jeder Callback folgt derselben Form: Der Datensatz beschreibt ein gestreamtes Element, und das Setzen von Abort stoppt den Scan (Sheet-Ereignisse akzeptieren zusätzlich SkipSheet)

CellsOnCell (Typ TXLSDirectCellEvent) liefert je Zelle ein TXLSDirectCell , dessen Kind (TXLSDirectCellKind: xdkEmpty, xdkNumber, xdkString, xdkBoolean, xdkDate, xdkError) das befüllte Wertfeld wählt; Rich Text reist als TXLSDirectRichText mit TXLSDirectRichTextRun -Einträgen, je eines mit einem TXLSDirectRichColor (Art TXLSDirectRichColorKind), TXLSDirectRichUnderlineund TXLSDirectRichVertAlign, plus optionalen TXLSDirectPhoneticProperties - und TXLSDirectPhoneticRun -Daten
Sheet framingOnSheet (TXLSDirectSheetEvent) kann ein ganzes Arbeitsblatt überspringen, bevor seine Zellen geparst werden; OnSkippedRecord (TXLSDirectSkippedEvent) meldet fehlerhafte oder abgeschnittene Inhalte mit Datensatz-ID und Grund
Sheet layoutOnDimension, OnSheetFormat, OnColumn, OnRow, OnMergeund OnPane liefern TXLSDirectDimension-, TXLSDirectSheetFormat-, TXLSDirectColumn-, TXLSDirectRow-, TXLSDirectMerge- und TXLSDirectPane -Datensätze; der Fensterzustand verwendet TXLSDirectPaneState (xdpsSplit, xdpsFrozen, xdpsFrozenSplit, xdpsUnknown)
Cursor stateTXLSRowCursor.State ist ein TXLSRowCursorState (xrcsClosed, xrcsBeforeFirst, xrcsActive, xrcsEof, xrcsCancelled, xrcsFaulted); die Stream-Überladung von Open nimmt ein TXLSStreamOwnership (StandardxsoBorrowed , xsoOwned zum Übertragen der Ownership), und CurrentRowView liefert eine geliehene IXLSRowCursorView -Ansicht, deren Valid -Eigenschaft den Zugriff bewacht und deren ValueByCol eine Zelle der geliehenen Zeile ohne Kopieren liest; die Ansicht invalidiert, wenn der Cursor weiterläuft

Writer-Parameter- und Style-Typen

Die typisierten Helfer des Writers (lxDirectWrite) nehmen Datensätze und Enums entgegen, damit Aufrufe allokationsfrei bleiben: WriteRichString nimmt ein TXLSDirectRichText; AddCellStyle baut einen paketweiten Style aus einem TXLSDirectCellStyle , dessen Ausrichtung (TXLSDirectHorizontalAlignment, TXLSDirectVerticalAlignment), Unterstreichung (TXLSDirectUnderline), Füllmuster (TXLSDirectFillPattern) und Rahmenkanten (TXLSDirectStyleBorder mit TXLSDirectBorderSide) das OOXML-Style-Modell spiegeln. Bedingte Formate übergeben ein TXLSDirectConditionalFormat mit TXLSDirectCfKind / TXLSDirectCfOperator / TXLSDirectCfValue / TXLSDirectCfValueKind und TXLSDirectIconSetType, Datenüberprüfung ein TXLSDirectDataValidation, Tabellen ein TXLSDirectTable, Hyperlinks einen TXLSDirectHyperlink, definierte Namen einen TXLSDirectDefinedName, differential Styles einen TXLSDirectDxfStyle, Kommentare einen TXLSDirectComment, Bilder ein TXLSDirectImage mit TXLSDirectImageFormat, Diagramme einen TXLSDirectChart mit TXLSDirectChartSeries und TXLSDirectChartType, Verbunde einen TXLSDirectMergeRange, geschützte Bereiche einen TXLSDirectProtectedRange, den Blattschutz ein TXLSDirectSheetProtectionOptions -Set aus TXLSDirectSheetProtectionOption, den AutoFilter-Sortierzustand einen TXLSDirectSortState, Spaltenoptionen eine TXLSDirectColumnOptionund die Seitengeometrie einen TXLSDirectPageMargins -Datensatz

TXLSDirectNeedRow = procedure(Sender: TObject; RowIndex: Integer;
  var Eof: Boolean) of object;

function XLSDirectColName(Col: Integer): WideString;
function XLSDirectParseRef(const Ref: WideString;
  out Col, Row: Integer): Boolean;
function XLSDirectPasswordHash(const Password: WideString): WideString;
      

OnNeedRow zieht Zeilen aus der Anwendung: Der Lieferant schreibt die Zellen der Zeile direkt durch den Writer und lässt Eof = False, oder meldet Erschöpfung mit Eof = True , um die Schleife zu beenden. Die Helfer konvertieren zwischen Koordinaten und Schutz-Primitiven: XLSDirectColName rendert eine nullbasierte Spalte als ihre A1-Buchstaben, XLSDirectParseRef parst eine A1-Zellreferenz, und XLSDirectPasswordHash berechnet den Legacy-Passwort-Hash, den die Blattschutz-Datensätze speichern

Siehe auch