HotXLS-Dokumentation

Arbeitsmappen-Infrastruktur-API

Diese öffentlichen Member unterstützen Integrationen, die I/O inspizieren, Serializer implementieren oder Berechnung über Arbeitsmappen hinweg koordinieren, mit Arbeitsmappen-Membern deklariert in lxHandleX und dem Workspace-Graph deklariert in lxDepGraph

Gewöhnliche Anwendungen sollten zuerst Zellformatierung, SaveAs, Recalculate und die externen Arbeitsmappen-Workspace-APIs verwenden; Style-Pool-Registrierung und Graph-Scheduling erfordern dieselbe Index- und Lebensdauerkonvention wie die Serializer und die Berechnungs-Engine der Bibliothek

I/O-Beobachtung und Wiederherstellung

TXLSXWorkbook.OnReadCell erhält den Blattindex, Zeile, Spalte, gespeicherten Wert und die Formel jeder materialisierten Zelle während des XLSX-Parsens, mit einem schreibbaren Cancel-Flag; TXLSXWorkbook.OnWriteCell erhält einen schreibbaren Ausgabewert plus Skip- und Cancel-Flags, bevor eine Zelle serialisiert wird, sodass ein Host die Ausgabe transformieren oder weglassen kann, ohne die Arbeitsmappen-API durch die direkte Stream-API zu ersetzen

Beide Callbacks nutzen 1-basierte Arbeitsblatt- und Zellkoordinaten, und ihre deklarierten Typen sind TXLSXCellReadEvent und TXLSXCellWriteEvent; Callbacks laufen innerhalb der aktiven I/O-Operation, vermeiden Sie also, aus einem Callback heraus eine weitere Operation auf derselben Arbeitsmappe zu starten

TXLSXWorkbook.RecoveryMode steht standardmäßig auf False und lässt unterstützte Fehler beim Parsen von Arbeitsblatt-XML als Warnungsdiagnosen durchlaufen, während das Öffnen fortgesetzt wird, was möglicherweise nur teilweise wiederhergestellte Arbeitsblattinhalte hinterlässt; sie garantiert keine Wiederherstellung aus einem unlesbaren ZIP-Paket, prüfen Sie Diagnosen und wiederhergestellte Daten also vor dem Speichern

TXLSXWorkbook.FireProgress sendet Phase, Zustand, aktuelle Anzahl und Gesamtanzahl an die zugewiesenen Progress-Handler, wobei der Legacy-Handler Arbeitsbenachrichtigungen und der erweiterte Handler alle Zustände erhält; ein erweiterter Handler kann einen Abbruch anfordern, außer dass die Schreibende-Benachrichtigung eine bereits committete Ausgabe nicht rückgängig machen kann

TXLSXWorkbook.AddDiagnostic hängt eine von der Arbeitsmappe besessene Diagnose an und liefert sie zurück, zeichnet den gelieferten Code, die Schwere, die Operation, die Nachricht, den nativen Code, den Blattkontext und den Paketteilnamen auf, kopiert den Exception-Klassennamen, wenn eine Exception geliefert wird, und ruft OnDiagnostic auf; sie übernimmt weder den Besitz der Exception noch wirft sie

function TXLSXWorkbook.AddDiagnostic(ACode: Integer;
  ASeverity: TXLSDiagnosticSeverity; AOperation: TXLSDiagnosticOperation;
  const AMessage: WideString; ANativeCode, ASheetIndex: Integer;
  const ASheetName, APartName: WideString;
  AException: Exception): TXLSDiagnostic;

Ausgaberichtlinien und Inspektion gespeicherter Pakete

TXLSXWorkbook.CSVEmitFormulas steht standardmäßig auf False und schaltet die CSV-Ausgabe für Formelzellen von Formelergebnissen auf Formeltext um; die Ergebnis-Ausgabe versucht eine Formelauswertung und fällt bei Fehlschlag auf gespeicherten Zellentext oder -wert zurück; TXLSXWorkbook.CSVQuoteAllStrings steht ebenfalls standardmäßig auf False und erzwingt Quotes um Textfelder, während Zahlen, Daten, Boolean-Werte, Null und Empty die normalen Quoting-Regeln behalten

