HotXLS Docs

Fidelidad de cálculo y conversión

Las matrices calculadas se componen a través de funciones de selección, ordenamiento, búsqueda, matriciales y de reconfiguración de forma, con propiedad automática de desbordamiento XLSX, destinos CSE explícitos y recursos de evaluación acotados

Matrices dinámicas y arreglos CSE explícitos

Asigne una expresión que produce arreglos a un TXLSXCell.Formula y llame a TXLSXWorkbook.Recalculate; el resultado posee un desbordamiento rectangular anclado en esa celda, incluidas fórmulas como SEQUENCE(3,2), A1:A3*10, constantes de arreglo y resultados de LET con valor de arreglo

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

El recálculo hace crecer o encoger el resultado, limpia únicamente los seguidores obsoletos de propiedad del ancla y reconstruye las dependencias cuando cambia la extensión; las referencias a los seguidores recién creados y el operador de desbordamiento A1# usan la extensión actual

Los valores existentes, las fórmulas, el texto enriquecido, otros arreglos, los rangos combinados, las tablas y los límites de la hoja obstruyen un desbordamiento y producen #SPILL!; los estilos en celdas que de resto están vacías siguen siendo utilizables, y limpiar una obstrucción permite que el siguiente recálculo reintente el ancla

Editar un seguidor con un valor o texto enriquecido desvincula esa celda del ancla, de modo que el siguiente cálculo preserva la edición como una obstrucción; eliminar o limpiar el ancla libera sus seguidores de su propiedad, mientras que ConvertFormulasToValues conserva sus valores calculados como celdas ordinarias

El guardado XLSX registra la extensión actual del arreglo y sus metadatos, y la carga restaura la propiedad de los seguidores existentes en caché antes del recálculo; las fórmulas de arreglo que contienen errores aún conservan su extensión cuando los errores pertenecen a elementos individuales

SetArrayFormula sigue siendo el punto de entrada CSE explícito de rango fijo en ambos motores de libros; la aritmética de rangos cruda evalúa elemento por elemento dentro de ese rango, mientras que las fórmulas escalares ordinarias conservan la intersección implícita

El operador unario @ intersecta una referencia con la celda de la fórmula y toma el primer elemento de un arreglo calculado; SINGLE y ANCHORARRAY son alias de almacenamiento aceptados para la intersección implícita y las referencias de desbordamiento

MAP acepta varios arreglos de entrada y una lista de parámetros LAMBDA correspondiente, propaga errores de elementos y rechaza los resultados de arreglos anidados con #CALC!; FILTER acepta arreglos calculados y máscaras de fila o columna, incluida la propagación de errores y un #CALC! de resultado vacío cuando no se aporta un fallback

La mutación de desbordamientos dinámicos se ejecuta en serie incluso cuando hay varios subprocesos de cálculo configurados; la estabilización de la extensión está acotada a 32 pasadas, y los arreglos dinámicos en cálculos iterativos circulares se rechazan en lugar de tratarse como resultados escalares

INDEX acepta referencias, constantes de arreglo y arreglos calculados; cuando ambos selectores son escalares, los selectores positivos de fila y columna devuelven un valor, un selector cero devuelve la fila o columna seleccionada, y dos selectores cero devuelven el arreglo completo; una fuente de referencia con selectores escalares conserva el comportamiento de referencia para consumidores como ROW y ISREF

Los selectores de fila y columna también pueden ser arreglos, incluidas constantes, vectores calculados, valores de rango y enlaces LET; las orientaciones opuestas de fila y columna se difunden a un producto cruzado rectangular, mientras que las orientaciones coincidentes seleccionan posiciones emparejadas; las dimensiones singleton se difunden, y las posiciones faltantes en dimensiones desiguales devuelven valores #N/A individuales

Cuando cualquiera de los selectores es un arreglo, un selector cero u omitido elige el primer miembro de ese eje en lugar de expandir una fila o columna completa; los selectores fraccionarios truncan hacia cero, los selectores negativos devuelven valores #VALUE! individuales antes del truncamiento, y los selectores fuera de los límites de la fuente devuelven valores #REF! individuales; las cadenas seleccionadas, los valores Boolean y los errores con tipo conservan sus tipos

SORT y UNIQUE aceptan rangos, constantes y arreglos calculados, incluidos resultados anidados de FILTER, SEQUENCE y LET; la orientación de fila y columna, el ordenamiento ascendente o descendente, el orden de primera aparición y la deduplicación de ocurrencias exactas siguen el mismo contrato para cada forma de fuente

