Documentação HotXLS

Fidelidade de cálculo e conversão

As matrizes calculadas compõem-se através de funções de seleção, ordenação, pesquisa, matriciais e de remodelação, com detenção automática de spill em 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 uma matriz a uma TXLSXCell.Formula e chame TXLSXWorkbook.Recalculate; o resultado detém um spill retangular ancorado nessa célula, incluindo fórmulas como SEQUENCE(3,2), A1:A3*10, constantes de matriz e resultados 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 cresce ou encolhe o resultado, limpa apenas as seguidoras obsoletas detidas pela âncora e reconstrói as dependências quando a extensão muda; as referências a seguidoras recém-criadas e o operador de spill A1# usam a extensão atual

Valores existentes, fórmulas, texto formatado, outras matrizes, intervalos unidos, tabelas e limites da folha de cálculo obstruem um spill e produzem #SPILL!; os estilos em células de resto vazias continuam utilizáveis, e limpar uma obstrução permite que o recálculo seguinte tente de novo a âncora

Editar uma seguidora com um valor ou texto formatado destaca essa célula da âncora, para que o cálculo seguinte preserve a edição como obstrução; remover ou limpar a âncora liberta as seguidoras que detinha, enquanto ConvertFormulasToValues mantém os respetivos valores calculados como células comuns

A gravação em XLSX regista a extensão atual da matriz e os metadados, e o carregamento restaura a detenção das seguidoras em cache existentes antes do recálculo; as fórmulas de matriz que contêm erros mantêm a extensão quando os erros pertencem a elementos individuais

O SetArrayFormula mantém-se como ponto de entrada CSE explícito de intervalo fixo em ambos os motores de livro; a aritmética bruta de intervalos avalia elemento a elemento dentro desse intervalo, enquanto as 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 alias de armazenamento aceites para interseção implícita e referências de spill

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

A mutação de spill dinâmico corre em série mesmo quando há vários threads de cálculo configurados; a estabilização da extensão está limitada a 32 passagens, e as matrizes dinâmicas em cálculos iterativos circulares são rejeitadas em vez de tratadas como resultados escalares

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

Os seletores de linha e de coluna também podem ser matrizes, incluindo constantes, vetores calculados, valores de intervalos e bindings LET; orientações opostas de linha e coluna difundem-se para um produto cruzado retangular, enquanto orientações iguais selecionam posições em pares; as dimensões singleton difundem-se, e as posições em falta em dimensões desiguais devolvem valores #N/A individuais

Quando um dos seletores é uma matriz, um seletor zero ou omitido escolhe o primeiro membro desse eixo em vez de expandir uma linha ou coluna inteira; os seletores fracionários truncam em direção a zero, os seletores negativos devolvem valores #VALUE! individuais antes do truncamento, e os seletores além dos limites da origem devolvem valores #REF! individuais; as cadeias, os valores Boolean e os erros com tipo selecionados mantêm os respetivos tipos

O SORT e o UNIQUE aceitam intervalos, constantes e matrizes calculadas, incluindo resultados aninhados de FILTER, SEQUENCE e LET; a orientação por linha e coluna, a ordenação ascendente ou descendente, a ordenação por primeira ocorrência e a eliminação de duplicados de ocorrência única seguem o mesmo contrato para cada forma de origem

Os nomes definidos do livro podem fornecer origens de referência, escalares ou de matrizes calculadas; o ISREF(INDEX(...)) distingue um resultado de referência real de um valor calculado nomeado; os seletores escalares do INDEX e as opções numéricas do SORT truncam valores fracionários, e os 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 seletores difunde {1,3;7,9} num resultado de duas por duas; INDEX(SEQUENCE(3,3),{1;3},{1;3}) em vez disso devolve a coluna em pares {1;9}; os seletores de matriz produzem valores mesmo quando a origem é uma referência, enquanto os seletores de referência escalares preservam a identidade de referência

