Documentação HotXLS

Fórmulas e objetos de folhas de cálculo XLSB

A facade XLSX do livro lê e escreve um subconjunto XLSB validado com valores com tipo, fórmulas comuns em cache, nomes, estilos comuns e objetos de folhas de cálculo representados; o estado não representado provoca rejeição antes da saída para o destino

Abrir e gravar

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');

O Open deteta o conteúdo e o tipo registado da parte do livro; uma entrada binária bem sucedida define SourceFormat=xlsxExcelBinaryWorkbook, enquanto os quatro ordinais originais de TXLSXFileFormat permanecem inalterados e o novo membro tem o ordinal 4

As sobrecargas de SaveAs e SaveAsChecked para ficheiro e stream aceitam o formato binário explicitamente; a gravação predefinida continua a selecionar o formato comum de livro Open XML, independentemente da extensão do nome de ficheiro

O GetConversionReport(xlsConversionExcelBinaryWorkbook) inspeciona o estado atual sem expandir o armazenamento comprimido de células; as entradas não suportadas continuam a ser falhas obrigatórias mesmo para gravação não verificada ou AllowLossy=True

Estado suportado

O relatório de conversão cobre as funcionalidades do modelo vivo, e a validação completa do pacote continua a ser a última barreira para referências inválidas, registos malformados, atributos desconhecidos ou conteúdo retido não suportado

A importação binária retém o tipo de letra predefinido explícito do ficheiro e os formatos numéricos incorporados suportados, incluindo células em branco com estilo; os formatos numéricos dependentes do locale exigem um código de formato explícito, para que o leitor não adivinhe a formatação regional

Fronteiras explícitas

Registos de fórmulas partilhadas, detenção de matrizes e matrizes dinâmicas, constantes de matriz e funções que devolvem matrizes, funções futuras, funções definidas pelo utilizador, referências a livros externos e a várias folhas, VBA, ligações de dados externas, PivotTables e Slicers, gráficos e desenhos, comentários e texto formatado, validação, formatação condicional e metadados avançados de página ou de extensão ficam fora deste backend

Colunas calculadas de tabelas, fórmulas de agregação de totais, estado de ordenação, formatação diferencial ou personalizada de tabelas, tabelas vinculadas a consultas e mapeamentos XML provocam rejeição; os filtros de cor, ícone, dinâmicos e de grupos de datas, critérios personalizados nativos Boolean com tipo, critérios personalizados nativos de cadeias com aparência numérica e substituições de visibilidade de botões de filtro também provocam rejeição

Os critérios importados de filtros de folhas de cálculo não personalizados são retidos como RawXml; as comparações personalizadas preenchem as propriedades existentes de critérios com tipo, enquanto os valores selecionados e a seleção em branco continuam a ser um critério suportado por XML em vez de uma nova API com tipo de listas de valores

A conversão de tokens de fórmulas preserva a semântica e as flags de referências; pode normalizar o texto de fórmulas com parênteses e nomes de folhas entre aspas, pelo que a identidade byte a byte do texto não é prometida

A saída de fórmulas exige uma cache explícita numérica, de cadeia, Boolean ou de erro comum; uma cache em falta provoca rejeição quando a política de gravação não recalcula, incluindo xrmManual e um grafo de dependências limpo com xrmIfDirty; as aplicações podem chamar Recalculate ou selecionar xrmAlways antes de gravar, e a cadeia vazia, False e o zero numérico são caches válidas

As propriedades de cálculo têm de usar predefinições suportadas; cálculo manual, iteração, precisão reduzida, modo de referência alternativo, cálculo forçado ou incompleto, configuração explícita de threads e outras definições significativas diferentes das predefinidas provocam rejeição

As cadeias de cálculo e os índices binários de células são metadados regenerados e não são copiados através da ponte do pacote; registos de funcionalidades ou relações desconhecidos continuam a ser falhas em vez de se tornarem partes Open XML fabricadas

A entrada binária exige o carregamento imediato de folhas completas; MetadataOnly e uma lista SelectedSheets não vazia provocam rejeição antes de substituir o modelo existente, porque o carregamento lazy exigiria um arquivo convertido retido

Garantias de falha e detenção

Os pacotes binários são validados e convertidos antes de o parser XML comum repor o livro; entrada não suportada, conteúdo binário malformado, modos de leitura rejeitados e cancelamento da conversão preservam os objetos existentes da folha de cálculo, o nome de ficheiro, o formato de origem e a ligação ao arquivo de origem

Depois de a conversão binária validada entrar no parser XML existente, falhas tardias de análise XML ou de callbacks da aplicação seguem o ciclo de vida comum de abertura XML; a garantia de preflight não promete a reversão de escritas arbitrárias de callbacks

A gravação prepara o pacote binário inteiro; a saída para ficheiro usa um ficheiro temporário irmão e uma única substituição final, e a saída para stream legível e com capacidade de posicionamento retém uma snapshot de bytes, tamanho e posição para reversão após uma falha de commit

O LastSaveUsedStreaming=False reflete a preparação binária completa mesmo quando o escritor XML intermédio faz streaming; a memória inclui as partes convertidas e o pacote completo, por isso este backend não é um escritor de streaming de memória limitada

Os relatórios de conversão e o preflight retêm o armazenamento comprimido de células, incluindo uma mistura de valores comprimidos e fórmulas materializadas; a gravação bem sucedida pode expandir valores comprimidos através da preparação de estilos existente e do escritor de folhas de cálculo, pelo que a pureza do relatório não implica uma operação de gravação imutável ou sem materialização

A gravação binária bem sucedida em ficheiro limpa as ligações de origem anteriores de XML bruto; a gravação em stream retém o comportamento de nome de ficheiro, e o cancelamento é verificado antes do commit no destino

APIs de conversão de pacotes

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;

O TXlsbFormulaValidator.Create(WorkbookXml) valida o contexto de nomes do livro e o Validate(FormulaText, SheetIndex) valida uma fórmula sem acesso às células da folha de cálculo; o SheetIndex é de base zero e o chamador é o detentor do validador

O XlsbValidateTableXml(Data) e o XlsbValidateAutoFilterXml(Data) validam XML de objetos UTF-8 contra os mesmos contratos de codificador usados pela saída do pacote; as falhas lançam as exceções existentes de formato ou de funcionalidade não suportada

Estas APIs de lxXlsb retêm a detenção do chamador; a conversão do pacote valida e prepara todas as partes antes de substituir o Destination a partir do offset zero, e as pontes de partes centrais usam XML UTF-8 e bytes binários brutos

O EXlsbUnsupported deriva de EXlsbFormatError e distingue a rejeição esperada do subconjunto de dados malformados; o cancelamento lança a exceção estabelecida de cancelamento de streams antes do commit

A compressão aceita -1 a 9, e a data fixa aceita zero ou uma data finita representável em DOS de 1980 a 2107; opções inválidas provocam rejeição antes de mudar o destino