Documentación de HotXLS

API de infraestructura del libro

Estos miembros públicos admiten integraciones que inspeccionan la E/S, implementan serializadores o coordinan el cálculo entre libros, con los miembros del libro declarados en lxHandleX y el grafo del workspace declarado en lxDepGraph

Las aplicaciones ordinarias deberían usar primero el formato de celdas, SaveAs, Recalculate y las API de workspace de libros externos; el registro en el pool de estilos y la planificación del grafo exigen las mismas convenciones de índice y ciclo de vida que los serializadores y el motor de cálculo de la biblioteca

Observación y recuperación de E/S

TXLSXWorkbook.OnReadCell recibe el índice de hoja, la fila, la columna, el valor almacenado y la fórmula de cada celda materializada durante el análisis XLSX, con una marca Cancel modificable; TXLSXWorkbook.OnWriteCell recibe un valor de salida modificable más las marcas Skip y Cancel antes de serializar una celda, de modo que un host puede transformar u omitir la salida sin reemplazar la API del libro por la API de stream directa

Ambos callbacks usan coordenadas de hoja y celda de base uno, y sus tipos declarados son TXLSXCellReadEvent y TXLSXCellWriteEvent; los callbacks se ejecutan dentro de la operación de E/S activa, así que evita iniciar otra operación sobre el mismo libro desde un callback

TXLSXWorkbook.RecoveryMode vale False por defecto y permite que los fallos admitidos de análisis del XML de hojas se conviertan en diagnósticos de advertencia mientras la apertura continúa, dejando potencialmente contenidos de hoja recuperados solo parcialmente; no garantiza la recuperación de un paquete ZIP ilegible, así que examina los diagnósticos y los datos recuperados antes de guardar

TXLSXWorkbook.FireProgress distribuye una fase, un estado, un recuento actual y un recuento total a los manejadores de progreso asignados, con el manejador heredado recibiendo notificaciones de trabajo y el extendido recibiendo todos los estados; un manejador extendido puede pedir la cancelación, excepto que la notificación de fin de escritura no puede revertir una salida ya confirmada

TXLSXWorkbook.AddDiagnostic añade y devuelve un diagnóstico propiedad del libro, registra el código, la severidad, la operación, el mensaje, el código nativo, el contexto de hoja y el nombre de parte del paquete suministrados, copia el nombre de la clase de la excepción cuando se aporta una, e invoca OnDiagnostic; no toma posesión de la excepción ni la lanza

function TXLSXWorkbook.AddDiagnostic(ACode: Integer;
  ASeverity: TXLSDiagnosticSeverity; AOperation: TXLSDiagnosticOperation;
  const AMessage: WideString; ANativeCode, ASheetIndex: Integer;
  const ASheetName, APartName: WideString;
  AException: Exception): TXLSDiagnostic;

Políticas de salida e inspección del paquete guardado

TXLSXWorkbook.CSVEmitFormulas vale False por defecto y cambia la salida CSV de los resultados de fórmula al texto de la fórmula para las celdas con fórmula; la salida de resultados intenta evaluar la fórmula y recurre al texto o valor almacenado de la celda cuando la evaluación falla; TXLSXWorkbook.CSVQuoteAllStrings también vale False por defecto y fuerza comillas alrededor de los campos de texto, mientras que los números, fechas, Booleans, Null y Empty conservan las reglas normales de entrecomillado

TXLSXWorkbook.LastSaveUsedStreaming informa de si el guardado preparado más reciente usó streaming de hojas, mientras que TXLSXWorkbook.LastSavePeakRowXmlChars informa del mayor fragmento de XML de fila en búfer, TXLSXWorkbook.LastSaveBufferedWorksheetXmlChars informa del XML de hoja combinado en búfer, y TXLSXWorkbook.LastSavePeakAuxiliaryXmlChars informa del mayor fragmento de XML auxiliar rastreado; son recuentos de caracteres de la instrumentación del serializador, no mediciones de la memoria total del proceso, y la salida ODS no usa la ruta de streaming de hojas XLSX

TXLSXWorkbook.TryCopyPreservedPart intenta copiar una parte de origen preservada elegible, incluida su representación comprimida, en un TZipArchive de destino aportado por quien llama, devolviendo True cuando se copia o False cuando se requiere la serialización normal; el origen debe seguir disponible desde una apertura respaldada por archivo, y las partes ausentes o descartadas explícitamente no pueden copiarse