TXLSXWorkbook.LastSaveUsedStreaming meldet, ob der letzte vorbereitete Speichervorgang Arbeitsblatt-Streaming nutzte, während TXLSXWorkbook.LastSavePeakRowXmlChars das größte gepufferte Zeilen-XML-Fragment meldet, TXLSXWorkbook.LastSaveBufferedWorksheetXmlChars das kombinierte gepufferte Arbeitsblatt-XML und TXLSXWorkbook.LastSavePeakAuxiliaryXmlChars das größte verfolgte Hilfs-XML-Fragment; dies sind Zeichenzählungen aus Serializer-Instrumentierung, keine Gesamtprozessspeicher-Messungen, und die ODS-Ausgabe nutzt nicht den XLSX-Arbeitsblatt-Streaming-Pfad

TXLSXWorkbook.TryCopyPreservedPart versucht, einen geeigneten erhaltenen Quellteil einschließlich seiner komprimierten Repräsentation in ein aufrufergeliefertes Ziel-TZipArchive zu kopieren, und liefert True bei Kopie oder False, wenn normale Serialisierung erforderlich ist; die Quelle muss aus einem dateibasierten Öffnen verfügbar bleiben, und fehlende oder explizit verworfene Teile können nicht kopiert werden

Der Aufrufer besitzt das Zielarchiv und muss es normal abschließen; ein Rollback-Fehler einer komprimierten Kopie kann weiterhin eine Exception auslösen, und dieser Helper konstruiert weder ein vollständiges Arbeitsmappenpaket noch aktualisiert er dessen Beziehungen oder Inhaltstypen

Verschlüsselung und Arbeitsmappenmetadaten

TXLSXWorkbook.SaveAsEncryptedAgile akzeptiert einen Dateinamen und ein nichtleeres Passwort, serialisiert das XLSX-Paket im Speicher und schreibt den Agile-verschlüsselten Container, mit Rückgabe von 1 bei Erfolg oder -1 bei einem gemeldeten Fehlschlag; optionales VerifyEncryptedSave führt nach dem Schreiben eine Neuöffnungsprüfung durch, und die Methode braucht Speicher sowohl für das unverschlüsselte Paket als auch für seine serialisierten Bytes

TXLSXWorkbook.VerifyEncryptedFile öffnet die gelieferte Datei und das Passwort in einer temporären Arbeitsmappe und liefert True nur, wenn dieses Öffnen gelingt, und konvertiert Exceptions zu False; dies prüft Lesbarkeit, statt jede Zelle mit der aktuellen Arbeitsmappe zu vergleichen, und folgt dem normalen OpenEncrypted-Verhalten für eine unverschlüsselte XLSX-Eingabe

TXLSXWorkbook.DocSecurity speichert das erweiterte Dokumenteigenschaften-Bitfeld: 1 bezeichnet Passwortschutz, 2 eine Nur-Lese-Empfehlung, 4 erzwungenen Nur-Lese-Status und 8 Annotationssperre; diese Metadaten-Bits wenden selbst keine Verschlüsselung oder Zugriffsbeschränkungen an

TXLSXWorkbook.DocPropsTouched ist das nur lesende Flag, das die Dokumenteigenschaften-Writer nutzen, um zu entscheiden, ob verfolgte Eigenschaften konfiguriert wurden; verfolgte Property-Setter wie Title setzen es, während direkt zugewiesene erweiterte Metadaten es nicht automatisch setzen

TXLSXWorkbook.WorkbookProtectHash legt den geladenen oder erzeugten Legacy-Hash des Arbeitsmappenschutzes offen, normalerweise vier hexadezimale Ziffern oder ein leerer String, wenn kein Passworthash existiert; verwenden Sie die Arbeitsmappenschutz-Methoden, um den Schutz zu ändern, statt diesen nur lesenden Wert zuzuweisen, und halten Sie den Arbeitsmappenstrukturschutz von verschlüsselter Dateispeicherung getrennt

TXLSXWorkbook.ThemeMajorFont und TXLSXWorkbook.ThemeMinorFont legen die aus dem Thema geladenen Überschriften- und Textschriften offen und überschreiben die Namen, wenn das Standard-Office-Thema erzeugt wird; ein wörtlich erhaltenes Thema hat Vorrang vor diesen Schriftnamen-Einstellungen