Estas expressões podem difundir-se e redimensionar-se em XLSX ou avaliar dentro de um destino CSE explícito; os erros de origem de matriz mantêm-se com tipo e um resultado vazio de ocorrência única devolve #CALC!; as saídas dos seletores consomem o orçamento de passos de avaliação, e os payloads combinados de origem, seletor e matriz de resultado são verificados contra o orçamento de memória de matrizes

O INDEX aceita um quarto argumento area_num explícito de 1 para uma origem calculada, e os seletores de linha, coluna e área podem difundir-se em conjunto sobre uma união de referências na mesma folha suportada; as referências reais de várias áreas mantêm a identidade através de nomes definidos locais e LET, enquanto o CHOOSE escalar mantém a referência selecionada, incluindo uma escolha noutra folha; os resultados de seletores de matriz são valores em vez de matrizes de referências aninhadas; consulte seleção de áreas do INDEX e identidade de referência para as regras de zero, omissão, coerção e erros

Para cálculo autónomo, o TXLSCalculator.OnGetSpillRange aceita um callback TXLSGetSpillRange que resolve os limites inclusivos atuais de uma âncora; os avaliadores suportados por livros instalam este callback automaticamente

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

O lxNormalizeStorageFormula normaliza a sintaxe de fórmulas escritas para OOXML, o lxTryStorageFormulaOperators traduz operadores de spill e de interseção implícita, e o lxApplyXlfnPrefix aplica os prefixos exigidos de funções futuras; o texto protegido e os separadores de linhas de matriz mantêm-se intactos, e atribuir uma fórmula mantém em memória o texto do chamador

Gravar não muda a expressão escrita em memória; reabrir fórmulas XLSX recém-escritas devolve a sintaxe de armazenamento canónica com argumentos separados por vírgulas e sem = inicial, em coerência com as importações nativas do Excel; o XML de fórmulas importado inalterado mantém o respetivo caminho de preservação existente

Composição de pesquisa, matricial e de remodelação

O TRANSPOSE aceita referências, constantes e matrizes calculadas preservando texto, valores Boolean e erros individuais; as células de origem em branco passam a zero numérico

O MMULT, o MDETERM e o MINVERSE aceitam matrizes calculadas e expressões aninhadas como MMULT(MUNIT(2),SEQUENCE(2,2)); as entradas das matrizes têm de ser numéricas, com texto, valores Boolean e brancos rejeitados em vez de coagidos, e os erros da origem mantêm os respetivos códigos

O CHOOSECOLS e o CHOOSEROWS aceitam vetores de seletores escalares ou unidimensionais, concatenam seletores pela ordem dos argumentos, preservam duplicados e contam os índices negativos a partir do fim; os seletores fracionários truncam em direção a zero, os seletores zero e fora do intervalo provocam rejeição, e as matrizes de seletores bidimensionais não são suportadas

O XLOOKUP, o XMATCH e o MATCH aceitam vetores de pesquisa calculados e pedidos de pesquisa com valor de matriz; as chaves têm de ocupar uma linha ou uma coluna, e as matrizes de retorno do XLOOKUP têm de se alinhar com esse eixo de pesquisa

Um XLOOKUP escalar pode devolver uma linha ou coluna correspondente inteira, incluindo erros com tipo; um pedido de pesquisa com valor de matriz mantém a sua própria forma e toma a primeira componente de cada fatia correspondente ou matriz de fallback

As pesquisas exatas saltam as entradas de erro no vetor de chaves; as chaves Boolean, numéricas e de texto mantêm-se distintas, enquanto os caminhos de referência escalares comuns mantêm o comportamento existente de streaming e de cache de recálculo; os modos de pesquisa binária continuam a exigir chaves corretamente ordenadas

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

O trabalho matricial, o varrimento de pesquisas, o percurso de seletores, a cópia e o preenchimento consomem o orçamento de passos de avaliação; os payloads de matrizes de entrada, de trabalho e de saída retidos em simultâneo são verificados contra o limite de memória de matrizes 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 com tipo

