Weitere Bibliotheks-API-Elemente
Diese Seite vervollständigt die Referenz für öffentliche Typen, die die primären Arbeitsmappen-, Arbeitsblatt-, Rendering-, Import-, Diagnose- und Viewer-APIs unterstützen, aber keinen separaten aufgabenorientierten Leitfaden erfordern
Filterung und bedingte Formatierung
TXLSAutofilter | Add, AddAutofilterData, AssignFrom, Clearund ParseAutofilterData bearbeiten oder importieren die Filterdefinition; SetRangeBounds(ARow1, ACol1, ARow2, ACol2) stellt 1-basierte inklusive Grenzen wieder her, ohne geladene Kriterien oder Dropdown-Shapes zu entfernen, und ignoriert nichtpositive oder umgekehrte Grenzen sowie eine Spaltenzahl, die von den geladenen Feldern abweicht; Defined, FirstRow, FirstCol, LastCol, LastRowund FieldCount legen ihre aktiven Grenzen und die Anzahl gefilterter Spalten offen |
TXLSAutofilterItem | Shape legt die dem Element zugeordnete Filterschaltflächen-Zeichnung offen, und das geladene Filterkriterium liegt als TXLSAutofilterDOPER -Operandendatensatz vor — DataType wählt die Operandenform, grbitSgn trägt die Vorzeichen- und Flag-Bits — zum Inspizieren oder für Roundtrip-Bearbeitungen |
TXLSDataBarSpec | AxisColor, AxisIsThemeColor, AxisThemeColorId, AxisThemeColorTintund ClearAxisThemeColor steuern die Achse; Direction, GradientFill, NegativeBarBorderColorSameAsPositive, NegativeBarColor, NegativeBarColorSameAsPositiveund NegativeBorderColor steuern das Erscheinungsbild der Balken; IsIndexedColor, IndexedColorIndexund ClearIndexedColor verwalten die palettenindizierte Balkenfarbe |
TXLSIconSetSpec | ThresholdEqualsInclude wählt für jede Symbolschwelle den einschließenden oder ausschließenden Vergleich |
TXLSCfValue | IsIndexedColor und IndexedColorIndex melden eine als Legacy-Palettenindex gespeicherte Schwellenfarbe, ClearIndexedColor entfernt diese Form wieder, und Design- oder Literal-Farben bleiben über die vorhandenen Accessoren verfügbar |
TXLSCfValue, TXLSDataBarSpec, TXLSColorScaleSpec, TXLSIconSetSpecund TXLSDxfStyle akzeptieren AttachWriteGuardOwnerund verknüpfen das Regelobjekt mit seiner besitzenden Arbeitsmappe, sodass Bearbeitungen automatisch einen Schreibguard anfordern; der Besitzer implementiert TXLSCondFormatWriteGuardOwner, dessen einzige Methode AcquireWriteGuard der Regel den Schreibguard der Arbeitsmappe übergibt. TXLSDxfStyle ergänzt FontColorIndex mit FontColorIsIndexed sowie die Paare FillFgColorIndex / FillFgColorIsIndexed und FillBgColorIndex / FillBgColorIsIndexed für palettenindizierte Regelfarben, dazu die differenziellen Schriftart-Overrides FontName, FontSizeund FontScheme (leere Zeichenfolge, ein Punktwert oder ein Design-Schriftart-Slot wie major / minor) neben den vorhandenen Membern für Fett, Kursiv, Unterstreichung und Farbe; jede Zuweisung fordert den Schreibguard an und markiert die Regel für die erneute Ausgabe als geändert
TXLSConnections, TXLSDataTables, and TXLSQueryTables expose OnAcquireWriteGuard , TXLSConnectionAcquireWriteGuardund TXLSDataTableAcquireWriteGuardlegen TXLSQueryTableAcquireWriteGuardoffen, den Hook, den ihre Bearbeitungspfade verwenden, um vor der Änderung den IXLSWorkbookWriteGuard der besitzenden Arbeitsmappe zu erhalten und danach die Arbeitsmappen-Generation voranzustellen; der Guard zeichnet StartGenerationauf, und Complete markiert den Schreibvorgang als abgeschlossen, sodass abhängige Caches neu aufgebaut werden können
Bewahrte Datenverbindungen tragen eine typisierte Beschreibung: TXLSConnectionKind (xlckUnknown, xlckOdbc, xlckDao, xlckFile, xlckWeb, xlckOleDb, xlckText, xlckAdo) klassifiziert die Verbindung, TXLSConnectionCredentials (xlccIntegrated, xlccNone, xlccStored, xlccPrompt) hält ihren Authentifizierungsmodus fest, und jeder Parameterwert einer Verbindung ist mit TXLSConnectionParameterValueKind (xlcpvNone, xlcpvBoolean, xlcpvDouble, xlcpvInteger, xlcpvString, xlcpvCell) markiert. Was-wäre-wenn-Datentabellen melden ihre gespeicherte Definitionsart über TXLSDataTableKind
Was-wäre-wenn-Datentabellen und Pivotgruppierung
TXLSDataTable | Assign, ContainsCellund IsRoot kopieren und prüfen eine Tabelle; Kind, FirstRow, FirstCol, LastCol, LastRow, AlwaysCalculate, ColumnInputCol, ColumnInputRow, ColumnInputDeleted, RowInputCol, RowInputRowund RowInputDeleted legen die gespeicherte Berechnungsdefinition offen |
TXLSDataTables | Add, AddExisting, Delete, Clear, Assign, AdjustForShiftund Offset pflegen die Auflistung; FindByCell und FindRoot finden die Tabelle, die eine angegebene Zelle enthält oder an ihr wurzelt; Count, Itemsund OnChange legen den Auflistungszustand offen |
TXLSPivotCacheField | GroupBaseField und GroupParentField legen die Beziehungen zwischen einem gruppierten Feld und seinem Quell- oder übergeordneten Feld offen |
Symbolschwellen lassen sich programmgesteuert rendern oder validieren: XLSCfIconSetCount meldet, wie viele Symbole ein TXLSIconSetType definiert, und XLSBuildCfIconGeometry füllt eine TXLSCfIconGeometry mit den Primitiven (TXLSCfIconPrimitive, Art TXLSCfIconPrimitiveKind: cfipPolygon, cfipEllipse, cfipRect, cfipLine) und Punkten (TXLSCfIconPoint), die ein Symbol zeichnen, sodass eigene Renderer Excels eingebaute Symbolformen treffen
Diagnose, Formelverfolgung und Validierung
TXLSDiagnostic | Code, NativeCode, Message, Severity, ExceptionClass, PartName, RecordId, SheetIndex, SheetNameund StreamOffset identifizieren eine Parser-, Writer- oder Paketdiagnose |
TXLSDiagnostics | Add hängt eine Diagnose an, Clear setzt die Auflistung zurück, und Count zusammen mit Items zählt ihre Einträge auf |
TXLSDiagnosticSeverity and TXLSDiagnosticOperation | TXLSDiagnosticSeverity (xlsDiagnosticInfo, xlsDiagnosticWarning, xlsDiagnosticError, xlsDiagnosticFatal) klassifiziert eine Diagnose, und TXLSDiagnosticOperation (xlsOperationNone, xlsOperationOpen, xlsOperationSave, xlsOperationCalculate, xlsOperationExport) benennt die Phase, die sie erzeugt hat; OnDiagnostic -Handler lesen beides aus der zugestellten TXLSDiagnostic |
TXLSFormulaDebugSession | CurrentStep, DependencyCount, NodeCountund StepCount legen die aktuelle Debugger-Momentaufnahme und ihre Ablaufverfolgungsgrößen offen |
TXLSFormulaTracer | StepCount meldet die Anzahl der aufgezeichneten Auswertungsschritte |
TXLSImportCheck | AddRule, AddUniqueRule und AddCrossColumnRule konfigurieren Spaltenprädikate, zusammengesetzte Eindeutigkeit und typisierte Vergleiche; Check liefert strukturierte Verletzungen aus gespeicherten Arbeitsblattwerten und Formel-Caches, ohne neu zu berechnen oder gepackte Zellen zu materialisieren; HeaderRow, FirstRow, LastRow, OnVerifyCell, ViolationCount und Violation legen Grenzen, Callbacks und Ergebnisse offen; Annotate und KeepOnlyViolations sind explizite Korrektur-Arbeitsmappen-Operationen; siehe Importvalidierungs-Schemata für Typen, Grenzen, Datumssysteme, Tupel-Identität und Fehlerverhalten |
Importvalidierungs-Schemata
TXLSImportCheck aus lxImportCheck validiert ein TXLSXWorksheet gegen Regeln der Anwendung; es untersucht gespeicherte Skalarwerte und gespeicherte Formelergebnisse, mit 1-basierten Arbeitsblattkoordinaten und ohne implizite Konvertierung von Text zu Zahl, Text zu Datum oder Text zu Boolean
Validator := TXLSImportCheck.Create;
try
Validator.HeaderRow := 1;
Rule := Validator.AddRule(2);
Rule.Name := 'quantity';
Rule.Flags := [irRequired, irValueType, irValueRange];
Rule.ValueKind := ivkInteger;
Rule.MinimumValue := 1;
Rule.MaximumValue := 1000;
Validator.AddUniqueRule([1, 3]).Name := 'account-and-region';
Validator.AddCrossColumnRule(4, 5, icLessOrEqual).Name := 'start-before-end';
FailureCount := Validator.Check(Sheet);
if FailureCount > 0 then
Validator.Annotate(Sheet, 'Import validator');
finally
Validator.Free;
end;HeaderRow > 0 startet die Prüfung in der nächsten Zeile und hat Vorrang vor FirstRow; sonst ist FirstRow standardmäßig 1; LastRow = 0 verwendet die letzte genutzte Zeile des Arbeitsblatts, während ein positives LastRow abwesende Zellen einschließen kann, ohne sie zu erzeugen; Spalten müssen innerhalb von 1 bis 16.384 liegen und aktive Datenzeilen-Grenzen innerhalb von 1 bis 1.048.576
Spaltenregeln und explizite Typen
TlxImportColumnRule | Column, Flags, Name, Title, MinLength, MaxLength, Pattern, ValueKind und DateSerialMode konfigurieren eine Spalte; MinimumValue, MaximumValue, HasMinimum, HasMaximum, MinimumInclusive und MaximumInclusive konfigurieren Grenzen; Validate prüft die Schemakonfiguration, und PreparePattern bereitet den Regex vor; die beiden Check-Überladungen liefern ein Boolean mit Fehlermeldung und optional einem TlxImportViolationKind |
TlxImportRuleFlags | irRequired, irTextLength, irPattern, irUnique und irCallback behalten ihre vorhandenen Prüfungen; irValueType aktiviert ValueKind, und irValueRange aktiviert die konfigurierten Grenzen; eine Spalte ohne Flags wird nicht geprüft |
TlxImportValueKind | ivkAny akzeptiert unterstützte endliche Skalarwerte, ivkNumber akzeptiert endliche numerische Varianten, ivkInteger verlangt zusätzlich einen ganzzahligen Wert, ivkDate akzeptiert Datums-Varianten oder explizit aktivierte Excel-Serials, ivkBoolean verlangt eine Boolean-Variante, und ivkText verlangt eine String-Variante |
TlxImportDateSerialMode | idsNone ist der Standard und hält numerische Werte von Datumswerten getrennt; idsExcel1900 und idsExcel1904 interpretieren numerische Werte für eine Spalte explizit, die irValueType mit ValueKind = ivkDate verwendet |
AddRule(Column) ersetzt jede frühere Regel für diese Spalte und gibt sie frei; die Prädikate für Wertetyp, Bereich, Länge und Muster pro Wert überspringen fehlende Werte, Nullen und leere Strings, während irRequired sie meldet; Eindeutigkeit behält die unten beschriebenen getrennten Politiken; nichtleeres Whitespace bleibt ein Wert; eine Zahl gilt nicht als Boolean, ein Datum nicht als gewöhnliche Zahl, und eine numerisch aussehende Zeichenfolge bleibt Text
Die Zuweisung von MinimumValue oder MaximumValue aktiviert die jeweilige Grenze; HasMinimum oder HasMaximum kann sie wieder deaktivieren; beide Inklusiv-Schalter stehen standardmäßig auf True; Grenzen müssen endliche typisierte Zahlen oder Datumswerte sein, und zwei Grenzen müssen vergleichbar sein und ein nichtleeres Intervall beschreiben; umgekehrte, fehlende, inkompatible oder leere Grenzen lösen eine Ausnahme aus, bevor die Arbeitsblattvalidierung beginnt
Zahlen-Grenzen vergleichen numerische Werte, Datums-Grenzen vergleichen Datumswerte; Ganzzahl-zu-Ganzzahl-Vergleiche bewahren alle Int64- und UInt64-Bits; Werte einer inkompatiblen Kategorie bestehen die Bereichsprüfung nicht; Textlängen- und Regex-Prädikate untersuchen weiterhin die Textrepräsentation des Skalars, und Regex-Prüfungen behalten das vorhandene IsMatch-Verhalten — verwenden Sie also Anker wie ^...$, wenn der komplette Text matchen muss; ein invalides Regex deaktiviert seine Musterprüfung aus Kompatibilitätsgründen
Datumsformatierte Excel-Werte
Eine aus Excel importierte Zelle kann eine numerische Serial enthalten, selbst wenn ihr Zahlenformat ein Datum anzeigt; wählen Sie einen Serial-Modus explizit, wenn genau das das akzeptierte Import-Schema ist; der Modus wirkt nur auf die Validierung und ändert niemals den gespeicherten Zellwert
Rule := Validator.AddRule(4); Rule.Flags := [irRequired, irValueType, irValueRange]; Rule.ValueKind := ivkDate; if Sheet.Workbook.Date1904 then Rule.DateSerialMode := idsExcel1904 else Rule.DateSerialMode := idsExcel1900; Rule.MinimumValue := VarFromDateTime(EncodeDate(2026, 1, 1)); Rule.MaximumValue := VarFromDateTime(EncodeDate(2026, 12, 31));
VarFromDateTime ist in Variants deklariert, EncodeDate in SysUtils; numerische Serials müssen nichtnegativ sein und vor dem 1. Januar 10000 auflösen; fraktionale Serials behalten ihre Tageszeit; das 1900-System weist jede Serial von 60 inklusive bis 61 exklusiv zurück, weil dieses Intervall den fiktiven Schalttag bezeichnet; das 1904-System mappt Serial null auf den 1. Januar 1904
Datums-Grenzen schließen die Tageszeit ein — ein auf Mitternacht des 31. Dezember gesetztes Maximum schließt spätere Zeiten an diesem Tag aus; verwenden Sie eine exklusive Obergrenze am 1. Januar des Folgejahres, wenn der gesamte letzte Tag akzeptiert werden soll; Textdaten wie 10/08/2026 bleiben Text, unabhängig vom konfigurierten Serial-Modus
Zusammengesetzte Eindeutigkeit und spaltenübergreifende Vergleiche
AddUniqueRule(const AColumns: array of Integer): TlxImportUniqueRule | Fügt eine unabhängige Tupel-Beschränkung über eine geordnete, nichtleere Liste distincter Spalten hinzu; Name identifiziert die Regel, Title stellt das Präfix ihrer Meldung, ColumnCount und nullbasierte Columns[Index] legen ihre Mitglieder offen, und SkipIncompleteRows ist standardmäßig True |
AddCrossColumnRule(ALeftColumn, ARightColumn: Integer; AComparison: TlxImportComparison): TlxImportCrossColumnRule | Fügt einen zeilengleichen Vergleich mit schreibgeschützten LeftColumn und RightColumn, einem editierbaren Comparison, Name, Title und SkipBlankValues hinzu, das standardmäßig True ist |
TlxImportComparison | icEqual, icNotEqual, icLess, icLessOrEqual, icGreater und icGreaterOrEqual wählen die Relation; numerische Paare und Datumspaare vergleichen ihre Werte, Boolean-Paare ordnen False vor True, und String-Paare vergleichen case-sensitiv ordinal über UTF-16-Codeeinheiten |
Zusammengesetzte Schlüssel behalten den exakten Variant-Typ und die Textidentität jedes Mitglieds; Integer(1), Double(1), der String '1', ein Boolean und ein Datum sind unterschiedliche Mitglieder; es gibt kein Case Folding, keine Unicode-Normalisierung, kein Locale-Parsing und keine Trennzeichen-Mehrdeutigkeit; Kombinationen wie ('ab', 'c') und ('a', 'bc') bleiben verschieden; jeder Validierungsdurchlauf startet einen frischen Tupel-Index
Bei SkipIncompleteRows = True schließt ein fehlendes, Null- oder Leerstring-Mitglied diese Zeile aus der Tupel-Eindeutigkeit aus; bei False werden diese Mitglieder mit ihren ursprünglichen Variant-Identitäten einbezogen; ein Duplikat meldet die erste Tupelspalte als Zelladresse und die erste passende Zeile über FirstDuplicateRow
Das vorhandene einspaltige irUnique behält sein textbasiertes, Case-insensitives Matchverhalten und überspringt fehlende oder Null-Werte; verwenden Sie AddUniqueRule([Column]), wenn für eine Spalte strenge typisierte Identität nötig ist
Spaltenübergreifende Vergleiche koerzieren niemals Strings zu Zahlen, Zahlen zu Booleans oder gewöhnliche Zahlen zu Datumswerten; gemischte inkompatible Kategorien scheitern auch bei icNotEqual; Stringvergleiche unterscheiden komponierte und dekomponierte Unicode-Formen, bewahren eingebettete Null-Zeichen und verwenden kürzere-Präfix-zuerst-Ordnung; bei SkipBlankValues = False erzeugt jeder leere Operand eine spaltenübergreifende Verletzung
Strukturierte Ergebnisse und Korrektur-Arbeitsmappen
TlxImportViolation | Row, Col, SheetName und Address identifizieren die Zelle, mit Address in A1-Notation; ValueText und ErrorText tragen Anzeigeinformationen; RuleName und Kind identifizieren die konfigurierte Regel und die Fehlerkategorie; RelatedColumn identifiziert den zweiten Operanden einer spaltenübergreifenden Verletzung, und FirstDuplicateRow identifiziert die Originalzeile bei Eindeutigkeitsverletzungen |
TlxImportViolationKind | ivRequired, ivTextLength, ivPattern, ivUnique, ivCallback, ivValueType, ivValueRange, ivCellError, ivFormulaCacheMissing, ivCompositeUnique und ivCrossColumn unterscheiden die unterstützten Fehlerkategorien |
Check(Sheet) liefert die Anzahl der Verletzungen, und ViolationCount plus nullbasiertes Violation(Index) zählen den Bericht auf; eine Spaltenregel meldet ihr erstes fehlgeschlagenes Prädikat, während unabhängig konfigurierte Tupel- und Vergleichsregeln weitere Verletzungen für dieselbe Zelle hinzufügen können; weisen Sie aussagekräftige Name-Werte zu, wenn Aufrufer stabile anwendungsseitige Regel-Identifikatoren brauchen
Formelzellen werden anhand ihrer gespeicherten Cache-Werte validiert; eine Formel ohne gespeichertes Cache-Ergebnis meldet ivFormulaCacheMissing, ein Fehlerergebnis meldet ivCellError; berechnen Sie vor der Prüfung explizit neu, wenn frische Formelergebnisse nötig sind; die Validierung greift nicht auf externe Quellen zu, ändert keine Formeldefinitionen und wertet nicht gecachte Formeln nicht aus
OnVerifyCell behält die TlxImportVerifyCell-Callback-Signatur und läuft nach erfolgreichen anwendbaren Spaltenprädikaten und Eindeutigkeitsprüfungen; er liefert ein Boolean und kann eine anwendungsseitige Fehlermeldung setzen; Callbacks müssen Arbeitsmappe und Validierungsschema unverändert lassen, und Arbeitsmappen-Schreibvorgänge werden von der Leselease zurückgewiesen; Callback-Ausnahmen propagieren, und die Lease wird für nachfolgende Operationen freigegeben
Check annotiert nie, löscht keine Zeilen und materialisiert keine gepackten Werte; verwenden Sie Annotate nach der Prüfung, um rote Schrift anzuwenden und Fehlermeldungstext an vorhandene Kommentare anzuhängen, oder rufen Sie explizit KeepOnlyViolations auf, um nicht verletzende Zeilen zu entfernen und eine Korrektur-Arbeitsmappe zu erzeugen; diese Methoden ändern das gelieferte Arbeitsblatt — rufen Sie sie also nach Durchsicht des Berichts an der beabsichtigten Arbeitsmappe auf
Die Validierung leiht sich Arbeitsblatt und Arbeitsmappe für den synchronen Aufruf; sie übernimmt weder das Objekteigentum des Aufrufers noch verlangt sie eine interface-gehaltene Arbeitsmappe; eine Leselease schützt relevante gespeicherte Zell-Snapshots und den Zugriff auf gespeicherte Formel-Caches während der gesamten Prüfung
Speicherrichtlinien für externe Links
TXLSExternalLinkUpdateMode = (xluPromptUser, xluNever, xluAlways);
property IXLSWorkbook.SaveExternalLinkValues: Boolean;
property IXLSWorkbook.UpdateLinks: TXLSExternalLinkUpdateMode;
property TXLSXWorkbook.SaveExternalLinkValues: Boolean;
property TXLSXWorkbook.UpdateLinks: TXLSExternalLinkUpdateMode;
xluPromptUser; xluNever und xluAlways ändern nur die in der Arbeitsmappe gespeicherte Aktualisierungseinstellung und autorisieren oder initiieren nie externen Datei- oder Netzwerkzugriff
Berechnungsaudit und Arbeitsmappenhinweise
function TXLSWorkbook.RecalcAndVerify(MaxIssues: Integer = 10000): TXLSCalculationAuditReport;
function TXLSXWorkbook.RecalcAndVerify(MaxIssues: Integer = 10000): TXLSCalculationAuditReport;
function TXLSWorkbook.RecalcAndVerifyEx(const Options: TXLSRecalcAuditOptions): TXLSCalculationAuditReport;
function TXLSXWorkbook.RecalcAndVerifyEx(const Options: TXLSRecalcAuditOptions): TXLSCalculationAuditReport;
function TXLSWorkbook.RunCalculationAudit(const Options: TXLSRecalcAuditOptions): TXLSCalculationAuditReport;
function TXLSWorkbook.FormulaIsVolatile(Formula: WideString): Boolean;
function TXLSWorkbook.AuditOverlayHash(SheetIndex, Row, Col: Integer): Integer;
function TXLSWorkbook.AuditOverlayRead(SheetIndex, Row, Col: Integer; var Value: Variant): Boolean;
procedure TXLSWorkbook.AuditOverlayWrite(SheetIndex, Row, Col: Integer; const Value: Variant);
procedure TXLSWorkbook.AuditOverlayClear;
TXLSCalculationAuditIssueKind = (xlcaiCacheMismatch, xlcaiParseFailure,
xlcaiMissingFunction, xlcaiMissingName, xlcaiUnsupportedArguments,
xlcaiCircularReference, xlcaiExternalReferenceDenied,
xlcaiExternalReferenceMissing, xlcaiDataTableSkipped, xlcaiCancelled,
xlcaiInternalFailure);
TXLSCalculationAuditIssue = record
Kind: TXLSCalculationAuditIssueKind;
SheetIndex: Integer;
SheetName: WideString;
Row: Integer;
Col: Integer;
Formula: WideString;
Symbol: WideString;
Expected: Variant;
Actual: Variant;
ResultCode: Integer;
Stack: WideString;
ExternalTarget: WideString;
end;
TXLSCalculationAuditIssues = array of TXLSCalculationAuditIssue;
TXLSRecalcAuditProgress = procedure(ASender: TObject;
ACurrent, ATotal: Integer; var ACancel: Boolean) of object;
property WorkbookCodeName: WideString;
property CalculationThreadMode: TXLSCalculationThreadMode;
property ForceFullCalculationState: TXLSOptionalBooleanState;
property RefreshAllOnLoadState: TXLSOptionalBooleanState;
RecalcAndVerify fasst Formelsymbolfehler und Cachewertabweichungen in stabilen strukturierten Kategorien mit Arbeitsblattkoordinaten, Formeln, Symbolen, Soll- und Istwerten sowie begrenzter Kürzung zusammen, ohne Caches oder Arbeitsmappensemantik zu verändern. RecalcAndVerifyEx führt den tiefen Audit aus: Jede Formel wird einmal über den Abhängigkeitsgraphen in ein isoliertes Ergebnis-Overlay ausgewertet, sodass abhängige Zellen diesen Lauf statt veralteter Caches lesen; Auswertungsfehler werden mit Ergebniscode kategorisiert, mit begrenztem Call Stack aufgezeichnet, beachten Problembudget und Fortschritts- oder Abbruch-Sink und bleiben schreibgeschützt, bis ApplyResults die neu berechneten Werte nach einem vollständig erfolgreichen Durchlauf über eine unveränderte Arbeitsmappenstruktur atomar übernimmtAbsoluteTolerance und RelativeTolerance steuern die Abweichungsberichterstattung, nicht Zwischenberechnungswerte oder die explizite Cache-Übernahme
Bei numerischen Ergebnissen erfordert eine Abweichung eine absolute Differenz oberhalb von AbsoluteTolerance und, wenn relative Toleranz aktiviert ist, oberhalb von RelativeTolerance * max(abs(Expected), abs(Actual))
Gleichheit an einer der Grenzen wird toleriert; geänderte Werte fließen dennoch in das Audit-Overlay ein, sodass abhängige Formeln die aktuelle Berechnung sehen, und ApplyResults übernimmt diese Werte, selbst wenn ihre Differenzen nicht meldefähig sind
Ein schreibgeschützter Audit verändert niemals gespeicherte CachesTXLSCalculationAuditReport.Issues ist ein TXLSCalculationAuditIssue; Kind wählt eine der xlcai* -Kategorien, Expected / Actual tragen die verglichenen Werte bei Cache-Abweichungen, Stack ist die begrenzte Auswertungs-Callchain, gerendert als Sheet!A1 > Sheet!B2 (äußerster Frame zuerst), und ExternalTarget beschreibt die externe Arbeitsmappe bei externen Bezugs-Problemen. TXLSRecalcAuditOptions.OnProgress ist eine TXLSRecalcAuditProgress -Senke, die ACurrent / ATotal -Knotenfortschritt empfängt und ACancel setzen kann, um den Audit an der nächsten Knotengrenze mit einem einzigen xlcaiCancelled -Problem zu stoppenRunCalculationAudit ist der Engine-Einstieg, an den die Arbeitsmappen-Audit-Wrapper delegieren, und nimmt denselben Optionsdatensatz entgegen. FormulaIsVolatile meldet, ob eine Formel bei jedem Durchlauf eine Neuberechnung erzwingen würde (Aufrufe wie NOW, RAND, TODAY, OFFSET, INDIRECToder ein nicht auflösbarer Bezug)AuditOverlayWrite speichert einen Ersatzwert für eine Zelle (1-basierter Blattindex, 0-basierte Zeile und Spalte gemäß Konvention des Calculators), AuditOverlayRead und AuditOverlayHash fragen sie ab, und AuditOverlayClear leert die Schicht. Überlagerte Werte liefern die normalen Zellwert-Getter zurück, sodass Neuberechnung und tiefer Audit sie sehen, ohne Arbeitsblattzellen zu verändern; das Leeren des Overlays stellt die gespeicherten Werte wieder herTabellenformel- und IME-Zustand
property TXLSXTable.ColumnCalculatedFormulaArrayStates[Index: Integer]: TXLSTableFormulaArrayState;
property TXLSXTable.ColumnTotalsFormulaArrayStates[Index: Integer]: TXLSTableFormulaArrayState;
property TDataValidation.ImeMode: TXLSDataValidationImeMode;
property TXLSXDataValidation.ImeModeKind: TXLSDataValidationImeMode;
SaveExternalLinkValues auf False , werden die Classic-Datensätze XCT und CRN beziehungsweise der externe sheetDataSet -Teilbaum des XLSX-Externbuchs weggelassen, während Linkziele, Blattnamen, externe definierte Namen, Beziehungen, Formelbezüge, unbekanntes XML und der In-Memory-Cache erhalten bleiben; stellt man die Eigenschaft in derselben Arbeitsmappe wieder auf True , kann dieser behaltene Cache erneut serialisiert werden
Untersuchung und Entfernung von Web-Add-In-Aufgabenbereichen
function IXLSWorkbook.HasWebAddinTaskPanes: Boolean;
function IXLSWorkbook.WebAddinTaskPaneCount: Integer;
function IXLSWorkbook.RemoveWebAddinTaskPanes: Integer;
function TXLSXWorkbook.HasWebAddinTaskPanes: Boolean;
function TXLSXWorkbook.WebAddinTaskPaneCount: Integer;
function TXLSXWorkbook.RemoveWebAddinTaskPanes: Integer;
1303 hinzu und lösen vor der Änderung eine Ausnahme aus, während Classic XLS und ODS False, 0und -1 ohne Paketscan zurückgeben
Anzeigerichtlinie für Arbeitsmappenobjekte
TXLSObjectDisplayMode = (xlsodmShowAll, xlsodmShowPlaceholders,
xlsodmHideAll);
property IXLSWorkbook.ObjectDisplayMode: TXLSObjectDisplayMode;
property TXLSWorkbook.ObjectDisplayMode: TXLSObjectDisplayMode;
property TXLSXWorkbook.ObjectDisplayMode: TXLSObjectDisplayMode;
property TXLSPaginationModel.ExportObjectPlaceholders: Boolean;
property TXLSPDFExport.ExportObjectPlaceholders: Boolean;
property TXLSSvgExport.ExportObjectPlaceholders: Boolean;
property TXLSPageImageExporter.ExportObjectPlaceholders: Boolean;
property TXLSPrintDocument.ExportObjectPlaceholders: Boolean;
property TXLSXHtmlExportOptions.ExportObjectPlaceholders: Boolean;
workbookPr.showObjects; fehlende Werte verwenden standardmäßig xlsodmShowAll, unberührte reservierte Classic-Payloads und nicht unterstützte XLSX-Tokens bleiben verlustfrei, und explizite Zuweisungen schreiben nur kanonische Werte
ExportObjectPlaceholders dieselbe kostengünstige Richtlinie ohne Dekodierung von Bild-Payloads oder Aufbau von Diagrammszenen anfordert
xlsodmHideAll verhindert vor dem Rendern das Sammeln von Zeichnungen und die objektausgelöste Bereichserweiterung; die Arbeitsmappenkonvertierung übernimmt alle drei Zustände, ODS schreibt im Platzhaltermodus vollständige Zeichnungen und lässt bei Ausblenden aller Objekte Zeichnungs- und Medienausgabe weg, während Arbeitsblatthintergründe unabhängig bleiben
Renderkalibrierungswerte und Momentaufnahmen
TXLSRenderCalibration = record
WidthCorrection: Double;
HeightCorrection: Double;
LineSpacing: Double;
CellMarginFactor: Double;
ScreenScaling: Integer;
MeasurementDpi: Integer;
end;
function XLSDefaultRenderCalibration: TXLSRenderCalibration;
function XLSValidateRenderCalibration(const AValue: TXLSRenderCalibration;
out AInvalidField: TXLSRenderCalibrationField): Boolean;
1, 1, 1, 1, 100und 96; Breiten- und Höhenkorrekturen müssen größer als null und kleiner als zwei sein, der Zeilenabstand ist auf (0, 4]begrenzt, Zellränder auf [0, 4], die Bildschirmskalierung auf [100, 500] Prozent und die Mess-DPI auf [36, 2400]RenderCalibration, CaptureRenderCalibrationund ResetRenderCalibration offen; die Zuweisung des gesamten Datensatzes wird vor der Änderung validiert, und jede Erfassung gibt eine unabhängige, vereinbarungsgemäß unveränderliche Wertmomentaufnahme für eine Rendering-Operation zurück
Rendergeometrie und Schriftmessung
TXLSRenderGeometryBackend = (xlsrgbAutoFit, xlsrgbPagination, xlsrgbPdf,
xlsrgbSvg, xlsrgbBitmap, xlsrgbPrintPreview, xlsrgbViewer, xlsrgbHtml);
TXLSRenderFont = record
Name: WideString;
Size: Double;
Styles: TXLSRenderFontStyles;
Charset: Byte;
end;
function CreateXLSRenderGeometry(
const ACalibration: TXLSRenderCalibration;
AWorkbookGeneration: UInt64;
ABackend: TXLSRenderGeometryBackend;
ACacheCapacity: Integer = 4096): IXLSRenderGeometry;
property TXLSHTMLExport.RenderGeometry: IXLSRenderGeometry;
property TXLSXHtmlExportSession.RenderGeometry: IXLSRenderGeometry;
IXLSRenderGeometry besitzt eine unveränderliche Kalibrierung, die Arbeitsmappen-Generation, eine Backend-Identität, einen Messdienst und einen begrenzten operationslokalen Metrik-Cache; CreateXLSRenderGeometry verwendet GDI, während CreateXLSPortableCairoRenderGeometry in lxPortableCairo unter nativem Linux oder macOS explizite Font-Bytes mit FreeType/HarfBuzz nutzt; MeasureText gibt Pixelbreite, Höhe, Zeilenhöhe, Oberlänge, Unterlänge und Zeilenanzahl zurück, während MaximumDigitWidthPixels, ColumnWidthToPixels, PixelsToColumnWidth, PointsToPixels, PixelsToPointsund UsableCellWidthPixels die gemeinsamen Geometrieumrechnungen bereitstellen
MarkSheet -Messung, während TXLSPaginationModel.Build einen Dienst für das ausgewählte RenderBackenderfasst; PDF-, SVG-, Bitmap-, Druckvorschau-, Arbeitsmappen-Viewer- und HTML-Einstiegspunkte wählen vor der Ausgabe ihr eigenes Backend, eine geänderte Arbeitsmappenkalibrierung kann eine bestehende Momentaufnahme nicht verändern, und die Ausgabe schreibt keine Arbeitsblattdimensionen
xlsrgbHtml -Dienst, während eine inkrementelle TXLSXHtmlExportSession einmal in BeginExport erfasst und diese Momentaufnahme für alle Blätter wiederverwendet; beide Exporter legen den behaltenen Dienst über RenderGeometry für Kalibrierungs- und Cachediagnose offen
IXLSRenderGeometry -Eigenschaften WorkbookGeneration, CacheCapacityund CacheEntryCount melden die gebundene Generation und Cache-Füllung für Diagnosen, und ImplicitWidthMaximumDigitWidthPixels gibt die Ziffernbreitenmessung hinter der Emulation impliziter Spaltenbreiten zurück
MeasureText füllt einen TXLSRenderTextMetrics -Datensatz (Pixelbreite, Höhe, Zeilenhöhe, Oberlänge, Unterlänge und Zeilenanzahl) aus einer TXLSRenderFont , deren Styles -Member eine Menge aus TXLSRenderFontStyle -Flags ist (fett, kursiv, unterstrichen, durchgestrichen)
Import, Codegenerierung, Vergleich und Überwachung
TXLSHTMLImport | LoadFromHTML -Überladungen importieren HTML-Tabelleninhalte aus einem Stream oder einer Datei in ein Arbeitsblatt, mit optionalen Startkoordinaten, Tabellenauswahl und Dezimaltrennzeichen |
TXLSCodeGen | Language (Typ TlxCodeGenLanguage: lcgDelphi oder lcgCppBuilder) wählt den Quell-Dialekt der generierten Anweisungen, GenerateToList schreibt generierten Arbeitsmappencode in eine Zeichenfolgenliste, und TlxCodeGenOptions erweitert die Ausgabe um verbundene Zellen, Spaltenbreiten oder Zahlenformate (cgoMerges, cgoColumnWidths, cgoNumberFormats; Blätter und Zellen werden immer ausgegeben) |
TXLSXWorkbookCompare | Compare vergleicht typisierte gespeicherte Zellen, Formeltext, Blattpräsenz und Verbunde; Options ergänzt Formel-Caches, Basis-Zellstile und Zeilen- oder Spaltengeometrie, SetNumericTolerance konfiguriert numerische Gleichheit, und Count, Diff und Report legen die geordneten Ergebnisse offen; siehe Arbeitsmappenvergleich |
TXLSFileMonitor | IntervalMs wählt das Abfrageintervall, und SynchronizeEvent wählt die synchronisierte Rückrufzustellung; ein OnFileChanged -Handler darf den Monitor deaktivieren oder zerstören oder FileName ändern, um eine andere Datei zu beobachten |
TXLSCSVLoader and TXLSCSVSaver | Der Loader parst getrennten Text in ein speicherinternes Raster aus Variants — ParseFile und ParseStream füllen das Raster, CellValue, RowCountund ColCount lesen es zurück — mit automatisch erkanntem Trennzeichen (ValueSeparator) und Encoding (TXLSCsvEncoding: System-ANSI, UTF-16, UTF-8) sowie optionaler Typförderung, gesteuert über DetectTypes und spaltenweise ColumnTypes -Einträge (TXLSCsvColumnType: auto, text, number, date, boolean, skip); SkipRows, AutoTrim, LocaleTolerantNumbersund FieldWidths verfeinern die Behandlung fester Breiten und Ländereinstellungen. TXLSCSVSaver.SaveAs schreibt das Raster mit RFC-4180-Quoting zurück, und QuoteAllStrings erzwingt Anführungszeichen; TXLSTSVSaver leitet sich für tabulatorgetrennte Ausgabe vom Saver ab |
Arbeitsmappenvergleich
TXLSXWorkbookCompare in lxCompare vergleicht zwei TXLSXWorkbook-Instanzen, ohne Formeln neu zu berechnen oder eine der Arbeitsmappen zu ändern; Blätter werden über Case-insensitive Namen gepaart, und eine alleinige Änderung der Blattreihenfolge erzeugt keinen Unterschied
Der Standardwert von Options ist leer, und beide Toleranzen stehen standardmäßig auf null; der Standardvergleich meldet hinzugefügte oder entfernte Blätter, hinzugefügte oder entfernte gespeicherte Zellen, geänderte typisierte Literalwerte, geänderten Formeltext sowie hinzugefügte oder entfernte Verbundbereiche
Der Literalvergleich unterscheidet Zahlen, Text, Boolean-Werte, Datumswerte, Fehler und Leerzellen: die Zahl 1 unterscheidet sich vom Text '1', ein Boolean unterscheidet sich von seiner Textschreibweise, Datumswerte behalten ihren eigenen Typ, und Fehler werden anhand ihres gespeicherten Fehlercodes verglichen; numerische Speichertypen mit gleichen Werten vergleichen gleich, während unterschiedliche Int64-Werte im exakten Vergleich unterschiedlich bleiben
lcoFormulaCachedResults | Vergleicht bei Zellen mit passendem Formeltext das vorhandene gecachte Ergebnis und unterscheidet einen fehlenden oder invalidierten Cache von einem verfügbaren; geladene und berechnete Caches mit demselben typisierten Wert vergleichen gleich |
lcoCellStyles | Vergleicht aufgelöste Basisstile an passenden gespeicherten Zellkoordinaten, einschließlich Schriftarten, Füllungen, Verläufen, Rahmen, Ausrichtung, Zahlenformaten und Zellschutz; eine unabhängige Stilpool-Einfügungsreihenfolge erzeugt keine Unterschiede, und Designfarben werden gegen das aktuelle Design jeder Arbeitsmappe aufgelöst |
lcoAxisGeometry | Vergleicht effektive Zeilenhöhen, Spaltenbreiten, Ausgeblendet-Flags, Gliederungsebenen, Zusammengeklappt-Flags und Arbeitsblatt-Defaults; eine explizite Größe gleich dem effektiven Standard vergleicht gleich mit einer impliziten Größe |
lcoDefinedNames | Vergleicht Arbeitsmappen- und Arbeitsblatt-Namen mit Geltungsbereich, ihre Formeldefinitionen, Sichtbarkeit, Kommentare und Makro-Flags; der Geltungsbereich folgt Arbeitsblattnamen, und die Einfügungsreihenfolge erzeugt keine Unterschiede |
lcoDataValidations | Vergleicht Validierungsdefinitionen in gespeicherter Reihenfolge, einschließlich normalisierter Zielbereiche, Formeln, Operatoren, Eingabeaufforderungen, Fehlermeldungen und Steuerflags; das Umordnen von Zielbereichen innerhalb einer Definition erzeugt keinen Unterschied |
lcoConditionalFormats | Vergleicht bedingte Formatdefinitionen in gespeicherter Reihenfolge, einschließlich effektiver Priorität, Stop-if-true-Verhalten, Zielbereichen, Formeln, differentieller Stile und unterstützter Farbverlauf-, Datenbalken- und Symbolsatz-Einstellungen; Stilpool- und Indexpaletten-Identifikatoren lösen zu ihren semantischen Werten auf |
lcoTables | Paart Tabellen über Namen und vergleicht Bereiche, Kopfzeilen, Summen, Stileinstellungen, Kommentare, Spaltennamen, Bezeichnungen, Formeln, Array-Flags, eindeutige Namen, Verbindungsnamen, Filterkriterien und Sortierbedingungen; Tabellen-IDs, Spalten-IDs und Einfügungsreihenfolge erzeugen keine Unterschiede, während Farbfilter- und Sortier-Differentialstil-IDs sich zu ihrem Erscheinungsbild auflösen |
lcoDrawings | Vergleicht typisierte Zeichnungsdefinitionen in Zeichnungsreihenfolge und behält Gruppenkind-Reihenfolge und Diagramm-Plotgruppen-Reihenfolge bei; unterstützte kanonische Definitionen umfassen Bilder, Textfelder, Diagramme, Gruppen, vollständige typisierte Slicer-Ansichten und typisierte Timeline-Ansichten, wobei opake oder nicht unterstützte Zeichnungsknoten EXLSSemanticSnapshot auslösen |
lcoBlankStyleRegions | Vergleicht aufgelöste Basisstile über Koordinaten ohne gespeicherte Zelle auf beiden Seiten, einschließlich Arbeitsblatt-Defaults und virtueller Stil-Overlays; äquivalente Rechteckunterteilungen vergleichen gleich, und gleiche benachbarte Änderungen verdichten sich zu Rechtecken, ohne Zellen zu materialisieren |
lcoRichTextRuns | Vergleicht effektive Run-Schriftarten und -Text an passenden gespeicherten Textzellen, erbt die Basisschrift für ausgelassene Run-Eigenschaften, ignoriert leere Runs und verdichtet benachbarte Runs mit gleichen effektiven Schriftarten; einfacher Text passt zu einem äquivalenten Rich-Text-Run mit Standardschrift |
lcoPivotTables | Paart typisierte PivotTable-Definitionen über Namen und vergleicht Quellbindungen, Layout, Felder, geordnete Ansichtsmember, Datenaggregationen, Filter, Gruppierungsreferenzen, berechnete Definitionen, Stile und native Materialisierungs-Flags; Cache- und Shared-Member-IDs lösen sich zu Quellidentitäten und typisierten Werten auf |
lcoPivotCaches | Paart lokale typisierte PivotCache-Definitionen über Quellidentität und vergleicht Refresh-Metadaten, Feldmetadaten, gruppierte Bezeichnungen und Bereiche, ungeordnete Shared-Member-Domänen und geordnete typisierte Datensatzwerte; numerische, Text-, Boolean-, Datums-, Fehler- und leere Member bleiben unterschieden, Datumswerte behalten binary64-Präzision, und Cache-IDs sowie die Slot-Reihenfolge von Shared-Membern erzeugen keine Unterschiede |
lcoSlicerState | Paart benannte Slicer-Ansichten und -Caches, einschließlich Tabellenspalten- oder Non-OLAP-Pivot-Bindungen, verbundener PivotTable-Namen, typisierter Member-Auswahlen, Cross-Filter- und Sortiereinstellungen, Beschriftung, Scrollposition, Spaltenlayout, Abmessungen, Stil, Sperren- und Beschriftungsflags sowie Ankergeometrie; Bindungen lösen Tabellen-, Spalten-, Blatt- und Cache-IDs auf |
lcoTimelineState | Paart benannte typisierte Timeline-Ansichten und lokale Non-OLAP-Caches, einschließlich Quellfeld- und verbundener PivotTable-Bindungen, aktiver Datumsauswahl, Beschriftung, Ebene und Arbeitsblattgrenzen; inaktive Auswahlen lassen ungenutzte Datumsendpunkte weg |
Options hat den Typ TlxCompareOptions, eine Menge von TlxCompareOption; das Aktivieren einer Option ergänzt ihre Unterschiede zum Standardvergleich
SetFeatureLimits(MaxBytes, MaxItems) validiert beide positiven Limits, bevor eine der Einstellungen geändert wird; MaxFeatureBytes steht standardmäßig auf 64 MiB und MaxFeatureItems auf 1.000.000, und die einzelnen Setter wenden dieselbe atomare Validierung an
Feature-Budgets decken die aggregierten entkoppelten kanonischen Bytes und gezählten Einträge aus beiden Arbeitsmappen ab, einschließlich Rich-Text-Runs, Filter-XML-Knoten, Pivot-Feldern, Domänenmembern und Datensatzwerten sowie Slicer- oder Timeline-Verbindungen; Reader prüfen Zähler und große Texteingaben, bevor sie natives XML konstruieren, erzwingen begrenzte Ausgabeströme und lösen EXLSXSemanticBudget aus, wenn ein Limit überschritten wird
SetNumericTolerance(AbsoluteTolerance, RelativeTolerance) validiert beide Argumente, bevor eine der Einstellungen geändert wird; beide müssen endlich und nichtnegativ sein, und die einzelnen Setter für AbsoluteTolerance und RelativeTolerance verwenden dieselbe Validierung
Numerische Literal- und Cache-Werte vergleichen gleich, wenn ihre absolute Differenz höchstens AbsoluteTolerance beträgt oder ihre Differenz relativ zum größeren Absolutbetrag höchstens RelativeTolerance ist; eine Schwelle von null behält exakte Gleichheit bei, die relative Berechnung vermeidet Overflow bei extremen Gegenwerten, und Toleranz koerziert keinen Text und gilt nicht für Datumswerte, Stile oder Geometrie
LeftName und RightName setzen optionale Anzeigenamen, die Report-Zeilen verwenden, standardmäßig left und right; die Namen wirken nur auf die Berichterstattung, nicht auf Blattpaarung oder Vergleich
Comparer := TXLSXWorkbookCompare.Create;
try
Comparer.Options := [lcoFormulaCachedResults, lcoCellStyles,
lcoAxisGeometry];
Comparer.SetNumericTolerance(0.001, 0.000001);
DifferenceCount := Comparer.Compare(LeftWorkbook, RightWorkbook);
for I := 0 to DifferenceCount - 1 do
begin
Entry := Comparer.Diff(I);
ReportLines.Add(Entry.Describe);
end;
finally
Comparer.Free;
end;Compare liefert die Differenzanzahl, Count liest diese Zahl danach, und Diff(Index) verwendet nullbasierte Indizierung und liefert einen Comparer-eigenen TlxCompareDiff; behalten Sie den Comparer beim Lesen seiner Einträge, und holen Sie Einträge nach einem weiteren erfolgreichen Vergleich neu
Jeder Eintrag bietet Kind, Sheet, 1-basierte Row und Col wo anwendbar, Ref, LeftText, RightText sowie typisierte LeftKind-/ RightKind-Werte; TlxCompareValueKind enthält lcvNone, lcvBlank, lcvNumber, lcvText, lcvBoolean, lcvDateTime, lcvError und lcvFormula, wobei lcvNone für eine abwesende Seite oder einen Nicht-Wert-Unterschied steht
TlxCompareKind behält lckSheetAdded, lckSheetRemoved, lckCellAdded, lckCellRemoved, lckValueChanged, lckFormulaChanged, lckMergeAdded und lckMergeRemoved und ergänzt lckFormulaCacheChanged, lckStyleChanged, lckRowGeometryChanged und lckColumnGeometryChanged
Stilunterschiede tragen stabile kanonische Stil-Fingerprints in LeftText und RightText; Geometrieunterschiede tragen den verglichenen Zustand von Größe, Ausgeblendet, Gliederung und Zusammengeklappt, wobei Ref das betroffene zusammenhängende Achsintervall identifiziert, bei Zeilen Row auf dessen erste Zeile und Col auf null gesetzt ist, bzw. bei Spalten Col auf dessen erste Spalte und Row auf null
Feature-Unterschiede verwenden lckDefinedNameChanged, lckDataValidationChanged, lckConditionalFormatChanged, lckTableChanged, lckDrawingChanged, lckPivotTableChanged, lckPivotCacheChanged, lckSlicerChanged oder lckTimelineChanged; Change ist lccChanged, lccAdded oder lccRemoved, und jede vorhandene Seite trägt ihren kanonischen Definitions-Fingerprint, während eine abwesende Seite einen leeren String trägt
lckRichTextChanged identifiziert eine geänderte Run-Definition an ihrer Zellkoordinate und trägt kanonische Run-Fingerprints in LeftText und RightText; numerische Toleranz gilt für Zellliterale und Formel-Caches, während typisierte Feature-Definitionen exakt verglichen werden
Feature-Referenzen identifizieren Namen mit Geltungsbereich oder Tabellennamen oder verwenden 1-basierte Sequenzpositionen für Validierungs-, bedingte Format- und Zeichnungsdefinitionen; das Einfügen oder Verschieben eines geordneten Features kann mehrere Positionen ändern, während Arbeitsmappen-Nameseinträge ein leeres Sheet haben
lckBlankStyleRegionChanged identifiziert ein geändertes leeres Rechteck über Row, Col, inklusive LastRow und LastCol sowie seine A1-Ref; gespeicherte Koordinaten behandeln der gewöhnliche Zellvergleich und lcoCellStyles — aktivieren Sie also beide Stiloptionen, um gespeicherte Zellen und leere Bereiche gemeinsam zu inspizieren
Describe formatiert einen Eintrag, während Report(List) die formatierten Einträge an eine aufrufereigene TStrings-Liste anhängt; eine typisierte Wertänderung schließt Typbezeichnungen ein, wenn sich die Typen unterscheiden, und Ergebnisse sortieren nach Blattname, Zeile, Spalte, Unterschiedsart und Referenz statt nach Zelleinfügungsreihenfolge
Der Vergleich hält Leseleases, durchläuft gespeicherte Zellen über entkoppelte Cursor-Snapshots und behält gepackten Speicher; Geometrie partitioniert gespeicherte Metadatengrenzen und kompakte wiederholte Zeilenspannen, während der Leerstil-Vergleich aktive Rechteck- und gespeicherte Zellgrenzen abtastet, ohne ein rechteckiges Millionenzeilen-Raster zu scannen; der Aufwand wächst mit gespeicherten Features, Regionsschnittmengen und gemeldeten Unterschieden
Ein fehlgeschlagener Vergleich bewahrt das vorherige erfolgreiche Ergebnis; eine invalide Toleranzzuweisung bewahrt ebenfalls die vorhandenen Einstellungen und das Ergebnis, während die Übergabe einer nil-Arbeitsmappe das Ergebnis leert und null zurückgibt
Dieser Vergleich deckt den gespeicherten Zellinhalt der XLSX-Fassade und ausgewählte typisierte Feature-Definitionen ab; die Schreibweise von Namen, Validierungs-, bedingten Format-, Tabellen- und Diagrammformeln normalisiert über den semantischen Formelparser, während Pivot-berechnete Formeln ihren gespeicherten Definitionstext behalten
Tabellenfilter akzeptieren unterstützte benutzerdefinierte, Wertlisten-, Datumsgruppen-, Farb-, Symbol-, dynamische und Top-Count-Formen sowie Sortierbedingungen; unabhängige Filterspalten und Wertmengen-Einträge normalisieren ihre Reihenfolge, Boolean-Defaults und numerische Schreibweisen normalisieren, und die Reihenfolge von Sortierbedingungen bleibt signifikant
Typisierter Pivot-, Slicer- und Timeline-Vergleich löst unterstützte lokale Arbeitsblattquellen und Non-OLAP-Bindungen auf, ohne Verfügbarkeit zu aktualisieren oder auszuwerten; native Slicer-Verfügbarkeitshinweise sind abgeleitete Anzeigemetadaten, während Member-Auswahlen und erkannte native Sortiermetadaten verglichen werden
Opake native Zeichnungseigenschaften, unvollständige binäre Pivot-Modelle, externe oder OLAP-Pivot-Quellen, rohe PivotTable-Ergänzungsdatensätze und -Erweiterungs-XML, unbekanntes Filter-XML sowie nicht modellierte Slicer- oder Timeline-Erweiterungsattribute oder -Kinder lösen EXLSSemanticSnapshot aus; die Bewahrung solcher Daten impliziert keine semantische Äquivalenz
Ausgewählte importierte PivotTable- und PivotCache-Features validieren zusätzlich bewahrtes natives XML, bevor die typisierte Projektion verglichen wird, einschließlich verschachtelter Feldmetadaten und Cache-Datensätze; unbekannte Namespaces, Attribute, Kinder und Erweiterungs-Payloads schlagen innerhalb derselben kooperativen Feature-Limits explizit fehl, während modellierte Slicer-Cache-Bindungen unterstützt bleiben
TSimpleDomNode.RawName legt den ursprünglichen Element-QName neben dem lesernormalisierten Name offen und ermöglicht so namespace-sensible Inspektion, ohne das vorhandene Parser-Namen-Matching zu ändern
Arbeitsmappeneinstellungen und opake Paketmetadaten bleiben außerhalb des Vergleichs; der Basisstilvergleich wertet weder das Erscheinungsbild bedingter Formate noch das von Tabellenstilen aus, und der Zeichnungsvergleich bewahrt die unterstützten Bild-, Textfeld-, Diagramm- und geordneten-Gruppen-Grenzen des semantischen Snapshots
Effektive Rich-Text-Eigenschaften
TMsoFbtOpt.StoredPids liefert gespeicherte OfficeArt-Eigenschaftsbezeichner in sortierter Reihenfolge, während TMsoFbtSp.PersistentFlags native Shape-Flags offenlegt, ohne Eigenschaften oder Anker zu allokieren
TMsoShapeContainer.HasPreservedObjectData identifiziert bewahrte OBJ-Schwanz-Bytes; HasOrdinaryEmbeddedPictureObjectData prüft, dass Bildschwänze nur erkannte Clipboard-Format- und Null-Bildflag-Datensätze enthalten, und weist verlinkte oder unbekannte Datensätze ohne Kopieren der Payload zurück
TMSOShapeTextBox.HasValidTextRuns prüft gespeicherte TXO-Run-Grenzen und reservierte Felder, ohne Runs zu erzeugen; TMsoDrawing.HasUnmodeledAppearance identifiziert native Zeichnungsdaten, die der typisierte Parser überspringt, sodass die Erfassung ungelöste Darstellung explizit zurückweisen kann
TXLSXRichTextRun.BoldSet, ItalicSet, StrikethroughSet, UnderlineSet, VertAlignSet und ColorSet unterscheiden geerbte Schrift-Eigenschaften von expliziten Overrides, einschließlich false-Flags, none, Baseline und automatischer Farben; Setter markieren die Eigenschaft als explizit, selbst wenn ihr Wert dem anfänglichen Default des neuen Runs entspricht
TXLSXRichText.HasUnsupportedAppearance meldet native Rich-Eigenschaften, die das typisierte Run-Modell nicht darstellen kann; portable Erfassung und effektiver Rich-Text-Vergleich weisen solche Runs explizit zurück, während unterstützte Shared-/Inline-Run-Eigenschaften und Whitespace ihre importierte Semantik behalten
Der effektive Rich-Text-Vergleich wendet explizite false-Overrides an, bevor benachbarte gleiche Runs verdichtet werden; geerbte und explizit gelöschte Eigenschaften bleiben bei der Shared-String-Deduplizierung und unterstützten XML-Roundtrips unterschieden
TXMLReader.ResolveNamespaceUri(Prefix, Uri) löst die aktuell im Geltungsbereich liegende Namespace-Bindung auf, ohne die Leserposition zu ändern, und liefert false, wenn keine Bindung existiert; ein leerer Präfix fragt den Standard-Namespace an, und rohe QNames bleiben für namespace-sensible Inspektion verfügbar
Die unveränderlichen Rich-/Scene-Datensätze, die Capture-Source-Erweiterung und der HXRSNP02-Übertragungsvertrag sind in Portable Headless-Ausgabe beschrieben
Entkoppelte Stil- und Achseninspektion
TXLSXWorksheet.ReadSemanticCellStyle(Row, Col) liefert einen entkoppelten TXLSSemanticCellStyle für gültige 1-basierte Koordinaten und löst gespeicherte und gepackte Stile, Arbeitsblatt-Defaults, anwendbare Stil-Overlays, implizite Datumsformate, Indexpalettenfarben und Designfarben auf, ohne Zellen zu materialisieren oder Stilpools zu ändern; der öffentliche Aufruf erwirbt eine Leselease und schließt Regeln bedingter Formate und Tabellenstile aus
TXLSXWorksheet.GetStoredAxisSpans(IsRow) liefert TXLSXAxisSpans, ein Array aus TXLSXAxisSpan-Datensätzen mit inklusiven 1-basierten FirstIndex und LastIndex; er meldet Metadaten-Fußabdrücke für Größe, Ausgeblendet, Gliederung und Zusammengeklappt, bewahrt kompakte wiederholte Zeilenhöhen-Spannen und hält den effektiven Standard des Arbeitsblatts über dessen gewöhnliche Eigenschaften verfügbar
Die zurückgegebenen Spannen beschreiben gespeicherte Metadaten-Fußabdrücke statt einer disjunkten normalisierten Partition; Anwendungen, die zwei Achsen vergleichen, können deren erste und letzte Grenzen kombinieren und dann den effektiven Zustand einmal pro resultierendem Intervall inspizieren
TXLSXWorksheet.GetStoredStyleRegions liefert entkoppelte TXLSXStyleRegions mit inklusiven FirstRow, FirstCol, LastRow- und LastCol-Grenzen für kompakte Fußabdrücke virtueller Formatierung; diese Fußabdrücke können sich überlappen, und Aufrufer lesen ihr effektives Erscheinungsbild mit ReadSemanticCellStyle
TXLSXWorkbook.ReadSemanticFeatures(Kind, Sheet, MaxBytes, MaxItems) liefert entkoppelte TXLSXSemanticFeatures-Einträge mit stabilem Key, kanonischen Definition-Bytes und gezähltem ItemCount; optionale positive Limits stehen standardmäßig bei 64 MiB und 1.000.000 Einträgen
TXLSXSemanticFeatureKind enthält xlsxSemanticDefinedNames, xlsxSemanticDataValidations, xlsxSemanticConditionalFormats, xlsxSemanticTables, xlsxSemanticDrawings, xlsxSemanticPivotTables, xlsxSemanticPivotCaches, xlsxSemanticSlicers, xlsxSemanticSlicerCaches, xlsxSemanticTimelines und xlsxSemanticTimelineCaches
Definierte Namen und die drei Cache-Arten verwenden arbeitsmappenweiten Geltungsbereich und erlauben ein nil-Blatt; die anderen Arten verlangen ein zur Arbeitsmappe gehörendes Arbeitsblatt, Regeln und Zeichnungen behalten ihre gespeicherte Sequenz, und zurückgegebene Arrays und Puffer sind Kopien im Eigentum des Aufrufers; diese Reader erwerben Leseleases und erben die typisierte Abdeckung und das explizite Verhalten bei nicht unterstützten Daten wie oben beschrieben
TXLSXWorksheet.ReadSemanticRichText(Row, Col, IncludePlainText, MaxBytes, MaxItems, ConsumedItems) liefert entkoppelte kanonische Run-Bytes für 1-basierte Koordinaten oder einen leeren Puffer, wenn kein Rich-Text existiert und IncludePlainText false ist; das optionale ConsumedItems: PInteger empfängt die erfasste Run-Anzahl, und Plain-Text-Erfassung behält gepackten Speicher
TXLSPivotCacheField.GroupItemTypes[Index] legt die typisierte Art offen, die GroupItemLabels[Index] entspricht, und weist einen Index außerhalb der gespeicherten gruppierten Bezeichnungsdomäne zurück
Formelmetadaten- und Pivot-Abfrage-Callbacks
TXLSGetCellFormulaText und TXLSCalculator.OnGetCellFormulaText lesen gespeicherten Ausdruckstext mit einem 1-basierten SheetIndex und nullbasierten Row/Col, liefern lxOk oder einen typisierten Fehlercode und beachten formelverborgenen Schutz; TXLSGetPivotTable und OnGetPivotTable lokalisieren eine geliehene Tabelle über 1-basierten SheetIndex und nullbasierte Bereichskoordinaten
Die Arbeitsmappen-Engines verdrahten diese optionalen Callbacks in normalen, schreibgeschützten und isolierten Berechnungskontexten; Callbacks berechnen keine Ziele neu, aktualisieren keine Pivot-Quellen und übertragen kein Eigentum
TXLSPivotDataConstraint speichert einen FieldName und ein typisiertes Item, wobei TXLSPivotDataConstraints Feld-/Element-Paare sammelt; TXLSPivotTable.GetDataValue fragt ein sichtbares unterstütztes Aggregat aus einem entkoppelten lokalen Tabellen-/Cache-Snapshot ab, und IntersectsQueryRange verwendet 1-basierte Arbeitsblattgrenzen einschließlich modellierter Berichtsfilter-Zellen
TlxPivotQueryBudget empfängt Work- und Speicherschätzungen synchron und liefert, ob die Auswertung fortgesetzt werden kann; EXLSPivotQueryBudget und EXLSPivotQueryUnsupported unterscheiden erschöpfte Limits von nicht unterstützten Cache- oder Aggregatmodellen
TXLSPivotCache.QueryModelIsComplete zeichnet die Dekodier-Bereitschaft der Abfrage unabhängig von der Vollständigkeit der BIFF-Rohwiedergabe auf; QueryRecordsValid legt die Gültigkeit importierter Datensätze offen, und SetQueryRecordValidity wendet die Format-Reader-Präzedenz an, ohne Datensätze zu aktualisieren
Explizite Codepage-Bytes
| Member | Vertrag |
|---|---|
XlsEncodeCodePage(Text, CodePage, MaxBytes = -1) | Liefert RawByteString mit exakten Bytes in einer expliziten, nonzero byteorientierten Seite, bewahrt eingebettete Nullen, verifiziert die Unicode-Roundtrip-Identität und löst EConvertError für nicht darstellbaren Text aus; ein nichtnegatives MaxBytes behält das längste vollständige Zeichenpräfix, das passt, während -1 die Länge unbegrenzt lässt; die Validierung deckt den Originaltext vor der Kürzung ab |
XlsDecodeCodePage(Bytes, CodePage) | Liefert WideString aus der expliziten Bytekodierung und bewahrt eingebettete Nullen; fehlerhafte Bytefolgen folgen dem Verhalten des installierten Dekoders; Seite 0 und UTF-16-Seite 1200 werden zurückgewiesen, weil diese API keine ANSI-Locale erschließt und keinen UTF-16-Bytestrom verarbeitet |
TXLSBlob.GetCompressedUnicodeString(Index, Count) | Liefert exakte BIFF8-komprimierte Unicode-Codeeinheiten von U+0000 bis U+00FF, bewahrt eingebettete Nullen, validiert den angeforderten Bytebereich und interpretiert diese Bytes nicht über eine Codepage |
TXLSBlob.AddRawString | Hängt exakte kodierte Bytes ohne AnsiString-Codepage-Konvertierung an und aktualisiert DataLength; eine leere Eingabe hängt keine Bytes an |
TXLSCalculator.CodePage, TXLSFormula.FCodePage | Wählen die explizite Legacy-Formel-Bytekodierung, standardmäßig CP1252; die besitzende Classic-Arbeitsmappe synchronisiert ihren Calculator bei der Initialisierung oder beim Aufruf von SetCodePage |
TXLSFontList.GetFont, TXLSNumFormatList.GetNumFormatBlob, TXLSStyles.GetStyleBlob | Das optionale CodePage-Argument steht standardmäßig auf 1252 und kodiert BIFF5-Text; BIFF8-Ausgabe bleibt Unicode |
TMsoDrawing.StoreNotes | Das optionale CodePage-Argument steht standardmäßig auf 1252 und kodiert Kommentartext vor Unicode; das vorhandene Größenlimit des BIFF5-Datensatzes für gewöhnliche Kommentare bleibt; dies fügt keine Autor-, Rich-Text- oder Geometriefelder hinzu, die in diesem Datensatzformat fehlen |
TXLSCustomName.SetSourceData | Die optionalen FileFormat- und CodePage-Argumente identifizieren importierte rohe NAME-Bytes und stehen standardmäßig auf xlExcel97 und 1252; rohe Datensätze werden nur wiederverwendet, wenn deren Format und Legacy-Kodierung der angeforderten Ausgabe entsprechen |
TXLSFormulatArrayItem.GetDataSize, TXLSFormulatArray.GetDataSize, TXLSFormulatArray.GetData, TXLSFormulatArrays.GetDataSize, TXLSFormulatArrays.GetData, TXLSCompiledFormula.GetExternalData | Das optionale ACodePage-Argument steht standardmäßig auf 1252; Größe und Ausgabe von Legacy-String-Arrays verwenden dieselbe Anzahl kodierter Bytes, während BIFF8-Strings Unicode bleiben |
Übergeben Sie den zurückgegebenen RawByteString direkt an AddRawString oder eine byteorientierte Stream-Operation; die Konvertierung in einen Default-AnsiString kann seine Bytes auf nativen FPC-Systemen umkodieren
Klassische definierte Namen und Array-Formelblöcke
TXLSCustomName deferred compilation | ClearDefinition gibt den kompilierten RefersTo-AST frei und behält den gespeicherten Definitionsstring sowie etwaige rohe importierte NAME-Bytes, Compile baut den AST aus der gespeicherten Definition neu auf und meldet den Erfolg, und GetCompiledFormula kompiliert automatisch neu, sodass ein gelöschter Name bei seinem nächsten Lesevorgang neu aufgelöst wird; PeekCompiledFormula liefert den aktuellen AST, ohne diese Neukompilierung auszulösen, und StoredDefinition legt die nicht geparste Definitionsquelle offen |
TXLSCustomName identity and flags | StoreIndex legt die Speicherposition des Namens innerhalb seiner Sammlung offen, NameID seine arbeitsmappeneindeutige numerische Identität, wie die Berechnungs-Engine sie verwendet, und IsHidden sowie IsMacro lesen und schreiben die Hidden- und Macro-Flags des BIFF-NAME-Datensatzes |
TXLSFormulatArray.RowsCount, ColsCount | Melden die Zeilen- und Spaltenausdehnung des geparsten Array-Formelblocks; beide starten bei eins und begrenzen die Domäne der Pro-Zelle-Elemente, die die Emissionsmethoden tragen |
Klassische Schrift-, Format- und Stilpools
TXLSFontList stored font attributes | Indizierte Eigenschaften spiegeln den gespeicherten Schriftschlüssel an einem nullbasierten Listenindex: Name, Size, ColorIndex, Bold, Italic, Strikethrough und Underline gesellen sich zu OutLineFont, Shadow, SubScript, SuperScript, Family und CharSet für die schreibgeschützte Inspektion |
TXLSNumFormatList.AddValue, FmtExists | AddValue registriert einen Format-String und liefert seinen Index, mappt eingebaute Formatschreibweisen auf ihre kanonischen IDs und markiert Datums- und Zeitformate; FmtExists meldet, ob ein benutzerdefinierter Format-String bereits registriert ist |
TXLSNumFormatList.IsDateFormat, IsDateFormatValue | IsDateFormat meldet, ob das an einem Index gespeicherte Format als Datums- oder Zeitformat markiert ist, während IsDateFormatValue einen Format-String direkt auf Datums- und Zeit-Tokens prüft |
TXLSStyles.AddStyle, AddBuiltinStyle | AddStyle registriert einen benannten benutzerdefinierten Zellstil, gebunden an einen XF-Datensatzindex, und AddBuiltinStyle registriert einen eingebauten Zellstil über seine eingebaute ID zusammen mit der Gliederungsebene, die Zeilen- und Spaltenebenenstile verwenden |
TXLSStyles.BuiltinStyleName | Klassenfunktion, die den kanonischen Excel-Anzeigenamen des eingebauten Zellstils für eingebaute IDs 0 bis 53 liefert; außerhalb des Bereichs liegende IDs liefern einen leeren Namen, damit Writer auf die rohe Builtin-Byteform zurückfallen |
Paket- und Binärspeicher-Hilfsfunktionen
TXLSXOpaquePackage | LoadWorkbookXmlMetadata erfasst den XML-Zustand auf Arbeitsmappenebene, MarkAllPartsClean setzt Dirty-Flags zurück, und WorkbookExtLstXml zusammen mit WorkbookRootAttributesXml legt die erhaltenen Arbeitsmappen-XML-Fragmente offen; IsDiscardedPart meldet, ob ein Teilname durch eine Verwerfungsoperation wie die Web-Add-In-Bereinigung entfernt wurde |
TXLSFileStorage | Load, LoadFolder, Writeund WriteFolder übertragen Compound-File-Inhalte; Child und Count zählen untergeordnete Einträge auf, jeder ein TXLSFileItem — ein benannter Speicherknoten, dessen TXLSFileStream -Unterklasse die gespeicherten Bytes als TXLSBlob trägt, wobei DataSize die Payload-Länge meldet |
TXLSBlob | Add hängt einen weiteren Blob an, während AddByte, AddWord, AddLong, AddDouble, AddStringund AddWideString typisierte Werte anhängen; CopyData, CopyMem, FillByte, Write, Clear, Resetund Dump verwalten den Inhalt; Buff und DataLength legen den Speicher offen |
TXLSBlobList | Append, AppendList, CopyDataund Write kombinieren oder geben Einträge aus; Entries und TotalSize legen den Listenstatus offen |
TXLSWideStringBuilder | AddString hängt Text an, und Length meldet die angesammelte Zeichenzahl |
Zeichnungs- und Arbeitsmappen-Viewer-Ergänzungen
TXLSFillFormat | PictureFill konfiguriert eine bildbasierte Formfüllung, während FillType die Füllart (einfarbig, Verlauf, Bild oder voreingestellte Textur) wählt, die der Writer ausgibt |
TXLSShapes | AddScrollBar und AddSpinner erstellen Formularsteuerelemente — die zurückgegebenen Objekte TXLSScrollBar und TXLSSpinner legen die Steuerelementgeometrie und die verknüpfte Zelle offen, und der Spinner ergänzt Min, Maxund Inc als Schrittweiten-Grenzen —, während RegisterScrollBar und RegisterSpinner aus einer Arbeitsmappe geladene Steuerelemente registrieren |
TXLSWorkbookViewer | CanUndo und CanRedo melden die Verfügbarkeit der Transaktionshistorie; ClearSelectedRange, CopySelectedRange, PasteSelectedRange und PasteText wirken auf den ausgewählten Bereich, während ReferencePickMode die interaktive Auswahl von Zell- oder Bereichsreferenzen aktiviert |
TXLSWorkbookEditHistory | Die Headless-Inhaltstransaktions-Engine in lxWorkbookViewer bindet eine geliehene Classic- oder XLSX-Arbeitsmappe und bietet Bereichsschutz-Preflight, Unicode-Textkopie und -einfügung, Bereichslöschung sowie eine Undo/Redo-Transaktion pro Operation; siehe Headless-Editing-Transaktionen |
TXLSCellContentSnapshot | Beide Arbeitsblattklassen legen ReadCellContent(Row, Col) und RestoreCellContent(Snapshot) für entkoppelte native Inhalts-Erfassung und -Wiederherstellung an 1-basierten Koordinaten im Ursprungsarbeitsblatt offen; die Erfassung wertet keine Formeln aus, erzeugt keine abwesenden Zellen und materialisiert keinen gepackten Speicher, und die unveränderliche NativeData-Payload bewahrt Rich-Text, Formel-Caches und den Zellstil; die direkte Wiederherstellung ist eine Low-Level-Operation, deren Aufrufer Schutz und strukturelle Grenzen validieren muss |
Paginierung, Bildausgabe und Drucken
XLSValidateCachedChartSceneModel, XLSRecordCachedChartScene | Führen ein Preflight für gecachte Diagrammmetadaten durch, ohne Zellen aufzulösen, und zeichnen begrenzte Vektor- und Textprimitive für ein entkoppeltes Diagramm in lxPortableChart auf, mit TXLSPortableSceneObjects sowie Item-, Byte- und Textabrechnung; die lxPagination-Einstiegspunkte behalten dieselbe gemeinsame Implementierung für vorhandene Windows-Aufrufer; die aktuelle Teilmenge umfasst gewöhnliche Säulen-, Balken-, Linien-, Punkt-, Kreis-, Ring- und Einscharenflächen-Diagramme mit einer primären Plotgruppe, und die Aufzeichnung verlangt validierte native Metadaten, endliche streng geordnete Cache-Punkte und ein nicht angehängtes Diagrammmodell; siehe Cached-Chart-Aufzeichnung |
TXLSGraphicsBackend | DrawTiledImage malt einen Blatthintergrund wiederholt über den beschnittenen Seitenbereich |
TXLSPaginationModel | CompactRangeMode, IncludeDrawings, IncludeGridlines, IncludeCellBordersund PaintPageBackground steuern den Seiteninhalt; RenderDPI, RenderColorModeund RenderSession geben Auflösung, Farbverarbeitung und die aktive Render-Sitzung frei |
TXLSCellImageExporter | Measure berechnet Pixeldimensionen für Classic- oder XLSX-Bereiche; ImageFormat, JpegQuality, MaxPixels, MaxBytes, IncludeObjects, IncludeGridlines, IncludeCellBorders, BackgroundColor, TransparentBackground, BeforePaint, AfterPaintund PaginationModel konfigurieren und beobachten das Rendering |
TXLSPageImageExporter | BeforePaint, AfterPaint, MaxPixels, MaxBytes, BackgroundColorund TransparentBackground übernehmen dieselben Paint-Hooks und sicheren Ausgabelimits für den seitenweisen Bildexport |
TXLSPrintDocument | PrintWorksheet, PrintWorkbookund PrintAllVisibleSheets senden Classic- oder XLSX-Inhalte an den VCL-Drucker; FirstPage, PrintRangeOnly, Collate, Copies, OnBeforeNewPageund OnAfterGeneratePage steuern den Druckauftrag |
Classic-Diagrammmodelle und Diagrammobjekte im Arbeitsblatt
TXLSXChartSeries | LineVisible, LineColorRGB und LineWidthPoints beschreiben einen unabhängigen Serienstrich; LineStyleSet, LineColorSet und LineWidthSet bewahren explizite Einstellungen, und EffectiveLineVisible löst die Legacy-Konvention Nur-Füllung auf; MarkerFillSet und MarkerBorderSet unterscheiden explizites Schwarz von automatischen Markerfarben, während die portable Aufzeichnung von Linien- und Punktdiagrammen Kreisdurchmesser von 2 bis 72 Punkten unterstützt; Farb- und Breiten-Setter validieren vor der Mutation und folgen den Leseleases der Arbeitsmappe |
TXLSChartSeries | AddTrendline und AddErrorBars erstellen typisierte Reihenanmerkungen, während TrendlineCount und ErrorBarCount die Größe ihrer Sammlungen melden; das vorhandene MarkerSize-Feld behält rohe BIFF-Twips, während der schreibgeschützte MarkerSizePoints-Getter diesen Wert geteilt durch 20 liefert, einschließlich fraktionaler Punktgrößen |
TXLSChartAxis | HasAxcExtFlag prüft ein rohes AXCEXT-Flag, ohne dass Aufrufer die Bitmaske dekodieren müssen |
TXLSChartModel | AxisGroupCount meldet die Anzahl primärer und sekundärer Achsengruppen, die aus dem Diagramm dekodiert wurden |
TXLSCustomChart | AddAreaData fügt ein vorbereitetes Bereichselement für die erneute Formelbindung beim Speichern an, und ApplyDateAxisModel überträgt ein typisiertes Datumsachsenmodell auf die rohen Diagrammdatensätze; GetStoredRecordInfo liest eine nullbasierte Datensatz-ID und Byteanzahl ohne Allokation, während ReadStoredRecord(Index, MaxBytes) das Byte-Limit prüft, bevor entkoppelte Bytes in TXLSChartStoredRecord zurückgegeben werden — ohne Formeln auszuwerten oder Caches zu ändern |
TXLSWorksheet | AddChartObject verankert einen Diagrammrahmen im Arbeitsblatt und verbindet ihn mit dem gemeinsamen Diagrammbuilder |
TXLSXChartLayoutResolver | TryResolve löst ein Layoutrechteck mit optionaler Größenprüfung auf, und ResolveChart berechnet Rechtecke für Diagramm, Titel, Legende, Plotbereich und Achsen |
Typisiertes Diagramm-Dekodiermodell
Der dekodierte Diagrammzustand liegt als schlichte Datensätze und Enums vor, sodass Inspizierungscode nie rohe BIFF-Datensätze durchlaufen muss: TXLSChartInfo trägt die dekodierte Diagrammzusammenfassung mit TXLSChartTypeFamily (cfBar, cfLine, cfPie, cfArea, cfScatter, cfRadar, cfDoughnut, cfSurface, cfBubble), jede Reihe meldet TXLSChartSeriesType, und TXLSChart3DState zusammen mit TXLSChart3DInfo beschreibt dreidimensionale Ansichten. TXLSChartAxisType (catCategory, catValue, catSeries, catDate) und TXLSChartLegendPosition klassifizieren Achsen und Legenden, während das Datumsachsenmodell TXLSChartDateUnit (xcduDays, xcduMonths, xcduYears) und TXLSChartDateValuesverwendet. TXLSCustomChart legt das dekodierte Modell über TXLSChartInfooffen; Trendlinien- und Fehlerindikator-Anmerkungen sind typisierte Objekte (TXLSChartTrendline, TXLSChartErrorBars), die von jeder Reihe aus erreichbar sind
Diagramm-Authoring-Datensätze
Das Authoring von Diagrammblättern und über den Builder akzeptiert schlichte Datensätze statt Objektgraphen: TXLSChartTrendlineInfo, TXLSChartErrorBarsInfo, TXLSChartDataLabelsInfound TXLSChartSeriesStyleInfo füllen die Reiheneinträge, die an TXLSWorksheets.AddChartSheet und den gemeinsamen Diagrammbuilder übergehen, und TXLSPivotChartInfo beschreibt das Pivot-Chart-Framing, das beim Anhängen eines Diagramms an eine PivotTable verwendet wird
Classic-Inspektion von Diagrammfüllungen
TXLSCustomChart.GetChartModel dekodiert unterstützte native OfficeArt-Eigenschaftstabellen und tertiäre Eigenschaftstabellen in GelFrame-Datensätzen, einschließlich Eigenschaften nach Einträgen mit komplexer Payload; die vorhandene Builder-Repräsentation bleibt unterstützt, und fehlerhafte Tabellengrenzen lassen die vorherige typisierte Füllung unverändert und melden den nicht unterstützten Datensatz
Die Diagramminspektion validiert die vollständige gespeicherte Text- und Annotations-Payload, bevor typisierter Zustand ergänzt wird: abgeschnittene Trendlinien-Namen oder Datenbeschriftungs-Trenner melden ihre Datensatz-ID über _UnsupportedSemanticRecordID, während nil oder unterdimensionierte SeriesText-Header diesen Datensatz für BIFF5 und BIFF8 als nicht unterstützt melden; eine deklarierte SeriesText-Ausdehnung, die ihre Payload überschreitet, löst EReadError aus, gibt das Teilmodell frei und lässt die gespeicherten Diagrammdatensätze unverändert
Der Marker-Getter und die Füllungsinspektion bewahren die rohe Diagrammspeicherung; der Pfad der deklarierten Darstellungserfassung validiert unterstützte Kern-Diagramme separat, während nicht verifizierte Prüfsummen reicher Titel oder Shape-Erweiterungen nicht unterstützt bleiben
Begrenzte Reader für gespeicherte Diagramme, Strings und Schriftarten
TXLSChartStoredBytes ist ein entkoppeltes Byte-Array, und TXLSChartStoredRecord enthält RecordId und Data; diese Reader inspizieren zurückgehaltenen Quellspeicher, ohne ein dekodiertes Diagrammmodell zu erzeugen oder Formeln auszuwerten
| TXLSCustomChart.GetStoredRecordInfo | Liefert eine Datensatz-ID und gezählte Bytelänge für einen nullbasierten Datensatzindex, ohne seine Payload zu kopieren |
| TXLSCustomChart.ReadStoredRecord | Kopiert eine Payload, nachdem Index und nichtnegatives MaxBytes validiert wurden; das Standard-Byte-Limit ist High(Int64) |
| TXLSCustomChart.ReadStoredFormulaLeafInfo | Untersucht ein kohärentes gespeichertes BRAI-Blatt mit dem exakten Quell-Calculator und nichtnegativen Byte- und Text-Quotas; fremde Calculator oder Übersetzungs-Owner liefern ein nicht unterstütztes Blatt, und AllowUnboundBiff ist standardmäßig False |
| TXLSCustomChart.ReadStoredFormulaLiteral | Liefert ein entkoppeltes Literal erst nach denselben Herkunfts- und Quota-Prüfungen; ein nicht unterstütztes Blatt löst EInvalidOperation aus |
| TXLSCustomChart.SourceBiffVersion, SourceCodePage | Schreibgeschützte Herkunft der zurückgehaltenen Diagrammdatensätze |
| TXLSStringTable.GetStoredStringLength, ReadStoredString | Zählt vorhandenen UTF-16-Speicher über die 1-basierte String-Identität der Tabelle und kopiert erst, wenn die nichtnegative Zeichen-Quota ihn abdeckt; ungültige Identitäten und unvollständiger UTF-16-Speicher werden zurückgewiesen |
| TXLSFontList.GetStoredNameLength, ReadStoredName | Prüft den gespeicherten Schriftschlüssel am nullbasierten Listenindex, bevor sein Name unter einer nichtnegativen Zeichen-Quota gezählt oder kopiert wird |
| TMsoFbtOptItem.HasStoredUnicodeString | Prüft begrenzte gespeicherte Metadaten mit komplexen Unicode-Strings, ohne einen String zu materialisieren |
| TMsoShapeContainer.HasOrdinaryChartObjectData | Prüft den gespeicherten Diagrammobjekttyp, eine nonzero Objektidentität, unterstützte Flags und das Fehlen unbekannter Objektschwanz-Daten |
Wartung der Shared-String-Tabelle und SST-Ausgabe
TXLSStringTable in lxStringTable trägt die Shared Strings der klassischen Arbeitsmappe; die folgenden Member decken die Reader-seitige Registrierung, die Slot-Wartung und die rohe SST-Ausgabe für Roundtrip-Speicherungen ab
KeyExists, AddWithExtras | KeyExists meldet, ob ein String bereits einen Slot belegt; AddWithExtras ist das Reader-seitige Gegenstück zu Add und hängt die rohe rgRun-Rich-Text- und rgExtRst-Phonetic-Payload an den Eintrag an, ohne dessen Referenzzahl zu erhöhen, weil jede referenzierende Zelle die Zahl später über den normalen Add-Pfad wiederherstellt |
Replace, ReplaceIndex | Replace gibt eine Referenz am alten Slot auf — und gibt ihn frei, wenn seine Zählung null erreicht — und fügt den Text neu hinzu, wobei der resultierende Slot zurückgegeben wird; ReplaceIndex verschiebt eine Referenz vom alten zum neuen Slot, ohne Text zu kopieren |
AddSSTData, InitExtIndex | AddSSTData emittiert die rohe SST-Payload in die Blob-Liste des Writers; die Überladung mit einer Font-Run-Remap-Tabelle schreibt jeden FormatRun-Font-Index beim Ausgang um ([MS-XLS] §2.5.129), sodass Rich-Runs der Font-Neuordnung beim Speichern folgen, während eine leere Tabelle die Legacy-Wörtlich-Ausgabe behält, und InitExtIndex nummeriert die ExtSST-Buckets vor der Emission über lebende Slots |
SlotCount, ExtIndex, ParsedExtSSTDsst, ParsedExtSSTItemCount, BiffSizeLimit | SlotCount ist die 1-basierte Obergrenze für die Slot-Iteration, wobei gelöschte Slots leer lesen; ExtIndex löst einen Slot auf seine ExtSST-Bucket-Nummer auf oder -1 für einen nicht lebenden Slot; ParsedExtSSTDsst und ParsedExtSSTItemCount behalten importierte EXT/SST-Headerwerte, und BiffSizeLimit begrenzt jeden emittierten Datensatz-Chunk — der klassische Writer setzt ihn auf 2080 Bytes für BIFF5 und 8224 für BIFF8 |
PDF-Anhänge, Signaturen und HTML-Export
IXLSPDFAttachmentSource | WriteTo streamt Anhangbytes in den PDF-Export, ohne dass der Exporter die Quelldaten besitzen muss |
TXLSPDFExport | AttachmentDuplicatePolicy wählt die Behandlung doppelter Namen, AttachmentSpoolThreshold steuert das Spooling von Anhängen und DocumentLanguage schreibt die Dokumentsprach-Metadaten |
TXLSPDFSignature | TextAlign, TextSize, TextColor, TextBoldund TextItalic konfigurieren das sichtbare Erscheinungsbild der Signatur |
TXLSHTMLExport | ViewMode (Typ TXLSHtmlViewMode: aktuelle Ansicht oder vollständige Tabellenkalkulationstabelle) wählt die HTML-Darstellung, während HotTrackTargets (Menge aus TXLSHtmlHotTrackTarget) und HotTrackColor die interaktive Hervorhebung von Zellen und Objekten konfigurieren |
TXLSXHtmlExportOptions | ViewMode, HotTrackTargetsund HotTrackColor stellen die entsprechenden XLSX-HTML-Exportoptionen bereit |
Berechnungsaudit und Arbeitsmappensteuerung
TXLSCalculationAuditReport | Truncated meldet die Kürzung am Problemlimit, StackTruncated die Kürzung der Call-Stack-Frames und Issues indiziert die aufgezeichneten Berechnungsprobleme |
TXLSUserFunctionRegistry | Generation ändert sich bei jeder Änderung der registrierten Benutzerfunktionsmenge und erlaubt so die Invalidierung zwischengespeicherter Formelbindungen |
EXLSReportRecoverableData | Category identifiziert die dem Aufrufer präsentierte Kategorie wiederherstellbarer Berichtsdaten |
IXLSWorkBook | ManualCalculationThreadCount begrenzt die Anzahl Worker für die manuelle Berechnung |
TXLSXDataValidation | HasUnknownImeMode meldet einen IME-Moduswert, den HotXLS bewahrt, aber nicht erkennt |
TXLSXTable | ColumnCalculatedFormulaArrayRaw und ColumnTotalsFormulaArrayRaw geben den ursprünglichen Arrayformeltext für Tabellenspalten frei |
Kompatibilität mit altem PivotCache-Framing
TXLSPivotCache | RawBucketIndex kennzeichnet die Position des Quellsubstreams, RawFramingIsLegacy ein altes HotXLS-Framing, RawModelIsComplete sagt, ob das typisierte Modell jeden Datensatz abbildet, und CanUpgradeFraming , ob die aktivierbare typisierte Neuerzeugung sicher ist |
TXLSPivotCache | StreamId legt die Classic-Cache-Stream-Identität offen, SourceDataType die Classic-Quelldatenart, und RawHasStorageStream meldet, ob ein geladener Cache aus einem unabhängigen PivotCache-Speicherstream kam |
TXLSWorkbook | UpgradeLegacyPivotCacheFraming aktiviert das Umschreiben nur für alte HotXLS-Cache-Framings mit vollständigem typisiertem Modell; die normale Raw-Cache-Wiedergabe bleibt Standard |
StreamId wird als SXStreamID -Datensatz geschrieben ([MS-XLS] §2.4.303) und als SXDB -Feld des idstm -Headers wiederholt, wo es gleich sein muss; SourceDataType wird als SXVS -Datensatz geschrieben ([MS-XLS] §2.4.317: $0001 Arbeitsblatt, $0002 extern, $0004 Konsolidierung, $0010 Szenario) und als SXDB -Feld des vsType -Headers wiederholt, wo es gleich sein muss. Caches aus einem Arbeitsblattbereich starten mit dem Arbeitsblatt-Typ, während aus einer Datei zurückgelesene Caches den Wert behalten, den ihr Substream mitbrachte — der BIFF-Writer hinterlässt also nie ein SXDB -Feld, das einen nicht ausgegebenen Datensatz benennt; RawHasStorageStream markiert einen Cache, der aus seinem eigenen Speicherstream geladen wurde, dessen arbeitsmappenweiter Deskriptor den Cachedatensätzen vorangeht
Clipboard-Integration und Einfügeoptionen
TXLSPasteOption = (xlpoValuesOnly, xlpoInsertRows, xlpoInsertCols);
TXLSPasteOptions = set of TXLSPasteOption;
function XLSGetClipboardText: WideString;
function XLSSetClipboardText(const Text: WideString): Boolean;
function XLSSetClipboardTextAndHtml(const Text: WideString;
const Html: AnsiString): Boolean;
function XLSBuildHtmlClipboard(const Html: AnsiString): AnsiString;
function XLSEncodeClipboardField(const Text: WideString): WideString;
function XLSClipboardHasText: Boolean;
function XLSParseClipboardGrid(const ClipboardText: WideString;
Loader: TXLSCSVLoader): Boolean;
function XLSClipboardHasXmlSpreadsheet: Boolean;
function XLSGetClipboardXmlSpreadsheet: WideString;
function XLSParseXmlSpreadsheet(const XmlText: WideString;
Loader: TXLSCSVLoader): Boolean;
function XLSClipboardHasBiff8: Boolean;
function XLSGetClipboardBiff8: AnsiString;
function XLSReadClipboardPasteData(out Biff8: AnsiString;
out Text: WideString): Boolean;
function XLSSetClipboardBiff8(const Biff8: AnsiString;
const Text: WideString; const Html: AnsiString = ''): Boolean;
PasteFromClipboard -Überladungen beider Fassaden: xlpoValuesOnly behält die zwischengespeicherten Werte von Formelzellen und überspringt Formate und verbundene Zellen, während xlpoInsertRows und xlpoInsertCols vorhandene Inhalte verschieben, bevor der Block landetCF_UNICODETEXT (mit Fallback auf CF_TEXT über die aktuelle ANSI-Codepage), XLSSetClipboardTextAndHtml schreibt Text und eine gestylte HTML Format -Payload in einer Transaktion, XLSBuildHtmlClipboard berechnet die CF_HTML-Byte-Offsets für ein Dokument oder Fragment, und XLSEncodeClipboardField setzt ein tabulatorgetrenntes Feld in Anführungszeichen. XLSParseClipboardGrid parst Clipboard-Text als tabulatorgetrennte Zeilen mit derselben Typ-Erkennung, die TXLSCSVLoader für CSV verwendet, XLSParseXmlSpreadsheet führt dieselbe Loader-Füllung über eine SpreadsheetML-2003-Payload durch, die mit XLSGetClipboardXmlSpreadsheet geholt wurde, und die Biff8 -Helfer erkennen und lesen den nativen Stream, den Excel selbst in die Zwischenablage stellt, sodass eingefügte Daten Werte, Formeln und Formatierung ohne Textverlust behaltenXLSReadClipboardPasteData erfasst den Biff8 -Stream und den Unicode-Text in einer einzigen Zwischenablage-Sperre, sodass ein Einfügen die Zwischenablage zwischen den beiden Lesevorgängen nie erneut öffnen muss und keines der beiden Formate an einen gleichzeitigen Inhaber verliert. XLSSetClipboardBiff8 ist die passende Schreibseite: Sie legt den BIFF8-Compound-File-Stream, tabulatorgetrennten Unicode-Text und eine optionale CF_HTML-Payload in einer Transaktion ab — übergeben Sie ein leeres Text oder Html, um eines der beiden Begleitformate zu überspringen; der Biff8 -Teil ist PflichtAuflösung des Zellanzeigetexts
TXLSCellDisplayMode = (xcdmFormattedValue, xcdmFormulaText,
xcdmSuppressedZero);
TXLSCellDisplayOptions = record
ShowFormulas: Boolean;
ShowZeros: Boolean;
SheetProtected: Boolean;
FormulaWidthFactor: Double;
DateSerialZero: Double;
end;
TXLSCellDisplayInput = record
HasFormula: Boolean;
FormulaHidden: Boolean;
IsNumericZero: Boolean;
FormulaText: WideString;
FormattedText: WideString;
end;
TXLSCellDisplayResult = record
Mode: TXLSCellDisplayMode;
Text: WideString;
TreatAsText: Boolean;
EffectiveWidthFactor: Double;
end;
function XLSDefaultCellDisplayOptions: TXLSCellDisplayOptions;
function XLSNormalizeFormulaDisplayText(const FormulaText: WideString): WideString;
function XLSResolveCellDisplay(const Options: TXLSCellDisplayOptions;
const Input: TXLSCellDisplayInput): TXLSCellDisplayResult;
XLSResolveCellDisplay direkt mit eigenen Eingabedatensätzen aufrufen; XLSDefaultCellDisplayOptions liefert die kanonischen Standardwerte, und XLSNormalizeFormulaDisplayText normalisiert eine Formelzeichenfolge für die AnzeigeKlassische Datenvalidierungsobjekte
TXLSDataValidationType = (xlsDvAny, xlsDvWhole, xlsDvDecimal, xlsDvList,
xlsDvDate, xlsDvTime, xlsDvTextLength, xlsDvCustom);
TXLSDvErrorStyle = (xlsDvErrStop, xlsDvErrWarning, xlsDvErrInformation);
TDVRange = class; { one validation rule over one or more ranges }
TDVRangeList = class; { the per-sheet rule collection }
TDataValidator = class; { engine that checks edits against the rules }
TXLSWorksheet.Add*Validation -Hilfsfunktionen erzeugen TDVRange -Regeln in der TDVRangeListdes Blatts; jede Regel trägt ihren TXLSDataValidationType, ihre Grenzen, Eingabe- und Fehlermeldungen sowie ihren TXLSDvErrorStyle. TDataValidator prüft eine Eingabe gegen die Regeln und meldet, ob der Wert akzeptabel ist — dasselbe Kriterium, hinter dem auch Excels eigene Validierungshinweise steckenIndizierte Farben scannen und auflösen
TXLSIndexedColorKind = (xickPalette, xickAutomatic, xickSystem, xickInvalid);
TXLSSystemColorRole = (xscrNone, xscrWindowText, xscrWindowBackground,
xscrChartText, xscrChartBackground, xscrChartNeutral, xscrToolTipText);
TXLSIndexedColorResolution = record
Kind: TXLSIndexedColorKind;
RawIndex: Int64;
PaletteSlot: Integer;
SystemColorRole: TXLSSystemColorRole;
ARGB: LongWord;
HasResolvedColor: Boolean;
end;
TXLSNearestIndexedColorMatch = record
InputARGB: LongWord;
ColorIndex: Integer;
PaletteSlot: Integer;
ARGB: LongWord;
DistanceSquared: Double;
ExactMatch: Boolean;
end;
TXLSIndexedColorUsageKind = (xicukFont, xicukFillForeground,
xicukFillBackground, xicukGradient, xicukBorder, xicukConditionalFormat,
xicukChart, xicukShape, xicukComment, xicukWorksheet, xicukOther);
ResolveIndexedColor, NearestIndexedColorund ScanIndexedColorUsage : Eine Auflösung meldet, aus welcher der vier TXLSIndexedColorKind -Quellen ein indizierter Token stammt, samt Paletten-Slot, Systemfarben-Rolle und normalisiertem ARGB; ein nächster Treffer ergänzt die quadrierte RGB-Distanz und das Exact-Match-Flag, und der Nutzungs-Scan markiert jede Verbraucherkategorie, die einen Paletten-Slot sperrt. Die Bibliothek hält einen internen TXLSIndexedColorMatcher -Cache, keyed nach der Paletten-Generation — FindNearest beantwortet Nearest-Color-Abfragen daraus, und UpdateSlot patcht einen einzelnen Paletten-Slot —, sodass wiederholte Auflösungen ohne Allokationen bleibenA1-Referenzhelfer
function XLSA1CellRef(ARow, ACol: Integer): WideString;
function XLSTryParseA1CellRef(const ARef: WideString;
out ARow, ACol: Integer): Boolean;
function XLSTryParseA1RangeRef(const ARef: WideString;
out ARow1, ACol1, ARow2, ACol2: Integer): Boolean;
False liefern, statt eine Ausnahme auszulösen