Los nombres definidos por el libro pueden aportar fuentes de referencia, escalares o de arreglos calculados; ISREF(INDEX(...)) distingue un resultado de referencia real de un valor calculado con nombre; los selectores escalares de INDEX y las opciones numéricas de SORT truncan los valores fraccionarios, y los argumentos Boolean opcionales rechazan texto distinto de TRUE o 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 ejemplo de selectores desborda {1,3;7,9} en un resultado de dos por dos; INDEX(SEQUENCE(3,3),{1;3},{1;3}) en cambio devuelve la columna emparejada {1;9}; los selectores de arreglo producen valores incluso cuando la fuente es una referencia, mientras que los selectores escalares de referencia preservan la identidad de referencia

Estas expresiones pueden desbordarse y redimensionarse en XLSX o evaluarse dentro de un destino CSE explícito; los errores de fuente de arreglo permanecen con tipo y un resultado vacío de ocurrencias exactas devuelve #CALC!; las salidas de selectores consumen el presupuesto de pasos de evaluación, y las cargas combinadas de matriz fuente, selectores y resultado se verifican contra el presupuesto de memoria de arreglos

INDEX acepta un cuarto argumento area_num explícito de 1 para una fuente calculada, y los selectores de fila, columna y área pueden difundirse juntos sobre una unión de referencias de la misma hoja admitida; las referencias reales de varias áreas conservan la identidad a través de nombres definidos locales y LET, mientras que un CHOOSE escalar conserva la referencia seleccionada, incluida una elección en otra hoja; los resultados de selectores de arreglo son valores en lugar de arreglos de referencia anidados; consulte selección de áreas de INDEX e identidad de referencia para conocer las reglas de cero, omisión, coerción y errores

Para el cálculo independiente, TXLSCalculator.OnGetSpillRange acepta una devolución de llamada TXLSGetSpillRange que resuelve los límites inclusivos actuales de un ancla; los evaluadores respaldados por libro instalan esta devolución de llamada automáticamente

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

lxNormalizeStorageFormula normaliza la sintaxis de fórmulas escrita para OOXML, lxTryStorageFormulaOperators traduce los operadores de desbordamiento e intersección implícita, y lxApplyXlfnPrefix aplica los prefijos de función futura requeridos; los separadores protegidos de texto y filas de arreglo permanecen intactos, y asignar una fórmula conserva en memoria el texto del llamador

Guardar no cambia la expresión escrita en memoria; reabrir fórmulas XLSX recién escritas devuelve la sintaxis de almacenamiento canónica con argumentos separados por comas y sin = inicial, en consonancia con las importaciones nativas de Excel; el XML de fórmulas importadas sin cambios conserva su ruta de preservación existente

Composición de búsqueda, matrices y reconfiguración de forma

TRANSPOSE acepta referencias, constantes y arreglos calculados preservando texto, valores Boolean y errores individuales; las celdas de fuente en blanco se convierten en cero numérico

MMULT, MDETERM y MINVERSE aceptan matrices calculadas y expresiones anidadas como MMULT(MUNIT(2),SEQUENCE(2,2)); sus entradas de matriz deben ser numéricas, con rechazo del texto, los valores Boolean y los blancos en lugar de coercionarlos, y los errores de la fuente conservan sus códigos de error

CHOOSECOLS y CHOOSEROWS aceptan selectores escalares o vectores unidimensionales, concatenan los selectores en el orden de los argumentos, preservan los duplicados y cuentan los índices negativos desde el final; los selectores fraccionarios truncan hacia cero, los selectores cero y fuera de rango provocan rechazo, y las matrices de selectores bidimensionales no están admitidas

XLOOKUP, XMATCH y MATCH aceptan vectores de búsqueda calculados y solicitudes de búsqueda con valor de arreglo; las claves deben ocupar una fila o una columna, y los arreglos de retorno de XLOOKUP deben alinearse con ese eje de búsqueda

Un XLOOKUP escalar puede devolver una fila o columna completa coincidente, incluidos los errores con tipo; una solicitud de búsqueda con valor de arreglo conserva su propia forma y toma el primer componente de cada porción o arreglo de fallback coincidente

Los escaneos de búsqueda exacta omiten las entradas de error en el vector de claves; las claves Boolean, numéricas y de texto permanecen distintas, mientras que las rutas escalares ordinarias de referencia conservan su comportamiento existente de streaming y caché de recálculo; los modos de búsqueda binaria siguen exigiendo claves correctamente ordenadas

VSTACK, HSTACK, TAKE, DROP, TOROW, TOCOL, WRAPROWS, WRAPCOLS y EXPAND aceptan entradas calculadas y relleno con tipo; un resultado sin filas ni columnas devuelve #CALC!, y el ajuste con wrap exige una entrada unidimensional

