Documentação HotXLS

Fidelidade de cálculo e conversão

Matrizes calculadas compõem entre funções de seleção, ordenação, procura, matrizes e reformatação, com propriedade automática de despejo XLSX, destinos CSE explícitos e recursos de avaliação limitados

Matrizes dinâmicas e matrizes CSE explícitas

Atribua uma expressão que produz matriz a uma única TXLSXCell.Formula e chame TXLSXWorkbook.Recalculate; o resultado recebe um despejo retangular ancorado nessa célula, incluindo fórmulas como SEQUENCE(3,2), A1:A3*10, constantes de matriz e resultados de LET com valor de matriz

Sheet.Cells.Item[1, 1].Formula := 'SEQUENCE(3,2)';
Sheet.Cells.Item[1, 4].Formula := 'SUM(A1#)';
Workbook.Recalculate;

O recálculo aumenta ou reduz o resultado, limpa apenas os seguidores obsoletos de propriedade da âncora e reconstrói as dependências quando a extensão muda; referências a seguidores recém-criados e o operador de despejo A1# usam a extensão atual

Valores existentes, fórmulas, rich text, outras matrizes, intervalos mesclados, tabelas e limites de planilha obstruem um despejo e produzem #SPILL!; estilos em células de outra forma vazias continuam utilizáveis, e limpar uma obstrução permite que o próximo recálculo tente a âncora novamente

Editar um seguidor com um valor ou rich text desanexa essa célula da âncora, de modo que o próximo cálculo preserva a edição como uma obstrução; remover ou limpar a âncora libera os seguidores de sua propriedade, enquanto ConvertFormulasToValues mantém os valores calculados deles como células comuns

Salvar em XLSX registra a extensão atual da matriz e os metadados, e carregar restaura a propriedade dos seguidores já em cache antes do recálculo; fórmulas de matriz que contêm erros ainda retêm sua extensão quando os erros pertencem a elementos individuais

SetArrayFormula continua sendo o ponto de entrada CSE explícito de intervalo fixo nos dois motores de pasta de trabalho; aritmética bruta de intervalo avalia elemento a elemento dentro desse intervalo, enquanto fórmulas escalares comuns mantêm a interseção implícita

O operador unário @ cruza uma referência com a célula da fórmula e toma o primeiro elemento de uma matriz calculada; SINGLE e ANCHORARRAY são aliases de armazenamento aceitos para interseção implícita e referências de despejo

MAP aceita várias matrizes de entrada e uma lista de parâmetros LAMBDA correspondente, propaga erros de elemento e rejeita resultados de matriz aninhados com #CALC!; FILTER aceita matrizes calculadas e máscaras de linha ou coluna, incluindo propagação de erros e um #CALC! de resultado vazio quando nenhum fallback é fornecido

A mutação de despejo dinâmico roda em série mesmo quando várias threads de cálculo estão configuradas; a estabilização da extensão é limitada a 32 passadas, e matrizes dinâmicas em cálculos iterativos circulares são rejeitadas em vez de tratadas como resultados escalares

INDEX aceita referências, constantes de matriz e matrizes calculadas; quando os dois seletores são escalares, seletores positivos de linha e coluna retornam um valor, um seletor zero retorna a linha ou coluna selecionada, e dois seletores zero retornam a matriz completa; uma fonte de referência com seletores escalares mantém o comportamento de referência para consumidores como ROW e ISREF

Seletores de linha e coluna também podem ser matrizes, incluindo constantes, vetores calculados, valores de intervalo e vinculações LET; orientações opostas de linha e coluna sofrem difusão para um produto cruzado retangular, enquanto orientações correspondentes selecionam posições em pares; dimensões singleton sofrem difusão, e posições ausentes em dimensões desiguais retornam valores #N/A individuais

