HotXLS-Dokumentation

TXLSXWorkbook-Klasse

Top-Level-Container für eine Excel 2007+ (.xlsx)-Arbeitsmappe. Deklariert in lxHandleX. Enthält eine TXLSXSheets- Sammlung und stellt SaveAs / Open-Einstiegspunkte für OOXML-Arbeitsmappen, CSV / TSV-Import und OpenDocument Spreadsheet (.ods)-Lese-/Schreib-Workflows bereit

Deklaration

type
  TXLSXFileFormat = (xlsxOpenXMLWorkbook, xlsxOpenDocumentSpreadsheet);

  TODSExportOptions = class
    constructor Create;
    property Generator: WideString;
    property IncludeCharts: Boolean;
    property IncludeImages: Boolean;
  end;

  TXLSXWorkbook = class
    constructor Create;
    destructor Destroy; override;
    function SaveAs(const FileName: WideString): Integer; overload;
    function SaveAs(const FileName: WideString; FileFormat: TXLSXFileFormat): Integer; overload;
    function SaveAs(Stream: TStream): Integer; overload;
    function SaveAs(Stream: TStream; FileFormat: TXLSXFileFormat): Integer; overload;
    function Open(const FileName: WideString): Integer; overload;
    function Open(const FileName: WideString; const Password: WideString): Integer; overload;
    function Open(Stream: TStream): Integer; overload;
    function OpenCSV(const FileName: WideString): Integer; overload;
    function OpenCSV(const FileName: WideString; ASeparator: WideChar;
      ADetectTypes: Boolean): Integer; overload;
    function OpenCSV(Stream: TStream): Integer; overload;
    function OpenCSV(Stream: TStream; ASeparator: WideChar;
      ADetectTypes: Boolean): Integer; overload;
    function OpenODS(const FileName: WideString): Integer; overload;
    function OpenODS(Stream: TStream): Integer; overload;
    function SaveAsODS(const FileName: WideString): Integer; overload;
    function SaveAsODS(Stream: TStream): Integer; overload;
    function SaveAsODS(const FileName: WideString; Options: TODSExportOptions): Integer; overload;
    function SaveAsODS(Stream: TStream; Options: TODSExportOptions): Integer; overload;
    function GetODSSheetNames(const FileName: WideString; AList: TStrings): Integer; overload;
    function GetODSSheetNames(Stream: TStream; AList: TStrings): Integer; overload;
    function GetSheetNames(const FileName: WideString; AList: TStrings): Integer; overload;
    function GetSheetNames(Stream: TStream; AList: TStrings): Integer; overload;
    function SaveAsCSV(const FileName: WideString): Integer; overload;
    function SaveAsCSV(const FileName: WideString; SheetIndex: Integer; Delimiter: WideChar): Integer; overload;
    function SaveAsCSV(Stream: TStream): Integer; overload;
    function SaveAsCSV(Stream: TStream; SheetIndex: Integer; Delimiter: WideChar): Integer; overload;
    function SaveAsHTML(const FileName: WideString): Integer; overload;
    function SaveAsHTML(const FileName: WideString; Options: TXLSXHtmlExportOptions): Integer; overload;
    function SaveAsHTML(const FileName: WideString; SheetIndex: Integer): Integer; overload;
    function SaveAsHTML(const FileName: WideString; SheetIndex: Integer; Options: TXLSXHtmlExportOptions): Integer; overload;
    function SaveAsHTML(Stream: TStream): Integer; overload;
    function SaveAsHTML(Stream: TStream; Options: TXLSXHtmlExportOptions): Integer; overload;
    function SaveAsHTML(Stream: TStream; SheetIndex: Integer): Integer; overload;
    function SaveAsHTML(Stream: TStream; SheetIndex: Integer; Options: TXLSXHtmlExportOptions): Integer; overload;
    function SaveAsRTF(const FileName: WideString): Integer; overload;
    function SaveAsRTF(const FileName: WideString; SheetIndex: Integer): Integer; overload;
    function SaveAsRTF(Stream: TStream): Integer; overload;
    function SaveAsRTF(Stream: TStream; SheetIndex: Integer): Integer; overload;
    // AES encryption (ECMA-376 Standard Encryption) write path.
    // OpenEncrypted still raises for encrypted packages.
    function SaveAsEncrypted(const FileName, APassword: WideString): Integer;
    function OpenEncrypted(const FileName, APassword: WideString): Integer;
    function CanReadEncrypted(const FileName: WideString): Boolean;
    function Calculate(const Formula: WideString): Variant;
    property OnUserFunction: TXLSUserFunctionEvent;
    property OnUserFunctionEx: TXLSUserFunctionExEvent;
    // Document properties (docProps/core.xml + docProps/app.xml).
    property Title, Author, Subject, Keywords, Description,
             Category, LastModifiedBy, Company,
             Application, AppVersion: WideString;
    property Created, Modified: TDateTime;
    // Workbook protection (16-bit legacy hash).
    procedure ProtectWorkbook; overload;
    procedure ProtectWorkbook(const APassword: WideString); overload;
    procedure ProtectWorkbook(const APassword: WideString; ALockStructure, ALockWindows: Boolean); overload;
    procedure UnProtectWorkbook;
    property IsWorkbookProtected: Boolean;
    property LockStructure, LockWindows: Boolean;
    // VBA project payload (round-trips byte-for-byte). Workbook is saved
    // with macro-enabled content type when HasVbaProject is True.
    procedure LoadVbaProjectFromFile(const AFileName: WideString);
    procedure ClearVbaProject;
    function HasVbaProject: Boolean;
    property VbaProjectDefined: Boolean;
    property VbaProject: AnsiString;
    property ParsedVBAProject: TXLSVBAProject;
    // Chart sheet helper — creates a sheet flagged IsChartSheet and
    // seeds Charts[0] with a default full-page anchor.
    function AddChartSheet(const AName: WideString;
      AChartType: TXLSXChartType; const ATitle: WideString): TXLSXWorksheet;
    // Streaming SaveAs path (TXLSWideStringBuilder + one sheet at a time).
    property StreamingWrite: Boolean;
    // Workbook-level collections.
    property ActiveSheet: Integer;
    property Minimized: Boolean;
    property WindowHidden: Boolean;
    property ShowHorizontalScroll: Boolean;
    property ShowVerticalScroll: Boolean;
    property ShowSheetTabs: Boolean;
    property XWindow: Integer;
    property YWindow: Integer;
    property WindowWidth: Integer;
    property WindowHeight: Integer;
    property TabRatio: Integer;
    property FirstSheet: Integer;
    property AutoFilterDateGrouping: Boolean;
    property Date1904: Boolean;
    property SourceFormat: TXLSXFileFormat;
    property IndexedColor[Index: Integer]: LongWord;
    function  HasCustomIndexedColor(Index: Integer): Boolean;
    function  CustomIndexedColorCount: Integer;
    procedure ResetIndexedColors;
    property Sheets: TXLSXSheets;
    property Fonts: TXLSXFonts;
    property Fills: TXLSXFills;
    property Borders: TXLSXBorders;
    property NumberFormats: TXLSXNumberFormats;
    property Alignments: TXLSXAlignments;
    property DefinedNames: TXLSXDefinedNames;
    property ExternalLinks: TXLSXExternalLinks;
  end;
      