O #SPILL! e o #CALC! mantêm-se como erros de célula com tipo através do cálculo, da apresentação, da inspeção de caches e da reabertura em XLSX; a saída XLSX transporta os respetivos metadados de rich value, mantendo o fallback padrão de erro em cache para leitores que não conhecem essa extensão

Os resultados de texto de fórmulas, incluindo as seguidoras CSE e de matrizes dinâmicas, usam caches de cadeias literais para que o Excel as possa apresentar antes do recálculo; as células de valores simples continuam a usar cadeias partilhadas

A saída moderna de rich errors inclui a versão do livro e as declarações de funcionalidades de cálculo Rich Data exigidas pelo Excel para interpretar essas caches antes do recálculo; o calcId emitido é pelo menos 191029, preservando valores pedidos mais altos sem mudar a propriedade CalcId do livro em memória

Os metadados importados de células e valores, as estruturas de rich value não relacionadas e os buckets opacos mantêm as identidades originais quando novos buckets de erros são anexados; substituir uma célula de erro limpa os metadados obsoletos de erros com tipo ao gravar

O TXLSXRichErrorCodes é o tipo de matriz de inteiros usado para os buckets de rich errors descodificados; o código da aplicação lê os erros com tipo a partir do valor Variant da célula

O BIFF8 não consegue representar fielmente estes erros modernos nem os operadores de spill; o serializador Classic rejeita as representações modernas não suportadas em vez de atribuir um código de erro legado não relacionado

Preflight de conversão

O TXLSXWorkbook.GetConversionReport devolve um TXLSConversionReport pertencente ao chamador sem recalcular nem mudar o livro; 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; o HasLoss inclui entradas degradadas, abandonadas e não suportadas

O relatório inventaria as perdas de formato conhecidas, como VBA, proteção, vistas do livro, ligações, tabelas de consulta, comentários, ligações externas, Mapas XML, estrutura de tabelas, critérios de filtro, desenhos, caches de erros com tipo, validação ou sintaxe de fórmulas não suportadas, detenção de matrizes e partes de extensão opacas; descreve os caminhos de conversão implementados e não certifica todas as funcionalidades em todas as aplicações externas

O ODS mantém células de tabelas comuns, resultados de fórmulas em cache, texto e autores de anotações suportados, proteção de folhas de cálculo sem palavra-passe e filtros representáveis, perdendo o objeto de tabela do Excel, geometria de gráficos mais rica ou semântica de regras não suportada; um payload de preservação opaco de OOXML é comunicado como abandonado quando o destino não o consegue transportar

A facade XLSX comunica a saída BIFF8 como não suportada; use a API de livro Classic para fluxos de trabalho BIFF suportados; a versão 2.384.93 adiciona um backend XLSB de valores e estilos com limites que rejeita fórmulas, objetos de funcionalidades, metadados e definições de cálculo não representados, tanto em gravações verificadas como não verificadas

Gravação verificada

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

As sobrecargas para ficheiro e stream executam o preflight de perdas conhecidas antes de escrever; AllowLossy=False rejeita funcionalidades degradadas ou abandonadas com diagnósticos de conversão, enquanto AllowLossy=True aceita explicitamente essas perdas e continua a rejeitar conversões não suportadas

Um preflight rejeitado deixa os bytes de destino e a posição do stream inalterados; os pedidos com sucesso usam a transação de gravação existente e devolvem as mesmas convenções de estado de gravação do SaveAs

O SaveAs comum continua disponível com o comportamento existente; as aplicações que exigirem uma decisão explícita sobre perdas devem inspecionar o relatório e usar a gravação verificada

Formatos de modelo

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

O XLTX sem macros rejeita um livro com VBA mesmo quando a gravação verificada com perdas está ativada; um pacote XLTM pode ser emitido sem projeto VBA, e o HotXLS não cria código VBA

Fórmulas de validação ODS

A validação Boolean personalizada usa of:is-true-formula(...); os limites escalares suportados, as origens de listas, as referências A1 qualificadas, as cadeias e os separadores de argumentos traduzem-se para OpenFormula e reancoram-se no endereço da célula base de validação na importação

