Documentación HotXLS

API de lectura y escritura directa

TXLSDirectReader y TXLSDirectWriter procesan paquetes XLSX sin mantener una cuadrícula completa de hoja de cálculo en memoria, por lo que las llamadas de API que describen una hoja deben realizarse antes o durante la fase de streaming correspondiente

Ciclo de vida del escritor y valores de celda

TXLSDirectWriter.BeginFile o BeginStream inicia un paquete, los métodos de hoja definen una hoja de cálculo a la vez y Finish confirma el paquete final

Scalar cellsWriteString, WriteRichString, WriteNumber, WriteBoolean, WriteDateTimey WriteError
Formula cellsWriteFormula, WriteFormulaNumber, WriteFormulaString, WriteFormulaBoolean, WriteFormulaDateTimey WriteFormulaError aceptan resultados en caché suministrados por el llamador
Shared stringsUseSharedStrings habilita la deduplicación de cadenas a nivel de paquete
StatisticsCellCount informa del número de celdas emitidas
PanesFreezePanes(ColSplit, RowSplit) escribe una división inmovilizada en la columna y fila basadas en uno indicadas

Las filas y columnas se basan en uno en la superficie pública del escritor y deben suministrarse en orden de hoja de cálculo hacia delante

Ciclo de vida del parche de hojas de cálculo

BeginPatch reemplaza una hoja de cálculo o inserta una nueva conservando las partes intactas del paquete. La inicialización fallida libera de inmediato el archivo de origen y el flujo de origen, ya sea por una hoja ausente, una parte requerida del paquete ausente, un archivo no válido o un fallo al crear el destino. Los archivos de origen y los registros temporales que posee quien llama siguen siendo responsabilidad de este; los manejadores liberados permiten eliminar o liberar dichos orígenes

Close y la destrucción liberan los manejadores del origen incluso cuando no hay un destino activo o la finalización del parche lanza una excepción. Un reemplazo de destino fallido conserva su salida preparada para inspección, y el escritor puede iniciar después un parche nuevo o una operación de archivo ordinaria tras un fallo de inicialización

Estilos reutilizables

AddCellStyle registra un identificador de estilo inmutable a nivel de paquete y CloneCellStyle deriva un nuevo identificador sin retener filas de la hoja de cálculo

Nombres definidos e hipervínculos

AddDefinedName, AddLocalDefinedName, AddDefinedRangey AddLocalDefinedRange añaden nombres locales de libro o de hoja antes de la finalización del paquete

AddHyperlink, AddHyperlinkRange, AddInternalHyperlinky AddInternalHyperlinkRange emiten relaciones externas o ubicaciones internas de hoja para una celda o un rango

Validación de datos

AddDataValidation y AddDataValidationSqRef exponen la superficie completa de la regla, mientras que AddListValidation, AddWholeNumberValidation, AddDecimalValidation, AddDateValidation, AddTimeValidation, AddTextLengthValidationy AddCustomValidation proporcionan asistentes tipados

Formato condicional

AddConditionalFormat, AddConditionalFormatExpression, AddConditionalFormatContainsText, AddConditionalFormatNotContainsText, AddConditionalFormatBeginsWith, AddConditionalFormatEndsWith, AddConditionalFormatTop10, AddConditionalFormatAboveAverage, AddConditionalFormatDuplicateValues, AddConditionalFormatUniqueValues, AddConditionalFormatContainsBlanks, AddConditionalFormatNotContainsBlanks, AddConditionalFormatContainsErrorsy AddConditionalFormatNotContainsErrors añaden reglas escalares

AddConditionalFormatDataBar, AddConditionalFormatColorScale2, AddConditionalFormatColorScale3y AddConditionalFormatIconSet añaden reglas visuales; ClearConditionalFormats elimina las reglas pendientes de la hoja actual

Autofiltro y tablas

AddAutoFilterValue, AddAutoFilterDateGroupy AddAutoFilterSortCondition configuran el filtro de la hoja de cálculo

AddTable crea una parte de tabla, y AddTableFilterValue, AddTableFilterDateGroupy AddTableSortCondition configuran su estado de filtro y ordenación

Protección y saltos de página

ProtectSheet, UnprotectSheet, AddProtectedRangey ClearProtectedRanges configuran la protección de la hoja de cálculo; ProtectWorkbook y UnprotectWorkbook configuran los bloqueos de estructura y ventana del libro

AddHorizontalPageBreak y AddVerticalPageBreak emiten saltos de página manuales para la hoja de cálculo actual

Diagnósticos de almacenamiento del lector directo

