XLSB-Formeln und Arbeitsblattobjekte
Die XLSX-Arbeitsmappen-Fassade liest und schreibt ein validiertes XLSB-Subset mit typisierten Werten, gewöhnlichen gecachten Formeln, Namen, gängigen Stilen und abgebildeten Arbeitsblattobjekten; nicht abgebildeter Zustand weist zurück, bevor die Zielausgabe beginnt
Öffnen und speichern
if Workbook.Open('values.xlsb') <> 1 then
raise Exception.Create('XLSB input is unsupported or invalid');
if Workbook.SaveAsChecked('values-copy.xlsb', xlsxExcelBinaryWorkbook) <> 1 then
raise Exception.Create('XLSB output is unsupported or failed');
Open erkennt den Inhalt und den registrierten Typ des Arbeitsmappenteils; erfolgreicher Binärinput setzt SourceFormat=xlsxExcelBinaryWorkbook, während die ursprünglichen vier TXLSXFileFormat-Ordinals unverändert bleiben und das neue Member das Ordinal 4 hat
Die Datei- und Stream-Überladungen von SaveAs und SaveAsChecked akzeptieren das Binärformat explizit; das Standardspeichern wählt weiterhin das gewöhnliche Open-XML-Arbeitsmappenformat, unabhängig von der Dateinamenerweiterung
GetConversionReport(xlsConversionExcelBinaryWorkbook) inspiziert den aktuellen Zustand, ohne gepackten Zellspeicher zu expandieren; nicht unterstützte Einträge bleiben zwingende Fehlschläge, auch für ungesichertes Speichern oder AllowLossy=True
Unterstützter Zustand
- Gewöhnliche Arbeitsblätter, Unicode-Namen und -Strings, Zahlen, Boolean-Werte, leere und stilisierte leere Zellen sowie gewöhnliche darstellbare Fehlerwerte
- Shared- und Inline-String-Eingaben, kompakte native numerische und Kurz-Zellen-Records, Arbeitsblattsichtbarkeit, das Datumssystem-Flag, gewöhnliche Arbeitsmappen- und Arbeitsblatt-Views sowie Auswahlen
- Gängige Schriften, Musterfüllungen, Kantenrahmen, Zahlenformate, Zellformat-Referenzen, Ausrichtungs- und Schutzflags sowie abgebildete RGB-, Themen- und indizierte Farben
- Zeilenhöhen, Spaltenbreiten, unterstützte Dimensions-Flags und Seitenmargen
- Gewöhnliche Zellformeln mit unterstützten Legacy-Funktionstokens, skalaren Operatoren, A1-Referenzen, Einzelblatt-Referenzen innerhalb derselben Arbeitsmappe sowie Arbeitsmappen- oder Arbeitsblattnamen, mit numerischen, String-, Boolean- und gewöhnlichen Fehlercaches
- Globale und arbeitsblattweite definierte Namen, Flags und Kommentare für versteckte Namen, verbundene Zellen, gewöhnliche externe und interne Hyperlinks, geteilte oder fixierte Fenster und Fensterauswahlen
- AutoFilter-Bereiche, skalare eigene Vergleiche mit ein oder zwei AND/OR-Kriterien sowie beliebige ausgewählte Wertelisten mit optionaler Leer-Auswahl
- Gewöhnliche Arbeitsblatttabellen mit Identität, Bereich, Kopf- und Ergebniszeilen-Sichtbarkeit, Spaltenidentität und Beschriftungen, literalen Ergebniszeilen-Beschriftungen, abgebildeten AutoFilter-Kriterien und eingebauten Tabellenstil-Flags
- Konfigurierte ZIP-Kompression und deterministische ZIP-Zeitstempel über die bestehenden Arbeitsmappen-Optionen
Der Konvertierungsbericht deckt Live-Modell-Features ab, und die vollständige Paketvalidierung bleibt die letzte Schranke für ungültige Referenzen, missgebildete Records, unbekannte Attribute oder nicht unterstützten erhaltenen Inhalt
Der Binärimport behält die explizite Standardschrift der Datei und unterstützte eingebaute Zahlenformate, einschließlich stilisierter leerer Zellen; gebietsabhängige Zahlenformate erfordern einen expliziten Formatcode, damit der Reader keine regionale Formatierung rät
Explizite Grenzen
Shared-Formula-Records, Array- und dynamischer Array-Besitz, Array-Konstanten und Array-liefernde Funktionen, Future-Funktionen, benutzerdefinierte Funktionen, externe Arbeitsmappen- und Mehrblatt-Referenzen, VBA, externe Datenverbindungen, PivotTables und Slicer, Diagramme und Zeichnungen, Kommentare und Rich Text, Validierung, bedingte Formatierung sowie erweiterte Seiten- oder Erweiterungsmetadaten bleiben außerhalb dieses Backends
Tabellen-Berechnungsspalten, Gesamtaggregationsformeln, Sortierzustand, Differential- oder eigene Tabellenformatierung, abfragegebundene Tabellen und XML-Mappings weisen zurück; Farb-, Symbol-, dynamische und Datumsgruppenfilter, typisierte native Boolean-Eigenkriterien, numerisch aussehende native String-Eigenkriterien und Filterknopf-Sichtbarkeits-Overrides weisen ebenfalls zurück
Importierte, nicht eigene Arbeitsblatt-Filterkriterien werden als RawXml behalten; eigene Vergleiche füllen die bestehenden typisierten Kriterien-Properties, während ausgewählte Werte und Leer-Auswahl ein XML-basiertes Kriterium bleiben, statt einer neuen typisierten Wertelisten-API
Die Formel-Token-Konvertierung bewahrt Semantik und Referenzflags; sie kann Formeltext mit Klammern und gequoteten Blattnamen normalisieren, also wird bytegenaue Textidentität nicht versprochen
Die Formelausgabe erfordert einen expliziten numerischen, String-, Boolean- oder gewöhnlichen Fehlercache; ein fehlender Cache weist zurück, wenn die Speicherrichtlinie nicht neu berechnet, einschließlich xrmManual und einem sauberen Abhängigkeitsgraph mit xrmIfDirty; Anwendungen können vor dem Speichern Recalculate aufrufen oder xrmAlways wählen, und leerer String, False und numerische null sind gültige Caches
Berechnungseigenschaften müssen unterstützte Defaults nutzen; manuelle Berechnung, Iteration, reduzierte Präzision, alternativer Referenzmodus, erzwungene oder unvollständige Berechnung, explizite Thread-Konfiguration und andere bedeutende Nicht-Default-Einstellungen weisen zurück
Berechnungsketten und binäre Zellindizes sind regenerierte Metadaten und werden nicht über die Paketbrücke kopiert; unbekannte Feature-Records oder Beziehungen bleiben Fehlschläge, statt zu fabrizierten Open-XML-Teilen zu werden
Binärinput erfordert eager vollständiges Laden aller Blätter; MetadataOnly und eine nichtleere SelectedSheets-Liste weisen zurück, bevor das bestehende Modell ersetzt wird, weil Lazy Loading ein behaltenes konvertiertes Archiv erfordern würde
Fehler- und Besitzgarantien
Binärpakete werden validiert und konvertiert, bevor der gewöhnliche XML-Parser die Arbeitsmappe zurücksetzt; nicht unterstützter Input, missgebildeter Binärinhalt, zurückgewiesene Lesemodi und Konvertierungsabbruch bewahren bestehende Arbeitsblattobjekte, Dateinamen, Quellformat und Quellarchiv-Bindung
Nachdem die validierte Binärkonvertierung in den bestehenden XML-Parser eingetreten ist, folgen spätere XML-Parse- oder Anwendungs-Callback-Fehler dem gewöhnlichen XML-Öffnungs-Lebenszyklus; die Preflight-Garantie verspricht kein Rollback beliebiger Callback-Schreibvorgänge
Das Speichern stagt das gesamte Binärpaket; die Dateiausgabe nutzt eine Geschwister-Temporärdatei und einen einzigen finalen Ersatz, und lesbarer seekbarer Stream-Ausgabe behält einen Byte-, Größen- und Positions-Snapshot für ein Rollback nach einem Commit-Fehler
LastSaveUsedStreaming=False spiegelt das vollständige Binärstaging wider, selbst wenn der intermediäre XML-Writer streamt; der Speicher umfasst konvertierte Teile und das vollständige Paket, also ist dieses Backend kein begrenzter Speicher-Streaming-Writer
Konvertierungsberichte und Preflight behalten gepackten Zellspeicher, einschließlich einer Mischung aus gepackten Werten und materialisierten Formeln; erfolgreiches Speichern kann gepackte Werte über die bestehende Stilvorbereitung und den Arbeitsblatt-Writer expandieren, also impliziert Berichtsreinheit keine unveränderliche oder nicht materialisierende Speicheroperation
Erfolgreiches Binärdatei-Speichern leert vorherige rohe XML-Quellbindungen; Stream-Speichern behält das Dateinamenverhalten, und Abbruch wird vor dem Ziel-Commit geprüft
Paketkonvertierungs-APIs
procedure XlsbToOpenXml(Source: TZipArchive; Destination: TStream; CancelCheck: TXLSStreamCancelCheck = nil; EntryCompressionLevel: Integer = -1; EntryFixedDate: TDateTime = 0); procedure OpenXmlToXlsb(Source: TZipArchive; Destination: TStream; CancelCheck: TXLSStreamCancelCheck = nil; EntryCompressionLevel: Integer = -1; EntryFixedDate: TDateTime = 0); function XlsbStylesToXml(const Data: AnsiString): AnsiString; function XlsbStylesFromXml(const Data: AnsiString): AnsiString; function XlsbStringsToXml(const Data: AnsiString): AnsiString; function XlsbStringsFromXml(const Data: AnsiString): AnsiString;
TXlsbFormulaValidator.Create(WorkbookXml) validiert den Arbeitsmappen-Namenkontext und Validate(FormulaText, SheetIndex) validiert eine Formel ohne Arbeitsblatt-Zellzugriff; SheetIndex ist nullbasiert, und der Aufrufer besitzt den Validator
XlsbValidateTableXml(Data) und XlsbValidateAutoFilterXml(Data) validieren UTF-8-Objekt-XML gegen dieselben Encoder-Kontrakte wie die Paketausgabe; Fehlschläge lösen die bestehenden Format- oder Nicht-unterstützt-Feature-Exceptions aus
Diese lxXlsb-APIs behalten den Aufruferbesitz; die Paketkonvertierung validiert und stagt alle Teile, bevor Destination ab Offset null ersetzt wird, und Kernteil-Brücken nutzen UTF-8-XML und rohe Binärbytes
EXlsbUnsupported leitet sich von EXlsbFormatError ab und unterscheidet erwartete Subset-Zurückweisung von missgebildeten Daten; Abbruch löst die etablierte Stream-Abbruch-Exception vor dem Commit aus
Kompression akzeptiert -1 bis 9, und das feste Datum akzeptiert null oder ein endliches DOS-darstellbares Datum von 1980 bis 2107; ungültige Optionen weisen zurück, bevor sich am Ziel etwas ändert