Tabellenstile und Serializer-Style-Pools

TXLSXWorkbook.DefaultTableStyleName und TXLSXWorkbook.DefaultPivotStyleName führen die im Stil-Table gespeicherten Standardnamen für neu eingefügte Excel-Tabellen und PivotTables als Roundtrip; das Zuweisen formatiert nicht direkt jedes vorhandene Objekt um

TXLSXWorkbook.ResolveTableStyle liefert einen arbeitsmappeneigenen eigenen Stil nach Name, löst und cached sonst unterstützte eingebaute Stile von TableStyleLight1 bis TableStyleLight21, TableStyleMedium1 bis TableStyleMedium28 oder TableStyleDark1 bis TableStyleDark11 und liefert nil für einen unbekannten Namen; geben Sie den zurückgelieferten Stil nicht frei

TXLSXWorkbook.FastStyleAppend steht standardmäßig auf False und lässt Massenerzeugung Deduplizierungs-Scans in den Style-Pools und die gewöhnliche Composite-Style-Registrierung überspringen, tauscht also eine größere Stil-Table gegen schnelleres Einfügen, wenn viele unterschiedliche Stile erzeugt werden

function TXLSXWorkbook.RegisterCompositeXf(
  AFont, AFill, ABorder, ANumFmt, AAlign, AProt: Integer): Integer; overload;
function TXLSXWorkbook.RegisterCompositeXf(
  AFont, AFill, ABorder, ANumFmt, AAlign, AProt,
  ABuiltinNumFmt: Integer): Integer; overload;
function TXLSXWorkbook.RegisterLinkedCompositeXf(
  AFont, AFill, ABorder, ANumFmt, AAlign, AProt,
  AParentXfId: Integer; ALinkedParts: TXLSXFormatParts): Integer;

TXLSXWorkbook.RegisterCompositeXf registriert die kombinierten Schrift-, Füll-, Rahmen-, Zahlenformat-, Ausrichtungs- und Schutzindizes und liefert den absoluten cellXfs-Index, keinen Composite-Pool-Slot; die Sieben-Argument-Überladung akzeptiert eine eingebaute Zahlenformat-ID, die Vorrang vor dem gelieferten eigenen Formatindex hat, wobei null keine Überschreibung bedeutet

TXLSXWorkbook.RegisterLinkedCompositeXf zeichnet zusätzlich die Eltern-Style-XF-ID und die mit diesem Eltern verknüpften Formatteile auf und behält separate Einträge für verschiedene Eltern- oder Verknüpfungskombinationen; sie liefert ebenfalls einen absoluten cellXfs-Index

TXLSXWorkbook.CompositeXfBase liefert den ersten absoluten Composite-Index, berechnet aus den aktuellen eindimensionalen Stil-Pools, während TXLSXWorkbook.CompositeXfCount registrierte Composite-Einträge zählt; ein von GetCompositeXf genutzter Pool-Slot ist der absolute Index minus die Basis, und die Basis kann sich ändern, wenn diese Pools wachsen, also gehören diese Werte zum aktuellen Serialisierungszustand

TXLSXWorkbook.RegisterCondDxf registriert eine geliehene TXLSDxfStyle-Referenz und liefert ihre nullbasierte Differentialstil-ID, wobei eine vorhandene ID für dieselbe Objektreferenz wiederverwendet wird; halten Sie das Objekt am Leben, solange die Serialisierung es nutzt

TXLSXWorkbook.ResetCondDxfs leert die aktive Registrierungsanzahl, ohne geliehene Stile freizugeben, und TXLSXWorkbook.CondDxfCount meldet diese Anzahl; die Speichervorbereitung baut diese Registrierung neu auf, persistieren Sie diese IDs also nicht unabhängig vom geschriebenen Paket

TXLSXWorkbook.PivotCaches ist die arbeitsmappeneigene TXLSPivotCaches-Sammlung, die von Arbeitsblatt-PivotTables geteilt wird; AddPivotTable verwendet einen passenden Quellcache wieder oder erzeugt einen, und RefreshPivotCache aktualisiert den identifizierten Cache und bewahrt dabei unterstützte Member-Identitäten

Berechnungsintegration

