Documentación HotXLS

API de lector y escritor directos

TXLSDirectReader y TXLSDirectWriter procesan paquetes XLSX sin mantener una cuadrícula completa de hoja de cálculo en memoria, por lo que las llamadas a la 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 de base 1 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 parcheo de hojas

BeginPatch reemplaza una hoja de cálculo o inserta una nueva conservando las partes del paquete intactas. Una inicialización fallida libera de inmediato el archivo de origen y el flujo de origen, ya sea por una hoja faltante, una parte requerida del paquete faltante, un archivo no válido o un fallo al crear el destino. Los archivos de origen y los registros temporales que pertenecen al llamador siguen siendo responsabilidad del llamador; los manejadores liberados permiten que esas fuentes se eliminen o se liberen

Close y la destrucción liberan los manejadores de las fuentes incluso cuando no hay un destino activo o la finalización del parcheo lanza una excepción. Un reemplazo del destino sin éxito conserva su salida preparada para inspección, y el escritor puede iniciar un parcheo posterior o una operación de archivo común después de 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 conservar filas de la hoja de cálculo

Nombres definidos e hipervínculos

AddDefinedName, AddLocalDefinedName, AddDefinedRangey AddLocalDefinedRange agregan nombres de libro o locales a la 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 reglas, mientras AddListValidation, AddWholeNumberValidation, AddDecimalValidation, AddDateValidation, AddTimeValidation, AddTextLengthValidationy AddCustomValidation proporcionan asistentes con tipos

Formato condicional

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

AddConditionalFormatDataBar, AddConditionalFormatColorScale2, AddConditionalFormatColorScale3y AddConditionalFormatIconSet agregan 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 a 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 de columnas de base 1 dentro del analizador de la hoja de cálculo, antes de la asignación de valores, fórmulas o texto enriquecido

IncludeFormulaText es verdadero de forma predeterminada; deshabilitarlo conserva los valores en caché, las coordenadas, los estilos y HasFormula , mientras FormulaTextAvailable pasa a falso y Formula permanece vacío

Cursor de filas

TXLSRowCursor.Open acepta archivos o flujos XLS, XLSX, XLSM, ODS, CSV y TSV; la autodetección ZIP distingue los paquetes ODS de los libros de trabajo 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 SharedStringMemoryLimit aplica la misma política acotada de cadenas compartidas que el lector directo

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

Cada TXLSRowCursorCell informa HasFormula de forma independiente de FormulaTextAvailable; el XLS clásico expone la presencia de fórmulas y los resultados en caché sin afirmar tener el texto de tokens no 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 repetidas 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 los conteos 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 xsoBorrowedde forma predeterminada, restaura la posición inicial del llamador al cerrar, y acepta xsoOwned para transferir la propiedad después de una apertura exitosa; las aperturas fallidas nunca consumen la propiedad del llamador

CurrentRowView toma prestado el arreglo de la fila actual sin copiarlo 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 útiles gestionadas, texto enriquecido y datos del backend de formato retenidos para una fila lógica; está pensado para diagnósticos de regresión de memoria acotada, no como contabilidad exacta del heap

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

Adaptador de callback de solo avance

TXLSForwardReader delega la decodificación de XLS, XLSX, ODS, CSV y TSV en TXLSRowCursor, convierte cada celda de la fila actual en un callback OnCell , y preserva 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 callbacks, mientras que el XLS clásico conserva además ClassicBytesRead y ClassicPeakBufferedBytes

Eventos del lector y tipos de registro

El lector y el cursor de filas exponen callbacks opcionales y registros sencillos, todos declarados en lxDirectRead. Cada callback sigue la misma forma: el registro describe un elemento transmitido, y asignar Abort detiene el escaneo (los eventos de hoja aceptan además SkipSheet)

CellsOnCell (tipo TXLSDirectCellEvent) entrega un 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 (tipo TXLSDirectRichColorKind), TXLSDirectRichUnderliney TXLSDirectRichVertAlign, más datos opcionales de 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 id 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 recibe un TXLSStreamOwnership (xsoBorrowed de forma predeterminada, 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 con tipos del escritor (lxDirectWrite) aceptan registros y enums para que las llamadas no asignen memoria: WriteRichString recibe 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 de 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 del autofiltro un TXLSDirectSortState, las opciones de columna un TXLSDirectColumnOption, y 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 de base 0 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