Quien llama es propietario del archivo de destino y debe terminarlo con normalidad; un fallo de rollback de la copia comprimida puede seguir lanzando una excepción, y este helper ni construye un paquete de libro completo ni actualiza sus relaciones ni sus tipos de contenido

Cifrado y metadatos del libro

TXLSXWorkbook.SaveAsEncryptedAgile acepta un nombre de archivo y una contraseña no vacía, serializa el paquete XLSX en memoria y escribe el contenedor cifrado Agile, devolviendo 1 en caso de éxito o -1 en un fallo notificado; el VerifyEncryptedSave opcional realiza una comprobación de reapertura después de escribir, y el método necesita memoria para el paquete sin cifrar además de para sus bytes serializados

TXLSXWorkbook.VerifyEncryptedFile abre el archivo y la contraseña suministrados en un libro temporal y devuelve True solo cuando esa apertura tiene éxito, convirtiendo las excepciones en False; esto comprueba la legibilidad en lugar de comparar cada celda con el libro actual, y sigue el comportamiento normal de OpenEncrypted para una entrada XLSX sin cifrar

TXLSXWorkbook.DocSecurity almacena el campo de bits extendido de propiedades del documento: 1 denota protección por contraseña, 2 recomendación de solo lectura, 4 estado de solo lectura forzado y 8 bloqueo de anotaciones; estos bits de metadatos no aplican por sí mismos cifrado ni restricciones de acceso

TXLSXWorkbook.DocPropsTouched es la marca de solo lectura que usan los escritores de propiedades del documento para decidir si las propiedades rastreadas se han configurado; los setters de propiedades rastreadas como Title la activan, mientras que los metadatos extendidos asignados directamente no la activan automáticamente

TXLSXWorkbook.WorkbookProtectHash expone el hash de protección de libro heredado cargado o generado, normalmente cuatro dígitos hexadecimales o una cadena vacía cuando no existe hash de contraseña; usa los métodos de protección del libro para cambiar la protección en lugar de asignar este valor de solo lectura, y mantén la protección de la estructura del libro separada del almacenamiento cifrado de archivos

TXLSXWorkbook.ThemeMajorFont y TXLSXWorkbook.ThemeMinorFont exponen las tipografías de encabezado y cuerpo cargadas del tema y sobrescriben los nombres cuando se genera el tema Office por defecto; un tema preservado literal tiene prioridad sobre estas configuraciones de nombre de fuente

Estilos de tabla y pools de estilos del serializador

TXLSXWorkbook.DefaultTableStyleName y TXLSXWorkbook.DefaultPivotStyleName van y vuelven con los nombres por defecto almacenados en la tabla de estilos para las tablas de Excel y las tablas dinámicas recién insertadas; asignarlos no reformatea directamente cada objeto existente

TXLSXWorkbook.ResolveTableStyle devuelve un estilo personalizado propiedad del libro por nombre; si no, resuelve y almacena en caché los integrados admitidos desde TableStyleLight1 hasta TableStyleLight21, de TableStyleMedium1 a TableStyleMedium28 o de TableStyleDark1 a TableStyleDark11, y devuelve nil para un nombre desconocido; no liberes el estilo devuelto

TXLSXWorkbook.FastStyleAppend vale False por defecto y permite que la creación masiva se salte los escaneos de deduplicación en los pools de estilos y el registro ordinario de estilos compuestos, cambiando una tabla de estilos mayor por una inserción más rápida cuando se crean muchos estilos distintos

function TXLSXWorkbook.RegisterCompositeXf(
  AFont, AFill, ABorder, ANumFmt, AAlign, AProt: Integer): Integer; overload;
function TXLSXWorkbook.RegisterCompositeXf(
  AFont, AFill, ABorder, ANumFmt, AAlign, AProt,
  ABuiltinNumFmt: Integer): Integer; overload;
function TXLSXWorkbook.RegisterLinkedCompositeXf(
  AFont, AFill, ABorder, ANumFmt, AAlign, AProt,
  AParentXfId: Integer; ALinkedParts: TXLSXFormatParts): Integer;

TXLSXWorkbook.RegisterCompositeXf registra los índices combinados de fuente, relleno, borde, formato numérico, alineación y protección, y devuelve el índice absoluto de cellXfs, no una ranura del pool de compuestos; la sobrecarga de siete argumentos acepta un ID de formato numérico integrado que tiene prioridad sobre el índice de formato personalizado suministrado, con cero significando ninguna anulación

