Documentação HotXLS

Fórmulas XLSB e objetos de planilha

A fachada de pasta de trabalho XLSX lê e grava um subconjunto XLSB validado com valores tipados, fórmulas comuns em cache, nomes, estilos comuns e objetos de planilha representados; estado não representado é rejeitado antes da saída do destino

Abrir e salvar

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 detecta o conteúdo e o tipo registrado da parte de pasta de trabalho; entrada binária bem-sucedida define SourceFormat=xlsxExcelBinaryWorkbook, enquanto os quatro ordinais originais de TXLSXFileFormat permanecem inalterados e o novo membro tem ordinal 4

Os overloads de arquivo e stream de SaveAs e SaveAsChecked aceitam o formato binário explicitamente; o salvamento padrão ainda seleciona o formato comum de pasta de trabalho Open XML independentemente da extensão do nome de arquivo

GetConversionReport(xlsConversionExcelBinaryWorkbook) inspeciona o estado atual sem expandir o armazenamento de células compactadas; entradas sem suporte continuam sendo falhas obrigatórias mesmo para salvamento não verificado ou AllowLossy=True

Estado com suporte

O relatório de conversão cobre recursos do modelo vivo, e a validação completa do pacote continua sendo a porta final para referências inválidas, records malformados, atributos desconhecidos ou conteúdo retido sem suporte

A importação binária retém a fonte padrão explícita do arquivo e os formatos de número internos com suporte, incluindo células em branco estilizadas; formatos de número dependentes de localidade exigem um código de formato explícito para que o reader não adivinhe a formatação regional

Limites explícitos

Records de fórmula compartilhada, propriedade de matriz e de matriz dinâmica, constantes de matriz e funções que retornam matriz, future functions, funções definidas pelo usuário, referências de pasta de trabalho externa e de múltiplas planilhas, VBA, conexões de dados externas, tabelas dinâmicas e Slicers, gráficos e desenhos, comentários e rich text, validação, formatação condicional e metadados avançados de página ou de extensão permanecem fora deste backend

Colunas calculadas de tabela, fórmulas de agregação de totais, estado de ordenação, formatação de tabela diferencial ou personalizada, tabelas vinculadas a consulta e mapeamentos XML são rejeitados; filtros de cor, ícone, dinâmicos e de grupo de datas, critérios personalizados nativos tipados Boolean, critérios personalizados nativos de string com aparência numérica e sobreposições de visibilidade de botão de filtro também são rejeitados

Critérios de filtro de planilha importados não personalizados são retidos como RawXml; comparações personalizadas populam as propriedades tipadas existentes de critério, enquanto valores selecionados e seleção em branco permanecem um critério apoiado em XML em vez de uma nova API tipada de lista de valores

A conversão de tokens de fórmula preserva a semântica e os sinalizadores de referência; ela pode normalizar o texto de fórmula com parênteses e nomes de planilha entre aspas, de modo que a identidade byte a byte do texto não é prometida

A saída de fórmula exige um cache explícito numérico, de string, Boolean ou de erro comum; um cache ausente é rejeitado quando a política de salvamento não recalculará, incluindo xrmManual e um grafo de dependências limpo com xrmIfDirty; aplicativos podem chamar Recalculate ou selecionar xrmAlways antes de salvar, e string vazia, False e zero numérico são caches válidos

As propriedades de cálculo devem usar padrões com suporte; 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 configurações significativas fora do padrão são rejeitadas

Cadeias de cálculo e índices de célula binários são metadados regenerados e não são copiados pela ponte de pacote; records ou relações de recursos desconhecidos permanecem falhas em vez de virar partes Open XML fabricadas

A entrada binária exige carregamento completo antecipado da planilha; MetadataOnly e uma lista SelectedSheets não vazia são rejeitados antes de substituir o modelo existente, porque o carregamento lazy exigiria um arquivo convertido retido

Garantias de falha e de propriedade

Pacotes binários são validados e convertidos antes de o parser XML comum reiniciar a pasta de trabalho; entrada sem suporte, conteúdo binário malformado, modos de leitura rejeitados e cancelamento de conversão preservam objetos existentes de planilha, nome de arquivo, formato de fonte e vinculação de arquivo de fonte

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

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

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

Relatórios de conversão e preflight retêm o armazenamento de células compactadas, incluindo uma mistura de valores compactados e fórmulas materializadas; o salvamento bem-sucedido pode expandir valores compactados por meio da preparação de estilos existente e do escritor de planilha, de modo que a pureza do relatório não implica uma operação de salvamento imutável ou não materializante

O salvamento binário bem-sucedido em arquivo limpa as vinculações anteriores de fonte XML bruta; o salvamento em stream retém o comportamento de nome de arquivo, e o cancelamento é verificado antes do commit do destino

APIs de conversão de pacote

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) valida o contexto de nomes da pasta de trabalho e Validate(FormulaText, SheetIndex) valida uma fórmula sem acesso a células da planilha; SheetIndex tem base zero e o chamador é dono do validador

XlsbValidateTableXml(Data) e XlsbValidateAutoFilterXml(Data) validam o XML de objeto UTF-8 contra os mesmos contratos de encoder usados pela saída do pacote; falhas disparam as exceções existentes de formato ou de recurso sem suporte

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

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

A compressão aceita de -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 são rejeitadas antes das mudanças de destino