Docs HotXLS

Formules et objets de feuilles XLSB

La facade du classeur XLSX lit et écrit un sous-ensemble XLSB validé avec des valeurs typées, des formules ordinaires en cache, des noms, des styles courants et des objets de feuilles représentés ; tout état non représenté est rejeté avant la sortie de destination

Ouvrir et enregistrer

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 détecte le contenu et le type enregistré de la partie classeur ; une entrée binaire réussie règle SourceFormat=xlsxExcelBinaryWorkbook, tandis que les quatre ordinaux TXLSXFileFormat d'origine restent inchangés et que le nouveau membre a l'ordinal 4

Les overloads fichier et stream de SaveAs et SaveAsChecked acceptent explicitement le format binaire ; l'enregistrement par défaut sélectionne toujours le format ordinaire de classeur Open XML quelle que soit l'extension du nom de fichier

GetConversionReport(xlsConversionExcelBinaryWorkbook) inspecte l'état courant sans étendre le stockage compacté de cellules ; les entrées non prises en charge restent des échecs obligatoires même pour un enregistrement sans vérification ou avec AllowLossy=True

État pris en charge

Le rapport de conversion couvre les fonctionnalités du modèle actif, et la validation complète du package reste la dernière porte pour les références invalides, enregistrements mal formés, attributs inconnus ou contenu conservé non pris en charge

L'import binaire conserve la police par défaut explicite du fichier et les formats de nombre intégrés pris en charge, cellules vides stylées comprises ; les formats de nombre dépendants de la locale exigent un code de format explicite afin que le lecteur ne devine pas le formatage régional

Frontières explicites

Enregistrements de formules partagées, possession des tableaux et tableaux dynamiques, constantes tableaux et fonctions renvoyant des tableaux, fonctions futures, fonctions définies par l'utilisateur, références inter-classeurs et multi-feuilles, VBA, connexions de données externes, tableaux croisés dynamiques et slicers, graphiques et dessins, commentaires et texte enrichi, validation, mise en forme conditionnelle et métadonnées avancées de page ou d'extension restent hors de ce backend

Colonnes calculées de tables, formules d'agrégation de totaux, état de tri, formatage de tables différentiel ou personnalisé, tables liées à des requêtes et mappages XML sont rejetés ; filtres de couleur, d'icône, dynamiques et de groupes de dates, critères personnalisés natifs Boolean typés, critères personnalisés natifs de chaînes à l'allure numérique et surcharges de visibilité des boutons de filtre sont aussi rejetés

Les critères de filtres de feuilles importés non personnalisés sont conservés en RawXml ; les comparaisons personnalisées remplissent les propriétés de critères typées existantes, tandis que les valeurs sélectionnées et la sélection de vide restent un critère adossé au XML plutôt qu'une nouvelle API typée de listes de valeurs

La conversion des jetons de formules préserve la sémantique et les indicateurs de références ; elle peut normaliser le texte des formules avec des parenthèses et des noms de feuilles entre guillemets, donc une identité de texte octet par octet n'est pas promise

La sortie de formules exige un cache explicite numérique, de chaîne, Boolean ou d'erreur ordinaire ; un cache manquant est rejeté quand la politique d'enregistrement ne recalculera pas, y compris xrmManual et un graphe de dépendances propre avec xrmIfDirty ; les applications peuvent appeler Recalculate ou sélectionner xrmAlways avant l'enregistrement, et une chaîne vide, False et le zéro numérique sont des caches valides

Les propriétés de calcul doivent employer des défauts pris en charge ; calcul manuel, itération, précision réduite, mode de référence alternatif, calcul forcé ou incomplet, configuration explicite de threads et autres réglages significatifs hors défaut sont rejetés

Les chaînes de calcul et les indices de cellules binaires sont des métadonnées régénérées et ne sont pas copiées à travers le pont de package ; les enregistrements de fonctionnalités inconnus ou les relations restent des échecs au lieu de devenir des parties Open XML fabriquées

L'entrée binaire exige un chargement complet et immédiat des feuilles ; MetadataOnly et une liste SelectedSheets non vide sont rejetés avant de remplacer le modèle existant, car le chargement paresseux exigerait de conserver une archive convertie

Garanties d'échec et de possession

Les packages binaires sont validés et convertis avant que le parseur XML ordinaire ne réinitialise le classeur ; une entrée non prise en charge, un contenu binaire mal formé, des modes de lecture rejetés et une annulation de conversion préservent les objets de feuilles existants, le nom de fichier, le format source et la liaison à l'archive source

Après l'entrée d'une conversion binaire validée dans le parseur XML existant, les échecs tardifs d'analyse XML ou de callbacks d'application suivent le cycle de vie ordinaire d'ouverture XML ; la garantie de preflight ne promet pas le rollback d'écritures arbitraires de callbacks

L'enregistrement met le package binaire entier en staging ; la sortie fichier emploie un fichier temporaire voisin et un remplacement final unique, et la sortie vers un stream lisible et positionnable conserve un instantané d'octets, de taille et de position pour le rollback après un échec de commit

LastSaveUsedStreaming=False reflète la mise en staging binaire complète même quand le rédacteur XML intermédiaire streame ; la mémoire inclut les parties converties et le package complet, donc ce backend n'est pas un rédacteur en streaming à mémoire bornée

Les rapports de conversion et le preflight conservent le stockage compacté de cellules, y compris un mélange de valeurs compactées et de formules matérialisées ; un enregistrement réussi peut étendre les valeurs compactées via la préparation de styles existante et le rédacteur de feuilles, donc la pureté du rapport n'implique pas une opération d'enregistrement immuable ou sans matérialisation

Un enregistrement binaire de fichier réussi efface les liaisons de source XML brutes précédentes ; l'enregistrement vers un stream conserve le comportement de nom de fichier, et l'annulation est vérifiée avant le commit de destination

API de conversion de packages

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) valide le contexte de noms du classeur et Validate(FormulaText, SheetIndex) valide une formule sans accès aux cellules de la feuille ; SheetIndex est en base zéro et l'appelant détient le validateur

XlsbValidateTableXml(Data) et XlsbValidateAutoFilterXml(Data) valident un XML d'objets UTF-8 contre les mêmes contrats d'encodeur que la sortie de package ; les échecs lèvent les exceptions existantes de format ou de fonctionnalité non prise en charge

Ces API lxXlsb conservent la possession de l'appelant ; la conversion de package valide et met en staging toutes les parties avant de remplacer Destination depuis l'offset zéro, et les ponts de parties de base emploient du XML UTF-8 et des octets binaires bruts

EXlsbUnsupported dérive de EXlsbFormatError et distingue le rejet attendu du sous-ensemble d'une donnée mal formée ; une annulation lève l'exception établie d'annulation de stream avant le commit

La compression accepte de -1 à 9, et la date fixe accepte zéro ou une date finie représentable en DOS, de 1980 à 2107 ; des options invalides sont rejetées avant toute modification de la destination