TXLSXWorkbook.RecalcThreads steht standardmäßig auf null, wobei null oder eins serielle Neuberechnung nutzt und größere Werte Worker-Auswertung unabhängiger Formelgrenzflächen aktiviert; Arbeitsmappen mit dynamischen Arrays nutzen einen seriellen Durchlauf unabhängig von dieser Einstellung, What-if-Datentabellen-Knoten bleiben serial, und von Workern genutzte User-Function-Handler müssen threadsicher sein

TXLSXWorkbook.SolveCycleIteratively ist ein erweiterter Einstiegspunkt, den Recalculate normalerweise aufruft, wenn Iteration aktiviert ist, der Knotenindizes aus dem aktuellen Abhängigkeitsgraph dieser Arbeitsmappe verbraucht und Zyklusknoten in der gelieferten TList auswertet; Indizes aus einem Workspace-Graph oder einer anderen Arbeitsmappe sind nicht austauschbar

Der Solver nutzt IterateCount und IterateDelta, behält die Endwerte, selbst wenn das Iterationslimit erreicht wird, und liefert lxOk, ohne Konvergenz zu zertifizieren; Dynamische-Array-Zyklusmember liefern lxErrorCircumRef, und das CycleCount-Argument der Signatur ersetzt keine Zyklusklassifikation auf den Graphknoten

Workspace-Abhängigkeitsgraph aufbauen

TXLSWorkspaceDepGraph speichert Formelabhängigkeiten über aufrufergelieferte Arbeitsmappen- und Blattidentitäten hinweg, ohne Arbeitsmappen zu öffnen oder Formeln auszuwerten; konstruieren Sie einen Graph aus den aktuellen Formeln und aufgelösten Referenzen und bauen Sie ihn dann neu, nachdem strukturelle oder Formeländerungen diese Referenzen invalidiert haben

function TXLSWorkspaceDepGraph.AddNode(
  const AWorkbookIdentity, ASheetName: WideString;
  ASheetIndex, ARow, ACol, AOutRow2, AOutCol2: Integer;
  AVolatile: Boolean; AReferences: TXLSWorkspaceDepReferenceList;
  ARefUnstable: Boolean = False): Integer;
procedure TXLSWorkspaceDepGraph.DirtyTopoOrder(AOrder: TList;
  out ACycleNodeCount, ABlockedNodeCount: Integer);

TXLSWorkspaceDepGraph.AddNode hängt einen Formelknoten an und liefert seinen nullbasierten Knotenindex, wobei die gelieferten Referenzen kopiert werden, statt deren Liste zu besitzen; Blattindizes sind 1-basiert, während Zeilen- und Spaltenkoordinaten, einschließlich der rechten unteren Ecke des inklusiven Ausgaberechtecks, nullbasierte Calculator-Koordinaten sind

TXLSWorkspaceDepReferenceList.Add hängt einen aufgelösten Zell-, Bereichs- oder definierten Namen-Referenzrecord an, TXLSWorkspaceDepReferenceList.Items liest diese Records per nullbasiertem Index, und TXLSWorkspaceDepReferenceList.Clear setzt die Liste zur Wiederverwendung zurück; der Aufrufer besitzt diese Eingabeliste und kann sie leeren oder freigeben, nachdem AddNode ihre Einträge kopiert hat

TXLSWorkspaceDepGraph.BuildEdges löst gespeicherte Zell- und Bereichsreferenzen gegen Formelausgaberechtecke auf; als LookupScan markierte Referenzen propagieren Verschmutzung, erzwingen aber keine Auswertungsreihenfolge und nehmen nicht an der Zykluserkennung teil

TXLSWorkspaceDepGraph.NodeIndexOf löst eine Arbeitsmappe, ein Blatt, eine Zeile und eine Spalte zu einem nullbasierten Knotenindex oder -1 bei Abwesenheit auf, mit dem Blattnamen, wenn verfügbar, und dem deklarierten Blattindex als Fallback

TXLSWorkspaceDepGraph.FindDependentsOfDefinedName leert eine gelieferte Nicht-nil-TList und füllt sie mit den Knotenindizes, die direkt auf das benannte Symbol in der angegebenen Arbeitsmappe und dem angegebenen Scope verweisen, wobei ein negativer Scope-Index alle Scopes matcht; Einträge sind als Pointer(NativeInt(NodeIndex)) codiert, daher kann ein nil-Listeneintrag Knoten null repräsentieren