Quando qualquer seletor é uma matriz, zero ou um seletor omitido escolhe o primeiro membro desse eixo em vez de expandir uma linha ou coluna inteira; seletores fracionários truncam em direção a zero, seletores negativos retornam valores #VALUE! individuais antes do truncamento, e seletores além dos limites da fonte retornam valores #REF! individuais; strings, valores Boolean e erros tipados selecionados mantêm seus tipos

SORT e UNIQUE aceitam intervalos, constantes e matrizes calculadas, incluindo resultados aninhados de FILTER, SEQUENCE e LET; orientação de linha e coluna, ordenação crescente ou decrescente, ordenação por primeira ocorrência e deduplicação de ocorrência única seguem o mesmo contrato para cada forma de fonte

Nomes definidos da pasta de trabalho podem fornecer fontes de referência, escalares ou de matriz calculada; ISREF(INDEX(...)) distingue um resultado de referência real de um valor calculado nomeado; seletores escalares de INDEX e opções numéricas de SORT truncam valores fracionários, e argumentos Boolean opcionais rejeitam texto diferente de TRUE ou FALSE

Sheet.Cells.Item[1, 6].Formula := 'SORT(UNIQUE(FILTER(A1:B5,A1:A5>1)),1,-1)';
Sheet.Cells.Item[1, 9].Formula := 'INDEX(SORT(UNIQUE(A1:B5)),0,2)';
Sheet.Cells.Item[1, 12].Formula := 'INDEX(SEQUENCE(2,3,10,2),2,3)';
Workbook.Recalculate;
Sheet.Cells.Item[1, 1].Formula := 'INDEX(SEQUENCE(3,3),{1;3},{1,3})';
Workbook.Recalculate;

Este exemplo de seletor despeja {1,3;7,9} em um resultado de dois por dois; INDEX(SEQUENCE(3,3),{1;3},{1;3}) em vez disso retorna a coluna em pares {1;9}; seletores de matriz produzem valores mesmo quando a fonte é uma referência, enquanto seletores escalares de referência preservam a identidade de referência

Essas expressões podem despejar e redimensionar em XLSX ou avaliar dentro de um destino CSE explícito; erros de fonte de matriz permanecem tipados e um resultado vazio de ocorrência única retorna #CALC!; as saídas de seletor consomem o orçamento de etapas de avaliação, e os payloads combinados de matrizes de fonte, seletor e resultado são verificados contra o orçamento de memória de matriz

INDEX aceita um quarto argumento area_num explícito de 1 para uma fonte calculada, e seletores de linha, coluna e área podem sofrer difusão juntos sobre uma união de referências na mesma planilha com suporte; referências reais de múltiplas áreas mantêm a identidade por meio de nomes definidos locais e LET, enquanto um CHOOSE escalar mantém a referência selecionada, incluindo uma escolha em outra planilha; resultados de matriz de seletor são valores, e não matrizes de referência aninhadas; consulte seleção de área do INDEX e identidade de referência para as regras de zero, omissão, coerção e erro

Para cálculo autônomo, TXLSCalculator.OnGetSpillRange aceita um callback TXLSGetSpillRange que resolve os limites atuais inclusivos de uma âncora; avaliadores apoiados na pasta de trabalho instalam esse callback automaticamente

TXLSGetSpillRange = function(SheetIndex, AnchorRow, AnchorCol: Integer;
  var LastRow, LastCol: Integer): Integer of object;

lxNormalizeStorageFormula normaliza a sintaxe de fórmula criada para OOXML, lxTryStorageFormulaOperators traduz os operadores de despejo e de interseção implícita, e lxApplyXlfnPrefix aplica os prefixos de future-function exigidos; texto protegido e separadores de linha de matriz permanecem intactos, e atribuir uma fórmula retém o texto do chamador em memória

Salvar não altera a expressão criada em memória; reabrir fórmulas XLSX recém-criadas retorna a sintaxe de armazenamento canônica com argumentos por vírgula e sem = inicial, consistente com importações nativas do Excel; o XML de fórmula importado sem alterações mantém seu caminho de preservação existente

Composição de procura, matriz e reformatação

