Documentação HotXLS / Referência da API

Armazenamento de arquivo composto

lxCompoundFile lê e grava contêineres Compound File Binary por meio de streams Pascal, incluindo escopos de armazenamento aninhados, payloads de MiniFAT e setores DIFAT encadeados; as APIs nativas de pasta de trabalho Classic BIFF8 usam esse backend no Linux e no macOS

Para trabalho com planilhas, use as chamadas comuns Open e SaveAs da pasta de trabalho; as APIs de nível mais baixo abaixo são úteis para inspecionar streams aninhados, construir contêineres e preservar metadados de armazenamento

Ler ou construir um contêiner

TlxCompoundFile.LoadFromStream(AStream, AOwnsStream) carrega metadados de diretório e de alocação; AOwnsStream tem False como padrão, e o stream de suporte deve permanecer disponível durante a extração do conteúdo dele

CreateNew(AStream, AOwnsStream) prepara um novo contêiner, AddStorage e AddStream enfileiram o conteúdo dele, e Save grava um contêiner da versão 3 com os setores de extensão DIFAT necessários

MembroComportamento
RootIndexA identidade da entrada de diretório raiz, usada como pai de armazenamentos e streams de nível superior
AddStorage(Name, ParentIndex)Enfileira um armazenamento aninhado e retorna a identidade de diretório dele para adicionar filhos
AddStream(Name, Data)Enfileira um stream de bytes no nível raiz
AddStream(Name, Data, ParentIndex)Enfileira um stream de bytes no escopo pai selecionado e retorna a identidade dele
OpenStream(Name), OpenStream(Name, ParentIndex)Extraem um stream raiz ou com escopo para um TlxCfbStream próprio; um stream ausente retorna nil
OpenEntryStream(Index)Extrai um stream de diretório pela identidade; uma entrada inválida ou que não é stream retorna nil
HasStream(Name), HasStream(Name, ParentIndex)Testam a presença do stream na raiz ou no escopo pai selecionado
FindStorage(Name, ParentIndex)Retorna uma identidade de armazenamento no pai selecionado, ou -1 quando não existe armazenamento correspondente
EntryCount, Entries(Index)Inspecionam as entradas de diretório carregadas; os índices têm base zero e devem ser válidos
SetEntryMetadata(Index, Entry)Copia apenas ID de classe, bits de estado e timestamps para uma entrada enfileirada válida ou para a raiz; identidades estruturais e payloads permanecem inalterados

O record TlxCfbEntry expõe Name, EntryType, StartSector, Size, LeftSibling, RightSibling, Child e o ParentIndex derivado; os links de diretório são índices, e -1 indica uma identidade ausente

Os campos de metadados dele são ClassID, StateBits, CreationTime e ModificationTime; os timestamps retêm ticks FILETIME brutos da época UTC de 1601 em vez de uma data formatada por localidade

TlxCfbEntryType inclui cfbEmpty, cfbStorage, cfbStream e cfbRoot; TlxCfbStream expõe Name, Size, Data, Read, Seek e CopyTo

Os streams extraídos são donos de bytes desanexados e devem ser liberados pelo chamador; corrupção, cadeias incompletas, propriedade inválida e grafos cíclicos de diretório ou alocação são rejeitados em vez de retornar payloads truncados

lxCfbCompareNames(A, B) aplica a ordenação de Compound File Binary com comprimento primeiro e mapeamento fixo de maiúsculas BMP simples; nomes duplicados têm escopo do pai, e nomes idênticos em armazenamentos aninhados separados permanecem distintos

Interfaces de armazenamento nativas

Em destinos não Windows, lxOLE fornece a implementação da interface de armazenamento exigida pelo carregamento e salvamento de pastas de trabalho Classic; IStorage, IStream e IEnumStatStg retêm a propriedade explícita de interface e o estado nativo desanexado do contêiner

Fábrica ou helperContrato
XlsOpenCompoundStorage(Source, Storage)Carrega um contêiner somente leitura começando no offset zero do stream
XlsOpenCompoundStorage(Source, Start, Storage)Carrega o contêiner começando no offset explícito não negativo
XlsCreateCompoundStorage(Storage)Cria armazenamento nativo gravável com escopos e streams aninhados
XlsWriteCompoundStorage(Storage, Destination)Serializa o armazenamento raiz nativo para o stream fornecido; implementações de terceiros e armazenamento não raiz são rejeitados
XlsFreeCompoundStorageName(Name)Libera nomes nativos retornados por estatísticas ou enumeração de armazenamento; nil é aceito

As fábricas retornam HResult; teste Succeeded(Result) antes de usar a interface retornada e libere as referências de interface ao terminar

Mutação somente leitura falha, cursores de stream clonados retêm posições independentes, e cópias aninhadas preservam a identidade do pai e os metadados com suporte; a serialização direta não fornece o contrato de transação de destino de pasta de trabalho de nível mais alto

Identificadores canônicos de pasta de trabalho

XlsIdentifierKeyText(const A: WideString): WideString em lxStandard retorna a representação de texto UTF-16 da chave de identificador Unicode fixada existente, permitindo que o armazenamento de nomes definidos Classic compartilhe igualdade canônica com outros motores de pasta de trabalho

Essa representação de chave é para identidade e procura, e não para a grafia exibida; os nomes criados permanecem inalterados, e o comparador de diretório CFB retém sua ordenação separada exigida pelo formato

Consulte o suporte a Free Pascal para os requisitos de build nativo e o contrato verificado de pasta de trabalho BIFF8, e a criptografia Classic para os comportamentos de criptografia com suporte e de property-stream em texto puro