TXLSXWorkbook.RegisterLinkedCompositeXf registra además el ID del style-XF padre y las partes de formato enlazadas a ese padre, reteniendo entradas separadas para diferentes combinaciones de padre o enlace; también devuelve un índice absoluto de cellXfs

TXLSXWorkbook.CompositeXfBase devuelve el primer índice absoluto de compuesto, calculado a partir de los pools de estilos unidimensionales actuales, mientras que TXLSXWorkbook.CompositeXfCount cuenta las entradas compuestas registradas; una ranura del pool usada por GetCompositeXf es el índice absoluto menos la base, y la base puede cambiar cuando esos pools crecen, así que estos valores pertenecen al estado de serialización actual

TXLSXWorkbook.RegisterCondDxf registra una referencia TXLSDxfStyle prestada y devuelve su ID de estilo diferencial de base cero, reutilizando un ID existente para la misma referencia de objeto; mantén vivo el objeto mientras la serialización lo use

TXLSXWorkbook.ResetCondDxfs limpia el recuento del registro activo sin liberar los estilos prestados, y TXLSXWorkbook.CondDxfCount informa de ese recuento; la preparación del guardado reconstruye este registro, así que no persistas estos IDs de forma independiente del paquete que se está escribiendo

TXLSXWorkbook.PivotCaches es la colección TXLSPivotCaches propiedad del libro compartida por las tablas dinámicas de las hojas; AddPivotTable reutiliza una caché de origen coincidente o crea una, y RefreshPivotCache actualiza la caché identificada preservando las identidades de miembros admitidas

Integración del cálculo

TXLSXWorkbook.RecalcThreads vale cero por defecto, con cero o uno usando el recálculo en serie y los valores mayores activando la evaluación por workers de fronteras de fórmula independientes; los libros con arrays dinámicos usan un pase en serie sin importar esta opción, los nodos de tablas de datos what-if siguen en serie, y los manejadores de funciones de usuario que usen los workers deben ser thread-safe

TXLSXWorkbook.SolveCycleIteratively es un punto de entrada avanzado que normalmente invoca Recalculate cuando la iteración está activada, consumiendo índices de nodos del grafo de dependencias actual de ese libro y evaluando los nodos de ciclo en la TList suministrada; los índices de un grafo de workspace u otro libro no son intercambiables

El solver usa IterateCount y IterateDelta, retiene los valores finales incluso si se alcanza el límite de iteración, y devuelve lxOk sin certificar la convergencia; los miembros de ciclo de arrays dinámicos devuelven lxErrorCircumRef, y el argumento CycleCount de la firma no reemplaza la clasificación de ciclos en los nodos del grafo

Construcción del grafo de dependencias del workspace

TXLSWorkspaceDepGraph almacena dependencias de fórmulas entre identidades de libro e identidades de hoja aportadas por quien llama, sin abrir libros ni evaluar fórmulas; construye un grafo a partir de las fórmulas actuales y las referencias resueltas, y después reconstrúyelo tras cambios estructurales o de fórmulas que invaliden esas referencias

function TXLSWorkspaceDepGraph.AddNode(
  const AWorkbookIdentity, ASheetName: WideString;
  ASheetIndex, ARow, ACol, AOutRow2, AOutCol2: Integer;
  AVolatile: Boolean; AReferences: TXLSWorkspaceDepReferenceList;
  ARefUnstable: Boolean = False): Integer;
procedure TXLSWorkspaceDepGraph.DirtyTopoOrder(AOrder: TList;
  out ACycleNodeCount, ABlockedNodeCount: Integer);

TXLSWorkspaceDepGraph.AddNode añade un nodo de fórmula y devuelve su índice de nodo de base cero, copiando las referencias suministradas en lugar de ser propietario de su lista; los índices de hoja son de base uno, mientras que las coordenadas de fila y columna, incluida la esquina inferior derecha del rectángulo de salida inclusivo, son coordenadas de la calculadora de base cero

TXLSWorkspaceDepReferenceList.Add añade un registro de referencia resuelta de celda, rango o nombre definido, TXLSWorkspaceDepReferenceList.Items lee esos registros por índice de base cero, y TXLSWorkspaceDepReferenceList.Clear restablece la lista para reutilizarla; quien llama es propietario de esta lista de entrada y puede limpiarla o liberarla después de que AddNode haya copiado sus entradas