TRANSPOSE aceita referências, constantes e matrizes calculadas preservando texto, valores Boolean e erros individuais; células de fonte em branco viram zero numérico

MMULT, MDETERM e MINVERSE aceitam matrizes calculadas e expressões aninhadas como MMULT(MUNIT(2),SEQUENCE(2,2)); as entradas dessas matrizes devem ser numéricas, com texto, valores Boolean e brancos rejeitados em vez de coagidos, e erros da fonte mantendo seus códigos de erro

CHOOSECOLS e CHOOSEROWS aceitam vetores de seletor escalares ou unidimensionais, concatenam seletores na ordem dos argumentos, preservam duplicatas e contam índices negativos a partir do fim; seletores fracionários truncam em direção a zero, seletores zero e fora do intervalo são rejeitados, e matrizes de seletor bidimensionais não têm suporte

XLOOKUP, XMATCH e MATCH aceitam vetores de procura calculados e pedidos de procura com valor de matriz; as chaves devem ocupar uma linha ou uma coluna, e as matrizes de retorno do XLOOKUP devem se alinhar a esse eixo de procura

Um XLOOKUP escalar pode retornar uma linha ou coluna inteira correspondente, incluindo erros tipados; um pedido de procura com valor de matriz mantém sua própria forma e toma o primeiro componente de cada fatia correspondente ou matriz de fallback

Varreduras de procura exata ignoram entradas de erro no vetor de chaves; chaves Boolean, numéricas e de texto permanecem distintas, enquanto os caminhos comuns de referência escalar mantêm o comportamento existente de streaming e de cache de recálculo; os modos de busca binária ainda exigem chaves corretamente ordenadas

VSTACK, HSTACK, TAKE, DROP, TOROW, TOCOL, WRAPROWS, WRAPCOLS e EXPAND aceitam entradas calculadas e preenchimento tipado; um resultado sem linhas ou colunas retorna #CALC!, e o encapsulamento exige uma entrada unidimensional

Trabalho com matrizes, varredura de procura, travessia de seletores, cópia e preenchimento consomem o orçamento de etapas de avaliação; os payloads de matrizes de entrada, trabalho e saída retidos simultaneamente são verificados contra o limite de memória de matriz configurado antes da alocação

Sheet.Cells.Item[1, 1].Formula := 'XLOOKUP({1;3},SEQUENCE(3),SEQUENCE(3,2))';
Sheet.Cells.Item[1, 4].Formula := 'CHOOSECOLS(SEQUENCE(2,3),{-1;1})';
Sheet.Cells.Item[1, 7].Formula := 'TRANSPOSE(UNIQUE({"A";"B";"A"}))';
Workbook.Recalculate;

Erros de cálculo modernos tipados

#SPILL! e #CALC! permanecem erros de célula tipados durante cálculo, exibição, inspeção de cache e reabertura de XLSX; a saída XLSX carrega os metadados de rich value deles, mantendo o fallback padrão de erro em cache para leitores que não entendem essa extensão

Resultados de texto de fórmula, incluindo seguidores CSE e de matriz dinâmica, usam caches de string literal para que o Excel possa exibi-los antes do recálculo; células de valor simples continuam usando shared strings

A saída de rich error moderna inclui a versão da pasta de trabalho e as declarações de recurso de cálculo Rich Data exigidas pelo Excel para interpretar esses caches antes do recálculo; o calcId emitido é pelo menos 191029, preservando valores solicitados mais altos sem alterar a propriedade CalcId da pasta de trabalho em memória

Metadados importados de célula e de valor, estruturas de rich value não relacionadas e buckets opacos mantêm suas identidades originais quando novos buckets de erro são anexados; substituir uma célula de erro limpa os metadados obsoletos de erro tipado ao salvar

TXLSXRichErrorCodes é o tipo de array de inteiros usado para buckets de rich error decodificados; o código da aplicação lê erros tipados do valor Variant da célula

