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
- Feuilles de calcul ordinaires, noms et chaînes Unicode, nombres, valeurs Boolean, cellules vides et vides stylées, et valeurs d'erreurs ordinaires représentables
- Entrées de chaînes partagées et inline, enregistrements natifs compacts numériques et de cellules courtes, visibilité des feuilles, indicateur de système de date, vues et sélections ordinaires du classeur et des feuilles
- Polices courantes, remplissages à motifs, bordures de bords, formats de nombre, références de formats de cellule, indicateurs d'alignement et de protection, et couleurs RGB, de thème et indexées représentées
- Hauteurs de lignes, largeurs de colonnes, indicateurs de dimensions pris en charge et marges de page
- Formules de cellules ordinaires avec jetons de fonctions legacy pris en charge, opérateurs scalaires, références A1, références à une seule feuille du même classeur et noms de classeur ou de feuille, avec caches numériques, de chaînes, Boolean et d'erreurs ordinaires
- Noms définis globaux et de portée feuille, indicateurs et commentaires de noms masqués, cellules fusionnées, hyperliens externes et internes ordinaires, volets fractionnés ou figés et sélections de volets
- Plages AutoFilter, comparaisons personnalisées scalaires avec un ou deux critères AND/OR, et listes arbitraires de valeurs sélectionnées avec une sélection de vide facultative
- Tables de feuilles ordinaires avec identité, plage, visibilité de l'en-tête et de la ligne de totaux, identité et légendes de colonnes, étiquettes littérales de ligne de totaux, critères AutoFilter représentés et indicateurs de style de table intégrés
- Compression ZIP configurée et horodatages ZIP déterministes via les options existantes du classeur
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