TXLSDirectReader.SharedStringMemoryLimit limita la memoria de cadenas compartidas decodificadas, SharedStringsOnDisk informa de la migración al almacenamiento indexado temporal, SharedStringCount informa del número de entradas cargadas y ParallelDiag expone diagnósticos acotados del analizador paralelo

Proyección del lector y estado de fórmulas

FirstRow, LastRow, IncludeColumny ClearColumnProjection empujan la selección de filas y columnas basadas en uno al analizador de la hoja de cálculo antes de la asignación de valores, fórmulas o texto enriquecido

IncludeFormulaText es true por defecto; deshabilitarlo conserva los valores cacheados, las coordenadas, los estilos y HasFormula , mientras que FormulaTextAvailable pasa a false y Formula queda vacío

Cursor de fila

TXLSRowCursor.Open acepta archivos o flujos XLS, XLSX, XLSM, ODS, CSV y TSV; la autodetección ZIP distingue paquetes ODS de libros Open XML antes de abrir una hoja

SelectSheet y SelectSheetByName eligen una hoja de cálculo; SheetCount, SheetNames, SheetIndex, RowIndexy Eof exponen el estado de recorrido, mientras que SharedStringMemoryLimit aplica la misma política de cadenas compartidas acotada que el lector directo

FirstRow, LastRow, IncludeColumny ClearColumnProjection usan los mismos filtros basados en uno en todos los formatos de cursor; las opciones de pasada no pueden cambiar entre FindFirst y EOF, pero vuelven a ser modificables después de EOF, de seleccionar otra hoja o de cerrar

Cada TXLSRowCursorCell informa de HasFormula de forma independiente de FormulaTextAvailable; el XLS clásico expone la presencia de fórmula y los resultados cacheados sin afirmar que hay texto de tokens disponible, mientras que IncludeFormulaText puede suprimir el texto de fórmulas XLSX y ODS antes de la acumulación

El recorrido ODS retiene una plantilla de fila física, recorta los bloques de filas repetidos al intervalo solicitado, salta directamente entre las columnas seleccionadas dentro de los tramos repetidos, avanza por las celdas cubiertas sin devolverlas como valores e informa de recuentos de repetición no válidos o limitados por la cuadrícula mediante OnSkippedRecord

State distingue xrcsClosed, xrcsBeforeFirst, xrcsActive, xrcsEof, xrcsCancelledy xrcsFaulted; Cancel es idempotente, invalida la fila actual y libera el flujo de la hoja de cálculo activa conservando el origen, de modo que una selección explícita de hoja pueda iniciar una nueva pasada

La sobrecarga de flujo usa xsoBorrowedpor defecto, restaura la posición inicial del llamador al cerrar y acepta xsoOwned para transferir la propiedad tras una apertura exitosa; las aperturas fallidas nunca consumen la propiedad del llamador

CurrentRowView toma prestada la matriz de la fila actual sin copiarla y comprueba una generación antes de cada acceso; avanzar, seleccionar, cancelar, cerrar o destruir el cursor invalida la vista y lanza EXLSRowCursorViewInvalidated en accesos posteriores

PeakRowBufferedBytes es una estimación monótona desde el Open más reciente de los registros de celdas, cargas gestionadas, texto enriquecido y datos del backend de formato retenidos para una fila lógica; está pensada para diagnósticos de regresión de memoria acotada más que para una contabilidad exacta del heap

SheetPassesStarted cuenta los inicios exitosos del backend de hojas de cálculo; inspeccionar nombres de hoja u omitir una hoja a través de la fachada de devoluciones de llamada no abre la parte de la hoja de cálculo

Adaptador de devolución de llamada hacia delante

TXLSForwardReader delega la descodificación de XLS, XLSX, ODS, CSV y TSV en TXLSRowCursor, convierte cada celda de la fila actual en una devolución de llamada OnCell y conserva los mismos contratos de límites de fila, proyección de columnas, estado de fórmulas, texto enriquecido, contraseña, registros omitidos, posición de flujo y búfer acotado

PeakRowBufferedBytes y SheetPassesStarted exponen los diagnósticos compartidos del cursor en la superficie de devoluciones de llamada, mientras que el XLS clásico retiene además ClassicBytesRead y ClassicPeakBufferedBytes

Eventos del lector y tipos de registro

El lector y el cursor de fila exponen devoluciones de llamada opcionales y registros planos, todos declarados en lxDirectRead. Cada devolución de llamada sigue la misma forma: el registro describe un elemento transmitido y establecer Abort detiene el escaneo (los eventos de hoja aceptan además SkipSheet)