El trabajo matricial, el escaneo de búsquedas, el recorrido de selectores, la copia y el relleno consumen el presupuesto de pasos de evaluación; las cargas de matrices de entrada, trabajo y salida retenidas simultáneamente se verifican contra el límite de memoria de arreglos configurado antes de la asignación

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;

Errores de cálculo modernos con tipo

#SPILL! y #CALC! permanecen como errores de celda con tipo durante el cálculo, la visualización, la inspección de caché y la reapertura XLSX; la salida XLSX lleva sus metadatos de valor enriquecido mientras conserva el fallback estándar de error en caché para los lectores que no entienden esa extensión

Los resultados de texto de fórmulas, incluidos los seguidores CSE y de matrices dinámicas, usan cachés de cadenas literales para que Excel pueda mostrarlos antes del recálculo; las celdas de valores simples siguen usando cadenas compartidas

La salida moderna de errores enriquecidos incluye la versión del libro y las declaraciones de la función de cálculo Rich Data que Excel necesita para interpretar esas cachés antes del recálculo; el calcId emitido es al menos 191029, preservando los valores solicitados mayores sin cambiar la propiedad CalcId del libro en memoria

Los metadatos importados de celdas y valores, las estructuras de valores enriquecidos no relacionadas y los contenedores opacos conservan sus identidades originales cuando se agregan nuevos contenedores de errores; reemplazar una celda de error limpia los metadatos obsoletos de errores con tipo al guardar

TXLSXRichErrorCodes es el tipo de arreglo de enteros usado para los contenedores de errores enriquecidos decodificados; el código de la aplicación lee los errores con tipo desde el valor Variant de la celda

BIFF8 no puede representar fielmente estos errores modernos ni los operadores de desbordamiento; el serializador Classic rechaza las representaciones modernas no admitidas en lugar de asignar un código de error heredado no relacionado

Verificación previa de conversión

TXLSXWorkbook.GetConversionReport devuelve un TXLSConversionReport de propiedad del llamador sin recalcular ni cambiar el libro; los tipos se declaran en 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 o xlsConversionExcelBinaryWorkbook
FidelityTXLSConversionFidelity: xlsConversionPreserved, xlsConversionDegraded, xlsConversionDropped o xlsConversionUnsupported
IssueTXLSConversionIssue expone Feature, Fidelity, SheetIndex, SheetName, Location y Message; HasLoss incluye las entradas degradadas, eliminadas y no admitidas

El reporte inventaría las pérdidas de formato conocidas, como VBA, protección, vistas del libro, conexiones, tablas de consulta, comentarios, vínculos externos, mapas XML, estructura de tablas, criterios de filtro, dibujos, cachés de errores con tipo, validación o sintaxis de fórmulas no admitidas, propiedad de arreglos y partes de extensión opacas; describe las rutas de conversión implementadas y no certifica cada función en cada aplicación externa

ODS conserva las celdas ordinarias de tablas, los resultados de fórmulas en caché, el texto y los autores de anotaciones admitidos, la protección de hojas sin contraseña y los filtros representables, mientras pierde el objeto de tabla de Excel, la geometría de gráficos más rica o la semántica de reglas no admitidas; una carga de preservación OOXML opaca se reporta como eliminada cuando el destino no puede transportarla

La fachada XLSX reporta la salida BIFF8 como no admitida; use la API de libros Classic para los flujos de trabajo BIFF admitidos; la versión 2.384.93 agrega un backend acotado de valores y estilos XLSB que rechaza las fórmulas, los objetos de funciones, los metadatos y la configuración de cálculo no representados tanto en guardados verificados como no verificados

Guardado verificado

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

Las sobrecargas de archivo y de stream ejecutan la verificación previa de pérdidas conocidas antes de escribir; AllowLossy=False rechaza las funciones degradadas o eliminadas con diagnósticos de conversión, mientras que AllowLossy=True acepta explícitamente esas pérdidas y aún rechaza las conversiones no admitidas

Una verificación previa rechazada deja los bytes de destino y la posición del stream sin cambios; las solicitudes exitosas usan la transacción de guardado existente y devuelven las mismas convenciones de estado de guardado que SaveAs

El SaveAs ordinario sigue disponible con su comportamiento existente; las aplicaciones que requieren una decisión explícita de pérdida deberían inspeccionar el reporte y usar el guardado verificado

Formatos de plantilla

xlsxOpenXMLTemplate selecciona XLTX sin macros, mientras que xlsxOpenXMLMacroEnabledTemplate selecciona XLTM y preserva un proyecto VBA existente; el formato es explícito y no se infiere de una extensión de archivo ni de una plantilla importada