O BIFF8 não consegue representar fielmente esses erros modernos nem os operadores de despejo; o serializador Classic rejeita representações modernas sem suporte em vez de atribuir um código de erro legado sem relação

Preflight de conversão

TXLSXWorkbook.GetConversionReport retorna um TXLSConversionReport de propriedade do chamador sem recalcular nem alterar a pasta de trabalho; os tipos são declarados em lxDiagnostics

Report := Workbook.GetConversionReport(xlsConversionOpenDocument);
try
  for I := 0 to Report.Count - 1 do
    InspectIssue(Report.Items[I]);
finally
  Report.Free;
end;
TargetxlsConversionOpenXmlWorkbook, xlsConversionOpenXmlTemplate, xlsConversionMacroEnabledTemplate, xlsConversionOpenDocument, xlsConversionExcel97Workbook ou xlsConversionExcelBinaryWorkbook
FidelityTXLSConversionFidelity: xlsConversionPreserved, xlsConversionDegraded, xlsConversionDropped ou xlsConversionUnsupported
IssueTXLSConversionIssue expõe Feature, Fidelity, SheetIndex, SheetName, Location e Message; HasLoss inclui entradas degradadas, descartadas e sem suporte

O relatório inventaria perdas de formato conhecidas, como VBA, proteção, views de pasta de trabalho, conexões, tabelas de consulta, comentários, links externos, XML maps, estrutura de tabela, critérios de filtro, desenhos, caches de erro tipado, validação ou sintaxe de fórmula sem suporte, propriedade de matriz e partes de extensão opacas; ele descreve os caminhos de conversão implementados e não certifica cada recurso em cada aplicativo externo

O ODS retém células de tabela comuns, resultados de fórmula em cache, texto e autores de anotação com suporte, proteção de planilha sem senha e filtros representáveis, ao mesmo tempo em que perde o objeto de tabela do Excel, geometria de gráfico mais rica ou semântica de regra sem suporte; um payload de preservação OOXML opaco é relatado como descartado quando o destino não consegue carregá-lo

A fachada XLSX relata saída BIFF8 como sem suporte; use a API de pasta de trabalho Classic para fluxos de trabalho BIFF com suporte; a versão 2.384.93 adiciona um backend XLSB limitado de valores e estilos que rejeita fórmulas, objetos de recurso, metadados e configurações de cálculo não representados tanto em salvamentos verificados quanto não verificados

Salvamento verificado

Status := Workbook.SaveAsChecked(Stream,
  xlsxOpenDocumentSpreadsheet, False);

Os overloads de arquivo e stream executam o preflight de perdas conhecidas antes de gravar; AllowLossy=False rejeita recursos degradados ou descartados com diagnósticos de conversão, enquanto AllowLossy=True aceita explicitamente essas perdas e ainda rejeita conversões sem suporte

Um preflight rejeitado deixa os bytes de destino e a posição do stream inalterados; solicitações bem-sucedidas usam a transação de salvamento existente e retornam as mesmas convenções de status de salvamento do SaveAs

O SaveAs comum continua disponível com seu comportamento existente; aplicativos que exigem uma decisão explícita de perda devem inspecionar o relatório e usar o salvamento verificado

Formatos de modelo

xlsxOpenXMLTemplate seleciona XLTX sem macros, enquanto xlsxOpenXMLMacroEnabledTemplate seleciona XLTM e preserva um projeto VBA existente; o formato é explícito e não é inferido de uma extensão de arquivo ou modelo importado

XLTX sem macros rejeita uma pasta de trabalho com VBA mesmo quando o salvamento verificado com perdas está habilitado; um pacote XLTM pode ser emitido sem um projeto VBA, e o HotXLS não cria código VBA

Fórmulas de validação ODS

Validação Boolean personalizada usa of:is-true-formula(...); limites escalares com suporte, fontes de lista, referências A1 qualificadas, strings e separadores de argumento são traduzidos para OpenFormula e reajustados com base no endereço da célula base de validação na importação