TXLSWorkspaceDepGraph.BuildEdges resuelve las referencias almacenadas de celdas y rangos contra los rectángulos de salida de las fórmulas; las referencias marcadas como LookupScan propagan la suciedad pero no imponen orden de evaluación ni participan en la detección de ciclos

TXLSWorkspaceDepGraph.NodeIndexOf resuelve un libro, hoja, fila y columna a un índice de nodo de base cero o -1 cuando está ausente, usando el nombre de la hoja cuando está disponible y el índice de hoja declarado como respaldo

TXLSWorkspaceDepGraph.FindDependentsOfDefinedName limpia una TList no nil suministrada y la rellena con los índices de nodo que se refieren directamente al símbolo nombrado en el libro y ámbito especificados, con un índice de ámbito negativo que coincide con todos los ámbitos; las entradas se codifican como Pointer(NativeInt(NodeIndex)), así que una entrada nil de la lista puede representar el nodo cero

Generaciones dirty del workspace y orden de evaluación

TXLSWorkspaceDepGraph.BeginDirtyGeneration inicia una nueva generación, restablece el recuento activo de nodos dirty y las marcas de bloqueo por ciclo, y desactiva las marcas dirty anteriores; llámalo antes de marcar los nodos para un nuevo pase de recálculo

TXLSWorkspaceDepGraph.MarkAllDirty marca cada nodo de la generación actual; TXLSWorkspaceDepGraph.MarkWorkbookDirty siembra los nodos del libro identificado y los nodos que se refieren a él, y después propaga a los dependientes, mientras que TXLSWorkspaceDepGraph.MarkVolatileDirty siembra los nodos volátiles y TXLSWorkspaceDepGraph.MarkCyclesDirty siembra los componentes de ciclo detectados, propagando también su estado dirty

TXLSWorkspaceDepGraph.IsNodeDirty informa de si un nodo válido lleva la marca de la generación actual y devuelve False para un índice no válido; TXLSWorkspaceDepGraph.DirtyGeneration expone esa marca y TXLSWorkspaceDepGraph.DirtyNodeCount cuenta los nodos marcados en la generación activa

TXLSWorkspaceDepGraph.DirtyTopoOrder exige una TList no nil propiedad de quien llama, la limpia y la rellena con los índices de nodos dirty en orden de dependencia, excluyendo los nodos de ciclo dirty y los nodos bloqueados por esos ciclos; sus dos recuentos de salida distinguen a los miembros de ciclo de los nodos posteriores bloqueados, y las entradas de la lista usan la misma convención de índice de base cero codificado en puntero

TXLSWorkspaceDepGraph.HasRefUnstable informa de si algún nodo se añadió con la marca de referencia inestable, lo que permite a quien llama no depender de una planificación estática obsoleta cuando las referencias de fórmula pueden cambiar en el momento de la evaluación; el grafo no resuelve por sí mismo esas referencias cambiantes

Inspección del grafo del workspace

TXLSWorkspaceDepGraph.NodeCount cuenta los nodos de fórmula, TXLSWorkspaceDepGraph.ReferenceCount cuenta las referencias copiadas, y TXLSWorkspaceDepGraph.EdgeCount informa de las aristas de dependencia construidas; llama a BuildEdges antes de consumir estadísticas de aristas

TXLSWorkspaceDepGraph.WorkbookCount cuenta las identidades de libro internadas, incluidas las identidades introducidas por referencias, y TXLSWorkspaceDepGraph.WorkbookIdentities las enumera por índice de base cero; estas cadenas de identidad son claves del grafo, no evidencia de que se cargara un archivo externo

TXLSWorkspaceDepGraph.ComponentCount informa del número de componentes fuertemente conexos tras la construcción de componentes, que la disparan MarkCyclesDirty, DirtyTopoOrder o el acceso a componentes; cada registro Components aporta NodeStart, NodeCount e IsCycle

TXLSWorkspaceDepGraph.ComponentNodes expone el array aplanado de índices de nodo de base cero para esos componentes, indexado desde el NodeStart de un componente hasta NodeStart + NodeCount - 1; los recuentos y los registros indexados describen el grafo actual y deben volver a obtenerse tras la reconstrucción del grafo

Continúa con los miembros adicionales de la fachada XLSX y la visión general de la fachada XLSX para los puntos de entrada ordinarios del libro