El XLTX sin macros rechaza un libro con VBA incluso cuando el guardado verificado con pérdida está habilitado; un paquete XLTM puede emitirse sin proyecto VBA, y HotXLS no crea código VBA

Fórmulas de validación de ODS

La validación Boolean personalizada usa of:is-true-formula(...); los límites escalares admitidos, las fuentes de listas, las referencias A1 calificadas, las cadenas y los separadores de argumentos se traducen a OpenFormula y se rebasan contra la dirección de la celda base de validación en la importación

Las expresiones de validación estructuradas, externas o tridimensionales no admitidas se omiten junto con sus referencias de celda, evitando definiciones de validación colgantes; la verificación previa de conversión reporta las reglas omitidas

Anotaciones, protección y filtros de ODS

Los comentarios ordinarios de celdas se exportan como anotaciones OpenDocument con su texto y autor, incluidas las notas vacías, los tabuladores, los espacios y los saltos de línea; las notas en celdas que de resto están ausentes y en coordenadas lejanas usan ejecuciones dispersas repetidas de filas y columnas sin crear celdas de hoja de cálculo

Un comentario en la celda ancla de un rango combinado conserva su dirección; una nota en una celda cubierta o fuera de la cuadrícula de la hoja se reporta como eliminada; el texto enriquecido de comentarios se aplana a su texto mostrado, y los reportes de conversión identifican la pérdida del estilo de las ejecuciones, las dimensiones de cuadro personalizadas y la presentación siempre visible

El indicador protegido de OpenDocument y los estilos de celda bloqueada o desbloqueada admitidos se conservan; el subconjunto de hojas sin pérdida no usa contraseña ni excepciones de rangos editables y permite únicamente la selección de celdas bloqueadas y desbloqueadas

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

Los hashes de contraseñas de Excel, la configuración moderna de contraseñas, los rangos editables y los permisos de acciones fuera de ese subconjunto se reportan como degradados mientras el indicador protegido permanece; el amplio conjunto de permisos predeterminado de Excel también exige una decisión explícita de pérdida

La importación de OpenDocument conserva el indicador protegido y los estilos de bloqueo de celdas; los hashes nativos de contraseñas no se convierten en hashes de Excel, y los metadatos importados de permisos no representados siguen siendo una pérdida nombrada en los reportes de conversión posteriores

La exportación de AutoFilter admite seis operadores escalares de comparación, hasta dos condiciones escalares por columna unidas con AND u OR, y un AND entre columnas; las listas admitidas de selección de valores simples y las selecciones en blanco no tienen límite de dos valores y permanecen como metadatos de filtro nativos

Los criterios escalares numéricos usan valores finitos invariantes; las selecciones de texto preservan sus caracteres literales, incluidos los caracteres comodín dentro de las listas de selección, mientras que las expresiones comodín en filtros personalizados, los criterios Boolean ambiguos, los grupos de fechas, las fechas dinámicas y los filtros de color e icono no tienen una conversión admitida equivalente

Las expresiones de filtro no admitidas se omiten como una expresión completa en lugar de debilitar condiciones seleccionadas; el rango del filtro permanece, y el reporte de conversión identifica los criterios omitidos

Los guardados de streams ODS preparan el paquete completo en un archivo temporal registrado antes de escribir en la posición original del destino; los bytes de prefijo existentes y los desplazamientos ZIP absolutos se conservan, incluidas las posiciones más allá del final original; la cancelación o una excepción de la devolución de llamada de progreso antes de la confirmación preserva los bytes, el tamaño y la posición del destino y libera el archivo temporal; la notificación final de escritura permanece incancelable

La importación de OpenDocument admite las mismas conjunciones escalares y las mismas disyunciones de texto por columna o conjuntos de valores; el OR entre columnas, las expresiones regulares, las comparaciones sensibles a mayúsculas y los operadores de filtro nativos no admitidos siguen siendo pérdidas importadas explícitas

TXLSXOdsImportLoss y TXLSXOdsImportLosses describen las categorías de procedencia privadas de la hoja; los reportes de conversión usan ImportedOdsProtectionPassword, ImportedOdsProtectionOptions, ImportedOdsFilterCriteria y ImportedOdsCommentFormatting; sobreviven a la copia de hojas y aparecen tanto para los destinos de conversión OpenDocument como Open XML

La conversión de filtros conserva los metadatos y la visibilidad existente de filas sin aplicar filtros ni recalcular celdas; las aplicaciones nativas conservan la responsabilidad de su propio comportamiento de filtrado y edición

Flujos de trabajo relacionados