Documentation HotXLS / Référence API

Stockage en fichier composé

lxCompoundFile lit et écrit des conteneurs Compound File Binary via des streams Pascal, y compris des portées de stockage imbriquées, des payloads MiniFAT et des secteurs DIFAT chaînés ; les API natives de classeurs Classic BIFF8 utilisent ce backend sur Linux et macOS

Pour le travail sur des feuilles de calcul, utilisez les appels ordinaires Open et SaveAs du classeur ; les API de plus bas niveau ci-dessous servent à inspecter des streams imbriqués, construire des conteneurs et préserver les métadonnées de stockage

Lire ou construire un conteneur

TlxCompoundFile.LoadFromStream(AStream, AOwnsStream) charge les métadonnées de répertoire et d'allocation ; AOwnsStream vaut False par défaut, et le stream sous-jacent doit rester disponible pendant l'extraction de son contenu

CreateNew(AStream, AOwnsStream) prépare un nouveau conteneur, AddStorage et AddStream mettent son contenu en file d'attente, et Save écrit un conteneur de version 3 avec les secteurs d'extension DIFAT nécessaires

MembreComportement
RootIndexIdentité de l'entrée du répertoire racine, utilisée comme parent pour le stockage et les streams de premier niveau
AddStorage(Name, ParentIndex)Met en file un stockage imbriqué et renvoie son identité de répertoire pour y ajouter des enfants
AddStream(Name, Data)Met en file un stream d'octets au niveau racine
AddStream(Name, Data, ParentIndex)Met en file un stream d'octets dans la portée parente choisie et renvoie son identité
OpenStream(Name), OpenStream(Name, ParentIndex)Extrait un stream racine ou de portée vers un TlxCfbStream détenu ; un stream absent renvoie nil
OpenEntryStream(Index)Extrait un stream de répertoire par identité ; une entrée invalide ou non stream renvoie nil
HasStream(Name), HasStream(Name, ParentIndex)Teste la présence d'un stream dans la racine ou la portée parente choisie
FindStorage(Name, ParentIndex)Renvoie une identité de stockage dans le parent choisi, ou -1 si aucun stockage correspondant n'existe
EntryCount, Entries(Index)Inspecte les entrées de répertoire chargées ; les index sont en base zéro et doivent être valides
SetEntryMetadata(Index, Entry)Ne copie que l'ID de classe, les bits d'état et les horodatages dans une entrée en file valide ou la racine ; les identités structurelles et les payloads restent inchangés

L'enregistrement TlxCfbEntry expose Name, EntryType, StartSector, Size, LeftSibling, RightSibling, Child et le ParentIndex dérivé ; les liens de répertoire sont des index, et -1 signale une identité absente

Ses champs de métadonnées sont ClassID, StateBits, CreationTime et ModificationTime ; les horodatages conservent les ticks FILETIME bruts depuis l'époque UTC du 1er janvier 1601 plutôt qu'une date formatée selon la locale

TlxCfbEntryType comprend cfbEmpty, cfbStorage, cfbStream et cfbRoot ; TlxCfbStream expose Name, Size, Data, Read, Seek et CopyTo

Les streams extraits possèdent des octets détachés et doivent être libérés par l'appelant ; corruption, chaînes incomplètes, possession invalide et graphes de répertoire ou d'allocation cycliques sont rejetés au lieu de renvoyer des payloads tronqués

lxCfbCompareNames(A, B) applique le tri Compound File Binary par longueur d'abord avec un mappage fixe en majuscules BMP simples ; les noms dupliqués sont scoped à leur parent, et des noms identiques dans des stockages imbriqués distincts restent différents

Interfaces de stockage natives

Sur les cibles non Windows, lxOLE fournit l'implémentation de l'interface de stockage exigée par le chargement et l'enregistrement des classeurs Classic ; ses IStorage, IStream et IEnumStatStg conservent une possession d'interface explicite et un état de conteneur natif détaché

Factory ou helperContrat
XlsOpenCompoundStorage(Source, Storage)Charge un conteneur en lecture seule à partir de l'offset zéro du stream
XlsOpenCompoundStorage(Source, Start, Storage)Charge le conteneur à partir de l'offset explicite non négatif
XlsCreateCompoundStorage(Storage)Crée un stockage natif inscriptible avec des portées et des streams imbriqués
XlsWriteCompoundStorage(Storage, Destination)Sérialise le stockage racine natif vers le stream fourni ; les implémentations étrangères et un stockage non racine sont rejetés
XlsFreeCompoundStorageName(Name)Libère les noms natifs renvoyés par les statistiques ou l'énumération de stockage ; nil est accepté

Les factory renvoient un HResult ; testez Succeeded(Result) avant d'utiliser l'interface renvoyée, et libérez les références d'interface une fois terminé

Une mutation en lecture seule échoue, les curseurs de stream clonés gardent des positions indépendantes, et les copies imbriquées préservent l'identité parente et les métadonnées prises en charge ; la sérialisation directe n'offre pas le contrat de transaction de destination des classeurs de plus haut niveau

Identifiants canoniques de classeur

XlsIdentifierKeyText(const A: WideString): WideString dans lxStandard renvoie la représentation texte UTF-16 de la clé d'identifiant Unicode épinglée existante, ce qui permet au stockage des noms définis Classic de partager l'égalité canonique avec les autres moteurs de classeurs

Cette représentation de clé sert à l'identité et à la recherche, pas à l'orthographe affichée ; les noms saisis restent inchangés, et le comparateur de répertoires CFB conserve son propre ordre imposé par le format

Voir le support de Free Pascal pour les exigences de build natif et le contrat vérifié des classeurs BIFF8, et le chiffrement Classic pour le comportement du chiffrement pris en charge et du property-stream en clair