Expressões de validação estruturadas, externas ou tridimensionais sem suporte são omitidas junto com suas referências de célula, evitando definições de validação pendentes; o preflight de conversão relata as regras omitidas

Anotações, proteção e filtros ODS

Comentários de célula comuns são exportados como anotações OpenDocument com seu texto e autor, incluindo notas vazias, tabulações, espaços e quebras de linha; notas em células de outra forma ausentes e coordenadas distantes usam sequências esparsas repetidas de linhas e colunas sem criar células de planilha

Um comentário na célula âncora de um intervalo mesclado retém seu endereço; uma nota em uma célula coberta ou fora da grade da planilha é relatada como descartada; o rich text de comentários é achatado para seu texto exibido, e os relatórios de conversão identificam a perda de estilo de runs, dimensões personalizadas de caixa e apresentação sempre visível

O sinalizador protegido do OpenDocument e os estilos de célula bloqueada ou desbloqueada com suporte são retidos; o subconjunto de planilha sem perdas não usa senha nem exceções de intervalo editável e permite a seleção apenas de células bloqueadas e desbloqueadas

Sheet.Protect;
Sheet.SheetProtectionOptions :=
  [xlsxSpoSelectLockedCells, xlsxSpoSelectUnlockedCells];
Sheet.Range['B2:B100'].Locked := False;

Hashes de senha do Excel, configurações modernas de senha, intervalos editáveis e permissões de ação fora desse subconjunto são relatados como degradados enquanto o sinalizador protegido permanece; o amplo conjunto de permissões padrão do Excel também exige uma decisão explícita de perda

A importação OpenDocument retém o sinalizador protegido e os estilos de bloqueio de célula; hashes de senha nativos não são convertidos em hashes do Excel, e metadados de permissão importados não representados continuam sendo uma perda nomeada nos relatórios de conversão seguintes

A exportação AutoFilter aceita seis operadores de comparação escalares, até duas condições escalares por coluna unidas com AND ou OR e um AND entre colunas; listas simples de seleção de valores e seleções em branco com suporte não têm limite de dois valores e continuam sendo metadados nativos de filtro

Critérios escalares numéricos usam valores finitos invariantes; seleções de texto preservam seus caracteres literais, incluindo caracteres curinga dentro de listas de seleção, enquanto expressões curinga em filtros personalizados, critérios Boolean ambíguos, grupos de datas, datas dinâmicas e filtros de cor e ícone não têm conversão equivalente com suporte

Expressões de filtro sem suporte são omitidas como uma expressão completa em vez de enfraquecer condições selecionadas; o intervalo do filtro permanece, e o relatório de conversão identifica os critérios omitidos

Salvamentos de stream ODS preparam o pacote completo em um arquivo temporário registrado antes de gravar na posição original do destino; os bytes de prefixo existentes e os offsets absolutos de ZIP são retidos, incluindo posições além do fim original; cancelamento ou exceção de callback de progresso antes do commit preserva os bytes, o tamanho e a posição do destino e libera o arquivo temporário; a notificação final de gravação continua não cancelável

A importação OpenDocument aceita as mesmas conjunções escalares e disjunções de texto na mesma coluna ou conjuntos de valores; OR entre colunas, expressões regulares, comparações sensíveis a maiúsculas e operadores nativos de filtro sem suporte continuam sendo perdas importadas explícitas

TXLSXOdsImportLoss e TXLSXOdsImportLosses descrevem as categorias privadas de procedência de planilha; os relatórios de conversão usam ImportedOdsProtectionPassword, ImportedOdsProtectionOptions, ImportedOdsFilterCriteria e ImportedOdsCommentFormatting; eles sobrevivem à cópia de planilhas e aparecem tanto para destinos de conversão OpenDocument quanto Open XML

A conversão de filtros retém metadados e a visibilidade existente das linhas sem aplicar filtros nem recalcular células; aplicativos nativos mantêm a responsabilidade pelo próprio comportamento de filtragem e edição

Fluxos de trabalho relacionados