Workspace-Dirty-Generationen und Auswertungsreihenfolge

TXLSWorkspaceDepGraph.BeginDirtyGeneration startet eine neue Generation, setzt die aktive Dirty-Knotenanzahl und die zyklusblockierten Flags zurück und macht frühere Dirty-Stempel inaktiv; rufen Sie es auf, bevor Sie die Knoten für einen neuen Neuberechnungsdurchlauf markieren

TXLSWorkspaceDepGraph.MarkAllDirty markiert jeden Knoten der aktuellen Generation; TXLSWorkspaceDepGraph.MarkWorkbookDirty startet mit Knoten der identifizierten Arbeitsmappe und Knoten, die auf sie verweisen, und propagiert dann zu abhängigen Knoten, während TXLSWorkspaceDepGraph.MarkVolatileDirty volatile Knoten startet und TXLSWorkspaceDepGraph.MarkCyclesDirty erkannte Zykluskomponenten startet, ebenfalls mit Propagation ihrer Verschmutzung

TXLSWorkspaceDepGraph.IsNodeDirty meldet, ob ein gültiger Knoten den Stempel der aktuellen Generation trägt, und liefert False für einen ungültigen Index; TXLSWorkspaceDepGraph.DirtyGeneration legt diesen Stempel offen und TXLSWorkspaceDepGraph.DirtyNodeCount zählt die in der aktiven Generation markierten Knoten

TXLSWorkspaceDepGraph.DirtyTopoOrder erfordert eine Nicht-nil-, aufruferbesessene TList, leert sie und füllt sie mit Dirty-Knotenindizes in Abhängigkeitsreihenfolge, ohne Dirty-Zyklusknoten und durch diese Zyklen blockierte Knoten; seine beiden Ausgabezählungen unterscheiden Zyklusmember von blockierten nachgelagerten Knoten, und Listeneinträge nutzen dieselbe zeigercodierte nullbasierte Indexkonvention

TXLSWorkspaceDepGraph.HasRefUnstable meldet, ob ein Knoten mit dem Referenz-instabil-Flag hinzugefügt wurde, sodass der Aufrufer vermeiden kann, sich auf einen veralteten statischen Plan zu verlassen, wenn sich Formelreferenzen zur Auswertungszeit ändern können; der Graph löst diese sich ändernden Referenzen nicht selbst auf

Workspace-Graph-Inspektion

TXLSWorkspaceDepGraph.NodeCount zählt Formelknoten, TXLSWorkspaceDepGraph.ReferenceCount zählt kopierte Referenzen, und TXLSWorkspaceDepGraph.EdgeCount meldet gebaute Abhängigkeitskanten; rufen Sie BuildEdges auf, bevor Sie Kantenstatistiken verbrauchen

TXLSWorkspaceDepGraph.WorkbookCount zählt internierte Arbeitsmappenidentitäten, einschließlich durch Referenzen eingeführter Identitäten, und TXLSWorkspaceDepGraph.WorkbookIdentities enumeriert sie per nullbasiertem Index; diese Identitäts-Strings sind Graphschlüssel, kein Beleg dafür, dass eine externe Datei geladen wurde

TXLSWorkspaceDepGraph.ComponentCount meldet die Anzahl stark zusammenhängender Komponenten nach dem Komponentenaufbau, der durch MarkCyclesDirty, DirtyTopoOrder oder Komponentenzugriff ausgelöst wird; jeder Components-Record liefert NodeStart, NodeCount und IsCycle

TXLSWorkspaceDepGraph.ComponentNodes legt das abgeflachte nullbasierte Knotenindex-Array für diese Komponenten offen, indexiert vom NodeStart einer Komponente bis NodeStart + NodeCount - 1; Zählungen und indizierte Records beschreiben den aktuellen Graphen und sollten nach einer Graphrekonstruktion neu erfasst werden

Fahren Sie mit zusätzlichen XLSX-Fassaden-Membern und der XLSX-Fassaden-Übersicht für die gewöhnlichen Arbeitsmappen-Einstiegspunkte fort