CellsOnCell (tipo TXLSDirectCellEvent) entrega una TXLSDirectCell por celda cuyo Kind (TXLSDirectCellKind: xdkEmpty, xdkNumber, xdkString, xdkBoolean, xdkDate, xdkError) selecciona el campo de valor poblado; el texto enriquecido viaja como un TXLSDirectRichText que contiene entradas TXLSDirectRichTextRun , cada una con un TXLSDirectRichColor (de tipo TXLSDirectRichColorKind), TXLSDirectRichUnderliney TXLSDirectRichVertAlign, más datos opcionales TXLSDirectPhoneticProperties y TXLSDirectPhoneticRun data
Sheet framingOnSheet (TXLSDirectSheetEvent) puede omitir una hoja de cálculo completa antes de que se analicen sus celdas; OnSkippedRecord (TXLSDirectSkippedEvent) informa de contenido mal formado o truncado con el identificador de registro y el motivo
Sheet layoutOnDimension, OnSheetFormat, OnColumn, OnRow, OnMergey OnPane entregan los registros TXLSDirectDimension, TXLSDirectSheetFormat, TXLSDirectColumn, TXLSDirectRow, TXLSDirectMergey TXLSDirectPane ; el estado de paneles usa TXLSDirectPaneState (xdpsSplit, xdpsFrozen, xdpsFrozenSplit, xdpsUnknown)
Cursor stateTXLSRowCursor.State es un TXLSRowCursorState (xrcsClosed, xrcsBeforeFirst, xrcsActive, xrcsEof, xrcsCancelled, xrcsFaulted); la sobrecarga de flujo de Open toma un TXLSStreamOwnership (xsoBorrowed por defecto, xsoOwned para transferir la propiedad), y CurrentRowView devuelve una vista prestada IXLSRowCursorView cuya propiedad Valid protege el acceso y cuyo ValueByCol lee una celda de la fila prestada sin copiar; la vista se invalida cuando el cursor avanza

Tipos de parámetros y estilos del escritor

Los asistentes tipados del escritor (lxDirectWrite) aceptan registros y enumeraciones para que las llamadas no asignen memoria: WriteRichString toma un TXLSDirectRichText; AddCellStyle construye un estilo a nivel de paquete a partir de un TXLSDirectCellStyle cuya alineación (TXLSDirectHorizontalAlignment, TXLSDirectVerticalAlignment), subrayado (TXLSDirectUnderline), patrón de relleno (TXLSDirectFillPattern) y lados del borde (TXLSDirectStyleBorder con TXLSDirectBorderSide) reflejan el modelo de estilos de OOXML. Los formatos condicionales pasan un TXLSDirectConditionalFormat con TXLSDirectCfKind / TXLSDirectCfOperator / TXLSDirectCfValue / TXLSDirectCfValueKind y TXLSDirectIconSetType, la validación de datos un TXLSDirectDataValidation, las tablas un TXLSDirectTable, los hipervínculos un TXLSDirectHyperlink, los nombres definidos un TXLSDirectDefinedName, los estilos diferenciales un TXLSDirectDxfStyle, los comentarios un TXLSDirectComment, las imágenes un TXLSDirectImage con TXLSDirectImageFormat, los gráficos un TXLSDirectChart con TXLSDirectChartSeries y TXLSDirectChartType, las combinaciones un TXLSDirectMergeRange, los rangos protegidos un TXLSDirectProtectedRange, la protección de hoja un conjunto TXLSDirectSheetProtectionOptions de TXLSDirectSheetProtectionOption, el estado de ordenación de autofiltro un TXLSDirectSortState, las opciones de columna un TXLSDirectColumnOptiony la geometría de página un registro TXLSDirectPageMargins record

TXLSDirectNeedRow = procedure(Sender: TObject; RowIndex: Integer;
  var Eof: Boolean) of object;

function XLSDirectColName(Col: Integer): WideString;
function XLSDirectParseRef(const Ref: WideString;
  out Col, Row: Integer): Boolean;
function XLSDirectPasswordHash(const Password: WideString): WideString;
      

OnNeedRow extrae filas de la aplicación: el proveedor escribe las celdas de la fila directamente a través del escritor y deja Eof = False, o declara el agotamiento con Eof = True para detener el bucle. Los asistentes convierten entre coordenadas y primitivas de protección: XLSDirectColName representa una columna basada en cero como sus letras A1, XLSDirectParseRef analiza una referencia de celda A1 y XLSDirectPasswordHash calcula el hash de contraseña heredado que almacenan los registros de protección de hoja

Véase también