Elemente

Sheets Arbeitsblatt-Auflistung. Siehe TXLSXSheets
Fonts Schriftartenpalette auf Arbeitsmappenebene. Zellen wählen eine Schriftart durch Setzen von TXLSXCell.FontIndex auf einen 1-basierten Index in dieser Auflistung. Siehe TXLSXFont / TXLSXFonts
Fills Füllungspalette auf Arbeitsmappenebene. Zellen wählen eine Füllung durch Setzen von TXLSXCell.FillIndex auf einen 1-basierten Index in dieser Auflistung. Siehe TXLSXFill / TXLSXFills
Borders Rahmenpalette auf Arbeitsmappenebene. Zellen wählen einen Rahmen durch Setzen von TXLSXCell.BorderIndex auf einen 1-basierten Index in dieser Auflistung. Siehe TXLSXBorder / TXLSXBorders
NumberFormats Palette benutzerdefinierter Zahlenformate auf Arbeitsmappenebene. Zellen wählen ein Format durch Setzen von TXLSXCell.NumberFormatIndex auf einen 1-basierten Index in dieser Auflistung. Siehe TXLSXNumberFormat / TXLSXNumberFormats
DefinedNames Benannte Bereiche auf Arbeitsmappenebene (arbeitsmappengebunden oder blattgebunden). Siehe TXLSXDefinedName / TXLSXDefinedNames
Calculate Kompiliert und wertet eine Excel-Formelzeichenfolge gegen das aktive Blatt aus; ein führendes = wird akzeptiert Zellbezüge, Bereiche, in referenzierten Zellen gespeicherte Formeln, blattübergreifende Bezüge, benannte Bereiche sowie unterstützte Text-, Datums-, Arbeitstags-, Technik/Basis-Konvertierungs-, bitweise, statistische, Aggregat- und Mathefunktionen werden durch die gemeinsam genutzte HotXLS-Formelauswertung berechnet Siehe OnUserFunction für den Umgang mit benutzerdefinierten oder nicht unterstützten Funktionen
OnUserFunction, OnUserFunctionEx Rückruf, der von Calculate aufgerufen wird, wenn eine Formel eine benutzerdefinierte oder nicht unterstützte Funktion aufruft. Siehe OnUserFunction / OnUserFunctionEx-Rückruf
GetSheetNames(FileName, AList), GetSheetNames(Stream, AList) Liest xl/workbook.xml und hängt Arbeitsblattnamen in Arbeitsmappenreihenfolge an AList an, ohne Arbeitsblatt-XML zu laden. Die Stream-Überladung erwartet einen vollständigen XLSX-Paket-Stream Gibt die Anzahl der gelesenen Namen zurück oder -1, wenn das Paket nicht geöffnet werden kann
Alignments Zellenausrichtungspalette auf Arbeitsmappenebene. Zellen wählen einen Eintrag durch Setzen von TXLSXCell.AlignmentIndex auf einen 1-basierten Index in dieser Auflistung. Siehe TXLSXAlignment
Document properties Title, Author, Subject, Keywords, Description, Category, LastModifiedBy, Company, Application, AppVersion, Created, Modified. Das Setzen eines dieser Werte füllt docProps/core.xml + docProps/app.xml beim Aufruf von SaveAs (andernfalls behält die Arbeitsmappe den minimalen Paketsatz)
ProtectWorkbook / UnProtectWorkbook Arbeitsmappenschutz-Umschalter mit optionalem 16-Bit-Legacy-Kennwort-Hash sowie den Flags LockStructure / LockWindows. Wird als <workbookProtection> in xl/workbook.xml abgebildet
LoadVbaProjectFromFile / VbaProject / HasVbaProject / VbaProjectDefined LoadVbaProjectFromFile importiert einen rohen vbaProject.bin-Payload; VbaProject stellt die Bytes bereit; HasVbaProject und das schreibgeschützte VbaProjectDefined geben beide an, ob ein Payload vorhanden ist. Beim Speichern mit der Erweiterung .xlsm werden Makros von Excel aktiviert
ParsedVBAProject Schreibgeschützte geparste Ansicht des aktuellen vbaProject.bin-Payloads. Wenn der Payload ein gültiger OLE-VBA-Speicher ist, wird ein TXLSVBAProject zurückgegeben, das Modulnamen und Quelltext enthält; andernfalls wird nil zurückgegeben. Der rohe VbaProject-Payload bleibt die maßgeblichen Bytes für SaveAs/Open-Roundtrips
AddChartSheet(Name, Type, Title) Erstellt ein als IsChartSheet = True markiertes Arbeitsblatt und initialisiert Charts[0] mit einem sinnvollen Standard-Ganzseitenrahmen. SaveAs schreibt solche Blätter in xl/chartsheets/sheetN.xml. Siehe TXLSXChart
StreamingWrite Bei True verwendet SaveAs WriteWorksheetXmlStreaming pro Blatt — es wird kein sheetXmls-Cache gehalten; sharedStrings.xml wird erst ausgegeben, nachdem jedes Blatt die SST befüllt hat Kombiniert mit dem zeilenweisen TXLSWideStringBuilder bleibt der Speicherbedarf bei großen Blättern linear Standardwert ist False (bisheriges Verhalten)
SaveAsEncrypted / OpenEncrypted / CanReadEncrypted ECMA-376-Standard-Verschlüsselungs-Schreibunterstützung SaveAsEncrypted schreibt einen standardkonformen, AES-128-geschützten OLE-Compound-File-Container für nicht leere Kennwörter, wobei AES-NI-Beschleunigung bei Verfügbarkeit genutzt und andernfalls ein portabler Software-Fallback verwendet wird Die verschlüsselte Ausgabe lässt sich in Excel 2007 und höher mit dem zum Speichern verwendeten Kennwort öffnen. CanReadEncrypted erkennt die OLE2-Magic-Bytes; OpenEncrypted fällt transparent auf den normalen Open-Pfad zurück und löst für verschlüsselte Pakete weiterhin EXlsxEncryptionNotImplemented aus, bis die Entschlüsselungsunterstützung verfügbar ist
SaveAs(FileName) Schreibt die Arbeitsmappe in die angegebene Datei. Gibt 1 bei Erfolg zurück, negativ bei Fehler. Hat die Arbeitsmappe keine Blätter, wird vor dem Schreiben ein Standard-Sheet1 hinzugefügt
SaveAs(FileName, FileFormat) Akzeptiert xlsxOpenXMLWorkbook für OOXML-Ausgabe oder xlsxOpenDocumentSpreadsheet für ein direktes OpenDocument-Spreadsheet-(.ods)-Paket. SaveAsODS ist die benannte Abkürzung für den ODS-Pfad und bietet dieselbe Dateiformatausgabe sowie optionale TODSExportOptions-Steuerung
SaveAs(Stream) / SaveAs(Stream, FileFormat) Schreibt die Arbeitsmappe direkt in einen beliebigen TStream. Die FileFormat-Überladung akzeptiert xlsxOpenXMLWorkbook oder xlsxOpenDocumentSpreadsheet und eignet sich für In-Memory-XLSX- oder ODS-Generierung sowie BLOB-Speicherpfade. Gibt 1 bei Erfolg zurück
Open(FileName) Liest ein OOXML-.xlsx-Archiv und ersetzt die Sheets-Auflistung durch dessen Inhalt. Gibt 1 bei Erfolg zurück
Open(FileName, Password) Reserviert für zukünftige verschlüsselte XLSX-Unterstützung. Verhält sich derzeit wie Open(FileName) — das Kennwort wird ignoriert
Open(Stream) Liest ein OOXML-.xlsx-Archiv aus einem TStream. Gibt 1 bei Erfolg zurück
OpenCSV(FileName) / OpenCSV(Stream) Importiert CSV- oder TSV-Text in die Arbeitsmappe mit automatischer Trennzeichenerkennung (,, ;, Tabulator oder Pipe), BOM-basierter UTF-8-/UTF-16-Kodierungserkennung, RFC-4180-konformen Feldern in Anführungszeichen sowie optionaler Werttypinferenz über die ADetectTypes-Überladungen. Der Aufruf von Open(FileName) mit einer .csv- oder .tsv-Datei wird automatisch an diesen Importer weitergeleitet. Siehe OpenCSV-Methode
OpenODS(FileName) / OpenODS(Stream) Importiert ein OpenDocument-Spreadsheet-(.ods)-Paket aus einer Datei oder einem Stream. Der Reader lädt content.xml, gemeinsam genutzte Stilinformationen aus styles.xml und Ansichtseinstellungen, sofern vorhanden, und bewahrt Blattnamen, Skalare, zwischengespeicherte Formelergebnisse, grundlegende Formelreferenzkonvertierung, wiederholte Zeilen/Spalten/Zellen, verbundene Bereiche, Rich-Text, Hyperlinks, Kommentare, eingebettete Bilder und Diagramme, ausgeblendete Zeilen/Spalten/Blätter, Zeilenhöhen, Spaltenbreiten, vererbte/Standardstile, Zahlen-/Datums-/Uhrzeit-/Währungs-/wissenschaftliche/Bruchformate, Zell- und Blattschutzstatus, benannte Bereiche, Druckbereiche, manuelle Seitenumbrüche, fixierte Fensterbereiche, AutoFilter-Bereiche, Zeilen-/Spalten-Gliederungsgruppen, Kopf-/Fußzeilen, Datengültigkeiten inkl. Eingabeaufforderungen, bedingte Formate inkl. Formeln/Farbskalen/Datenbalken und Registerkartenfarbe. Vollständige OpenFormula-Semantik, ODS-Schutzschlüssel, Kommentargeometrie, erweiterte Kommentarformatierung und paketweite Funktionen außerhalb des Tabellenkalkulationsinhalts werden nicht konvertiert
SaveAsODS(FileName) / SaveAsODS(Stream) Speichert die Arbeitsmappe als gültiges OpenDocument-Spreadsheet-Paket. Es schreibt ODF-mimetype, Manifest, Metadaten, Stile und Arbeitsblattinhalt direkt und überträgt typisierte Werte, Formeln, Stile, Rich-Text, Abmessungen, Verbundzellen, Hyperlinks, Bilder, Diagramme, benannte Bereiche, AutoFilter-Bereiche, bedingte Formate, Datengültigkeiten, fixierte Fensterbereiche, Seiteneinrichtung, Kopf-/Fußzeilen, Druckbereiche, manuelle Seitenumbrüche, Gliederungsgruppen, Registerkartenfarbe und Blattvisibilität, soweit diese Funktionen im HotXLS-Arbeitsmappenmodell verfügbar sind
TODSExportOptions Steuert den ODS-Export. Generator überschreibt den meta:generator-Wert in meta.xml; ein leerer Wert verwendet die integrierte HotXLS-Generatorzeichenfolge. IncludeCharts und IncludeImages sind standardmäßig True; bei False werden die zugehörigen Zeichenrahmen, Paketteile und Manifesteinträge gemeinsam entfernt, sodass die Ausgabe keine verwaisten Diagramm- oder Bildreferenzen enthält. Der Aufrufer ist Eigentümer der Optionsinstanz und muss sie freigeben
GetODSSheetNames(FileName, AList), GetODSSheetNames(Stream, AList) Liest nur ODS-Tabellennamen aus content.xml in AList, ohne die Arbeitsmappe zurückzusetzen oder zu befüllen. Verwenden Sie diese Methode, wenn ein Dateiauswahldialog oder ein Importworkflow Blattnamen benötigt, bevor die Arbeitsmappe geladen wird
SaveAsCSV overloads Vier Überladungen (FileName oder Stream × aktives Blatt Standard / expliziter SheetIndex + Delimiter). Schreibt das gewählte Blatt als UTF-8-CSV mit BOM. Datumswerte werden als yyyy-mm-dd hh:nn:ss ausgegeben; Formelzellen werden vor dem Export berechnet, und Formeltext wird nur verwendet, wenn die Berechnung nicht verfügbar ist Gibt 0 bei Erfolg zurück
SaveAsHTML overloads Optionsüberladungen akzeptieren TXLSXHtmlExportOptions für Title, WriteDocument, IncludeStyles, IncludeBOM und TableClass. Setzen Sie WriteDocument auf False für ein Tabellenfragment; setzen Sie IncludeBOM auf False, wenn die Ausgabe in eine bestehende UTF-8-Antwort eingebettet wird. Die exportierte Ausgabe bewahrt Zell-Hyperlinks als <a>-Anker und verankerte Bilder als inline data:-Bild-URIs; der Export auf Arbeitsmappenebene umfasst auch Anker außerhalb belegter Zellen. Zellkommentare werden als escaped <td>-title-Attribute ausgegeben. Bei aktiviertem IncludeStyles werden explizite ColWidth-Werte als <col>-Breiten und explizite RowHeight-Werte als <tr>-Höhenstile ausgegeben. Rich-Text-Zellenläufe werden als escaped <span>-Elemente mit inline Schriftart-, Farb-, Hervorhebungs- und Unterstreichungsstilen ausgegeben. Zellrahmen werden als CSS-Regeln border-left, border-right, border-top und border-bottom ausgegeben. Ausgeblendete Zeilen und Spalten sowie explizit nullbreite Spalten werden in der generierten Tabelle übersprungen. Vertikale Ausrichtungseinstellungen werden als CSS-vertical-align-Regeln ausgegeben
SaveAsRTF overloads Vier Überladungen (FileName oder Stream × aktives Blatt Standard / expliziter SheetIndex). Schreibt das gewählte Blatt als RTF-1.6-Dokument mit einer einfachen Tabelle. Spaltenbreiten werden aus ColWidth-Daten abgeleitet (1 Zeicheneinheit ≈ 96 Twips; Standard 809 Twips). Zellweise Fett-/Kursiv-/Schriftgröße werden angewendet; Nicht-ASCII-Zeichen werden als vorzeichenbehaftete 16-Bit-\uN?-RTF-Unicode-Escapes kodiert Verbundene Zellen werden nicht überspannt. Gibt 0 bei Erfolg zurück
ActiveSheet 1-basierter Index des aktiven (ausgewählten) Blattes (0 wenn keins), passend zum ActiveSheetIndex der klassischen XLS-Engine. SaveAs schreibt activeTab="N" auf <workbookView> (das OOXML-Attribut activeTab selbst bleibt 0-basiert), wenn Arbeitsmappenansichtsoptionen ausgegeben werden müssen, und markiert das zugehörige Blatt mit tabSelected="1"
Minimized / WindowHidden / ShowHorizontalScroll / ShowVerticalScroll Fensterchrome-Flags der Arbeitsmappe, geschrieben in <workbookView>. Minimized schreibt minimized="1", WindowHidden schreibt visibility="hidden", und ShowHorizontalScroll / ShowVerticalScroll blenden die Arbeitsmappen-Scrollleisten ein oder aus. Open überträgt alle vier Werte im Roundtrip
XWindow / YWindow / WindowWidth / WindowHeight Fenstergeometrie der Arbeitsmappe, geschrieben in <workbookView>. XWindow und YWindow speichern den Fensterursprung, während WindowWidth und WindowHeight seine Größe speichern. Werte werden auf 0..65535 begrenzt und beim Laden im Roundtrip übertragen
ShowSheetTabs / TabRatio / FirstSheet / AutoFilterDateGrouping Ansichtsoptionen des Arbeitsmappenfensters, geschrieben in <workbookView>. ShowSheetTabs blendet die Registerkartenleiste ein oder aus, TabRatio steuert die Breite zwischen Registerkartenleiste und Scrollleiste (0..1000), FirstSheet wählt die erste sichtbare Registerkarte als 0-basierten Blattindex aus, und AutoFilterDateGrouping steuert die Excel-Datumsgruppierung in AutoFilter-Dropdowns. Open überträgt alle vier Werte im Roundtrip
Date1904 Datumsbasis der Arbeitsmappe. False (Standard) = Windows-1900-Epoche; True = Mac-1904-Epoche (verschiebt jede Datumsseriennummer um 1462 Tage). Setzen Sie dies vor dem Zuweisen von TDateTime-Zellwerten, damit Excel dasselbe Kalenderdatum anzeigt
SourceFormat Gibt die Paketfamilie an, die beim letzten erfolgreichen Open- oder OpenODS-Aufruf geladen wurde. Gibt xlsxOpenXMLWorkbook für XLSX und xlsxOpenDocumentSpreadsheet für ODS zurück; eine neu erstellte Arbeitsmappe gibt xlsxOpenXMLWorkbook zurück, bis eine Datei geöffnet wird
IndexedColor[Index] ARGB-Wert für den angegebenen OOXML-Indexed-Color-Paletten- Slot (0..63). Beim Lesen wird der Benutzeroverride zurückgegeben, sofern gesetzt, andernfalls der integrierte OOXML-Standard (XlsxDefaultIndexedPalette) Beim Schreiben wird Slot N überschrieben; SaveAs gibt dann einen vollständigen <indexedColors>-Block mit allen 64 Slots aus
HasCustomIndexedColor / CustomIndexedColorCount / ResetIndexedColors HasCustomIndexedColor(N) gibt True zurück, wenn Slot N explizit überschrieben wurde CustomIndexedColorCount gibt die Anzahl der überschriebenen Slots zurück (0 = kein <colors>-Block wird von SaveAs ausgegeben) ResetIndexedColors verwirft jeden Override und stellt die Standardpalette wieder her
ExternalLinks Auflistung externer Arbeitsmappenreferenzen. Jeder TXLSXExternalLink-Eintrag enthält eine Ziel-URL und eine SheetNames-Liste. SaveAs gibt den <externalReferences>-Block in xl/workbook.xml und die zugehörigen xl/externalLinks/-Teile aus. Open überträgt Ziel und SheetNames im Roundtrip; zwischengespeicherte Zellwerte innerhalb von <sheetDataSet> werden nicht beibehalten

Beispiel

Eine Arbeitsmappe schreiben und erneut öffnen:
uses lxHandleX;

var
  wb: TXLSXWorkbook;
begin
  wb := TXLSXWorkbook.Create;
  try
    wb.Sheets.Add('Demo').Cells.Item[1, 1].Value := 'Hello';
    wb.SaveAs('demo.xlsx');

    wb.Open('demo.xlsx');
    ShowMessage(wb.Sheets[0].Cells.Item[1, 1].Value);
  finally
    wb.Free;
  end;
end;
    

Siehe auch