As expressões de validação estruturadas, externas ou tridimensionais não suportadas são omitidas juntamente com as respetivas referências de células, evitando definições de validação pendentes; o preflight de conversão comunica as regras omitidas

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

Os comentários de células comuns exportam como anotações OpenDocument com o respetivo texto e autor, incluindo notas vazias, tabulações, espaços e quebras de linha; as notas em células de resto ausentes e em coordenadas distantes usam sequências esparsas repetidas de linhas e colunas sem criar células de folha de cálculo

Um comentário na célula âncora de um intervalo unido mantém o respetivo endereço; uma nota numa célula coberta ou fora da grelha da folha de cálculo é comunicada como abandonada; o texto formatado dos comentários é achatado para o texto apresentado, e os relatórios de conversão identificam a perda de estilos de runs, dimensões personalizadas de caixa e apresentação sempre visível

A flag de proteção do OpenDocument e os estilos de células bloqueadas ou desbloqueadas suportados mantêm-se; o subconjunto de folhas de cálculo sem perdas não usa palavra-passe nem exceções de intervalos editáveis e permite apenas a seleção de células bloqueadas e desbloqueadas

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

Os hashes de palavras-passe do Excel, as definições modernas de palavras-passe, os intervalos editáveis e as permissões de ações fora desse subconjunto são comunicados como degradados, mantendo-se a flag de proteção; o conjunto de permissões predefinido abrangente do Excel também exige uma decisão explícita sobre perdas

A importação de OpenDocument mantém a flag de proteção e os estilos de bloqueio de células; os hashes de palavras-passe nativos não são convertidos em hashes do Excel, e os metadados importados de permissões não representados continuam a ser uma perda nomeada nos relatórios de conversão seguintes

A exportação de AutoFilter suporta seis operadores de comparação escalares, até duas condições escalares por coluna unidas com AND ou OR, e um AND entre colunas; as listas suportadas de seleção de valores simples e as seleções em branco não têm limite de dois valores e mantêm-se como metadados nativos de filtros

Os critérios escalares numéricos usam valores finitos invariantes; as seleções de texto preservam os respetivos carateres literais, incluindo carateres wildcard dentro das listas de seleção, enquanto as expressões wildcard em filtros personalizados, critérios Boolean ambíguos, grupos de datas, datas dinâmicas e filtros de cor e de ícones não têm conversão suportada equivalente

As expressões de filtro não suportadas são omitidas como expressão completa em vez de enfraquecer condições selecionadas; o intervalo do filtro mantém-se, e o relatório de conversão identifica os critérios omitidos

As gravações de streams ODS preparam o pacote concluído num ficheiro temporário registado antes de escrever na posição original do destino; os bytes de prefixo existentes e os offsets ZIP absolutos mantêm-se, incluindo posições além do fim original; o cancelamento ou uma exceção de callback de progresso antes do commit preserva os bytes, o tamanho e a posição do destino e liberta o ficheiro temporário; a notificação final de escrita mantém-se não cancelável

A importação de OpenDocument suporta as mesmas conjunções escalares e disjunções de texto na mesma coluna ou conjuntos de valores; o OR entre colunas, as expressões regulares, as comparações sensíveis a maiúsculas e minúsculas e os operadores nativos de filtros não suportados mantêm-se como perdas importadas explícitas

O TXLSXOdsImportLoss e o TXLSXOdsImportLosses descrevem as categorias privadas de proveniência da folha de cálculo; os relatórios de conversão usam ImportedOdsProtectionPassword, ImportedOdsProtectionOptions, ImportedOdsFilterCriteria e ImportedOdsCommentFormatting; sobrevivem à cópia de folhas de cálculo e aparecem tanto para destinos de conversão OpenDocument como Open XML

A conversão de filtros mantém os metadados e a visibilidade existente das linhas sem aplicar filtros nem recalcular células; as aplicações nativas mantêm a responsabilidade pelo seu próprio comportamento de filtragem e edição

Fluxos de trabalho relacionados