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 cells | WriteString, WriteRichString, WriteNumber, WriteBoolean, WriteDateTimey WriteError |
| Formula cells | WriteFormula, WriteFormulaNumber, WriteFormulaString, WriteFormulaBoolean, WriteFormulaDateTimey WriteFormulaError aceptan resultados en caché suministrados por el llamador |
| Shared strings | UseSharedStrings habilita la deduplicación de cadenas a nivel de paquete |
| Statistics | CellCount informa del número de celdas emitidas |
| Panes | FreezePanes(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)
| Cells | OnCell (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 framing | OnSheet (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 layout | OnDimension, 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 state | TXLSRowCursor.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