Documentación de HotXLS / Referencia de la API

Almacenamiento de archivos compuestos

lxCompoundFile lee y escribe contenedores Compound File Binary a través de streams de Pascal, incluidos los ámbitos de almacenamiento anidados, las cargas MiniFAT y los sectores DIFAT encadenados; las API nativas del libro Classic BIFF8 usan este backend en Linux y macOS

Usa las llamadas ordinarias Open y SaveAs del libro para el trabajo con hojas de cálculo; las API de nivel inferior de abajo son útiles para inspeccionar streams anidados, construir contenedores y preservar metadatos de almacenamiento

Leer o construir un contenedor

TlxCompoundFile.LoadFromStream(AStream, AOwnsStream) carga los metadatos de directorio y asignación; AOwnsStream es False por defecto, y el stream de respaldo debe permanecer disponible mientras se extrae su contenido

CreateNew(AStream, AOwnsStream) prepara un contenedor nuevo, AddStorage y AddStream encolan su contenido, y Save escribe un contenedor de versión 3 con los sectores de extensión DIFAT necesarios

MiembroComportamiento
RootIndexLa identidad de la entrada del directorio raíz, usada como padre del almacenamiento y los streams de nivel superior
AddStorage(Name, ParentIndex)Encola un almacenamiento anidado y devuelve su identidad de directorio para añadir hijos
AddStream(Name, Data)Encola un stream de bytes a nivel raíz
AddStream(Name, Data, ParentIndex)Encola un stream de bytes en el ámbito padre seleccionado y devuelve su identidad
OpenStream(Name), OpenStream(Name, ParentIndex)Extraen un stream raíz o de ámbito en un TlxCfbStream propio; un stream ausente devuelve nil
OpenEntryStream(Index)Extrae un stream de directorio por identidad; una entrada no válida o que no es stream devuelve nil
HasStream(Name), HasStream(Name, ParentIndex)Comprueban la presencia del stream en la raíz o en el ámbito padre seleccionado
FindStorage(Name, ParentIndex)Devuelve una identidad de almacenamiento en el padre seleccionado, o -1 cuando no existe almacenamiento coincidente
EntryCount, Entries(Index)Inspeccionan las entradas de directorio cargadas; los índices son de base cero y deben ser válidos
SetEntryMetadata(Index, Entry)Copia solo el ID de clase, los bits de estado y las marcas de tiempo en una entrada encolada válida o en la raíz; las identidades estructurales y las cargas permanecen sin cambios

El registro TlxCfbEntry expone Name, EntryType, StartSector, Size, LeftSibling, RightSibling, Child y el ParentIndex derivado; los enlaces de directorio son índices, y -1 indica una identidad ausente

Sus campos de metadatos son ClassID, StateBits, CreationTime y ModificationTime; las marcas de tiempo conservan los ticks FILETIME crudos de la época UTC de 1601 en lugar de una fecha formateada según la configuración regional

TlxCfbEntryType incluye cfbEmpty, cfbStorage, cfbStream y cfbRoot; TlxCfbStream expone Name, Size, Data, Read, Seek y CopyTo

Los streams extraídos poseen bytes desacoplados y el llamador debe liberarlos; la corrupción, las cadenas incompletas, la propiedad no válida y los grafos de directorio o asignación cíclicos se rechazan en lugar de devolver cargas truncadas

lxCfbCompareNames(A, B) aplica el orden de longitud primero de Compound File Binary con un mapeo fijo a mayúsculas BMP simple; los nombres duplicados tienen el ámbito de su padre, y los nombres idénticos en almacenamientos anidados distintos permanecen diferenciados

Interfaces nativas de almacenamiento

En los destinos que no son Windows, lxOLE aporta la implementación de la interfaz de almacenamiento que requieren la carga y el guardado del libro Classic; sus IStorage, IStream e IEnumStatStg conservan la propiedad explícita de interfaces y el estado nativo desacoplado del contenedor

Fábrica o helperContrato
XlsOpenCompoundStorage(Source, Storage)Carga un contenedor de solo lectura empezando en el offset cero del stream
XlsOpenCompoundStorage(Source, Start, Storage)Carga el contenedor empezando en el offset explícito no negativo
XlsCreateCompoundStorage(Storage)Crea almacenamiento nativo escribible con ámbitos y streams anidados
XlsWriteCompoundStorage(Storage, Destination)Serializa el almacenamiento raíz nativo al stream suministrado; las implementaciones ajenas y el almacenamiento no raíz se rechazan
XlsFreeCompoundStorageName(Name)Libera los nombres nativos devueltos por las estadísticas o la enumeración del almacenamiento; se acepta nil

Las fábricas devuelven HResult; comprueba Succeeded(Result) antes de usar la interfaz devuelta, y libera las referencias de interfaz al terminar

La mutación en solo lectura falla, los cursores de stream clonados conservan posiciones independientes, y las copias anidadas preservan la identidad del padre y los metadatos admitidos; la serialización directa no proporciona el contrato de transacción de destino del libro de nivel superior

Identificadores canónicos del libro

XlsIdentifierKeyText(const A: WideString): WideString en lxStandard devuelve la representación de texto UTF-16 de la clave de identificador Unicode fija existente, permitiendo que el almacenamiento de nombres definidos Classic comparta igualdad canónica con los demás motores de libro

Esta representación de clave sirve para identidad y búsqueda, no para la ortografía mostrada; los nombres escritos permanecen sin cambios, y el comparador de directorios CFB retiene su ordenación independiente exigida por el formato

Consulta el soporte de Free Pascal para los requisitos de compilación nativa y el contrato verificado del libro BIFF8, y el cifrado Classic para el comportamiento admitido de cifrado y streams de propiedades en claro