Documentación de HotXLS

Miembros adicionales de la API de la biblioteca

Esta página completa la referencia de los tipos públicos que dan soporte a las API principales de libros de trabajo, hojas de cálculo, renderizado, importación, diagnósticos y visor, pero que no requieren una guía separada orientada a tareas

Filtrado y formato condicional

TXLSAutofilterAdd, AddAutofilterData, AssignFrom, Clear y ParseAutofilterData editan o importan la definición del filtro; SetRangeBounds(ARow1, ACol1, ARow2, ACol2) restaura límites inclusivos de base 1 sin eliminar los criterios cargados ni las formas de dropdown, e ignora límites no positivos o invertidos y un conteo de columnas que difiere de los campos cargados; Defined, FirstRow, FirstCol, LastCol, LastRow y FieldCount exponen sus límites activos y el número de columnas filtradas
TXLSAutofilterItemShape expone el dibujo del botón de filtro asociado al elemento, y el criterio de filtro cargado está disponible como un registro de operando TXLSAutofilterDOPER — DataType selecciona la forma del operando y grbitSgn lleva los bits de signo y banderas — para inspección o edición de round-trip
TXLSDataBarSpecAxisColor, AxisIsThemeColor, AxisThemeColorId, AxisThemeColorTint y ClearAxisThemeColor controlan el eje; Direction, GradientFill, NegativeBarBorderColorSameAsPositive, NegativeBarColor, NegativeBarColorSameAsPositive y NegativeBorderColor controlan la apariencia de la barra; IsIndexedColor, IndexedColorIndex y ClearIndexedColor gestionan el color de barra por índice de paleta
TXLSIconSetSpecThresholdEqualsInclude selecciona comparación inclusiva o exclusiva para cada umbral de icono
TXLSCfValueIsIndexedColor e IndexedColorIndex informan un color de umbral almacenado como índice de paleta heredado, ClearIndexedColor elimina de nuevo esa forma, y los colores de tema o literales siguen disponibles a través de los accesores existentes

TXLSCfValue, TXLSDataBarSpec, TXLSColorScaleSpec, TXLSIconSetSpec y TXLSDxfStyle aceptan AttachWriteGuardOwner, que vincula el objeto de regla a su libro de trabajo propietario para que las ediciones adquieran un write guard automáticamente; el propietario implementa TXLSCondFormatWriteGuardOwner, cuyo único método AcquireWriteGuard entrega a la regla el write guard del libro de trabajo. TXLSDxfStyle agrega FontColorIndex con FontColorIsIndexed más los pares FillFgColorIndex / FillFgColorIsIndexed y FillBgColorIndex / FillBgColorIsIndexed para colores de reglas por índice de paleta, y las invalidaciones de fuente diferencial FontName, FontSize y FontScheme (cadena vacía, un tamaño en puntos o una ranura de fuente del tema como major / minor) junto a los miembros existentes de negrita, cursiva, subrayado y color; cada asignación adquiere el write guard y marca la regla como dirty para su re-emisión

TXLSConnections, TXLSDataTables y TXLSQueryTables exponen OnAcquireWriteGuard (tipos TXLSConnectionAcquireWriteGuard, TXLSDataTableAcquireWriteGuard y TXLSQueryTableAcquireWriteGuard), el hook que sus rutas de edición usan para obtener el IXLSWorkbookWriteGuard del libro de trabajo propietario antes de mutar y para avanzar la generación del libro después; el guard registra StartGeneration, y Complete marca la escritura como terminada para que las cachés dependientes puedan reconstruirse

Las conexiones de datos preservadas llevan una descripción con tipos: TXLSConnectionKind (xlckUnknown, xlckOdbc, xlckDao, xlckFile, xlckWeb, xlckOleDb, xlckText, xlckAdo) clasifica la conexión, TXLSConnectionCredentials (xlccIntegrated, xlccNone, xlccStored, xlccPrompt) registra su modo de autenticación, y cada valor de parámetro de conexión se etiqueta con TXLSConnectionParameterValueKind (xlcpvNone, xlcpvBoolean, xlcpvDouble, xlcpvInteger, xlcpvString, xlcpvCell). Las tablas de datos What-If informan su tipo de definición almacenada mediante TXLSDataTableKind

Tablas de datos What-If y agrupación de tablas dinámicas

TXLSDataTableAssign, ContainsCell e IsRoot copian e inspeccionan una tabla; Kind, FirstRow, FirstCol, LastCol, LastRow, AlwaysCalculate, ColumnInputCol, ColumnInputRow, ColumnInputDeleted, RowInputCol, RowInputRow y RowInputDeleted exponen la definición de cálculo almacenada
TXLSDataTablesAdd, AddExisting, Delete, Clear, Assign, AdjustForShift y Offset mantienen la colección; FindByCell y FindRoot localizan la tabla que contiene una celda dada o que tiene su raíz en ella; Count, Items y OnChange exponen el estado de la colección
TXLSPivotCacheFieldGroupBaseField y GroupParentField exponen las relaciones entre un campo agrupado y su campo de origen o padre

Los umbrales de conjuntos de iconos pueden renderizarse o validarse programáticamente: XLSCfIconSetCount informa cuántos iconos define un TXLSIconSetType, y XLSBuildCfIconGeometry rellena un TXLSCfIconGeometry con las primitivas (TXLSCfIconPrimitive, tipo TXLSCfIconPrimitiveKind: cfipPolygon, cfipEllipse, cfipRect, cfipLine) y puntos (TXLSCfIconPoint) que dibujan un icono, para que los renderizadores personalizados igualen las formas de iconos integradas de Excel

Diagnósticos, trazado de fórmulas y validación

TXLSDiagnosticCode, NativeCode, Message, Severity, ExceptionClass, PartName, RecordId, SheetIndex, SheetName y StreamOffset identifican un diagnóstico de analizador, escritor o paquete
TXLSDiagnosticsAdd agrega un diagnóstico, Clear reinicia la colección, y Count más Items enumeran sus entradas
TXLSDiagnosticSeverity and TXLSDiagnosticOperationTXLSDiagnosticSeverity (xlsDiagnosticInfo, xlsDiagnosticWarning, xlsDiagnosticError, xlsDiagnosticFatal) clasifica un diagnóstico y TXLSDiagnosticOperation (xlsOperationNone, xlsOperationOpen, xlsOperationSave, xlsOperationCalculate, xlsOperationExport) nombra la fase que lo produjo; los manejadores OnDiagnostic leen ambos del TXLSDiagnostic entregado
TXLSFormulaDebugSessionCurrentStep, DependencyCount, NodeCount y StepCount exponen la instantánea actual del depurador y los tamaños de su traza
TXLSFormulaTracerStepCount informa el número de pasos de evaluación registrados
TXLSImportCheckAddRule, AddUniqueRule y AddCrossColumnRule configuran predicados de columna, unicidad compuesta y comparaciones tipadas; Check devuelve violaciones estructuradas a partir de los valores almacenados de la hoja y las cachés de fórmulas sin recálculo ni materialización de celdas empaquetadas; HeaderRow, FirstRow, LastRow, OnVerifyCell, ViolationCount y Violation exponen límites, callbacks y resultados; Annotate y KeepOnlyViolations son operaciones explícitas de libro de corrección; consulte esquemas de validación de importación para tipos, límites, sistemas de fechas, identidad de tuplas y comportamiento de fallo

Esquemas de validación de importación

TXLSImportCheck de lxImportCheck valida una TXLSXWorksheet contra reglas propiedad de la aplicación; examina los valores escalares almacenados y los resultados de fórmulas almacenados, con coordenadas de hoja de base 1 y sin conversión implícita de texto a número, de texto a fecha o de texto a Boolean

Validator := TXLSImportCheck.Create;
try
  Validator.HeaderRow := 1;
  Rule := Validator.AddRule(2);
  Rule.Name := 'quantity';
  Rule.Flags := [irRequired, irValueType, irValueRange];
  Rule.ValueKind := ivkInteger;
  Rule.MinimumValue := 1;
  Rule.MaximumValue := 1000;

  Validator.AddUniqueRule([1, 3]).Name := 'account-and-region';
  Validator.AddCrossColumnRule(4, 5, icLessOrEqual).Name := 'start-before-end';
  FailureCount := Validator.Check(Sheet);
  if FailureCount > 0 then
    Validator.Annotate(Sheet, 'Import validator');
finally
  Validator.Free;
end;

HeaderRow > 0 comienza la comprobación en la fila siguiente y tiene precedencia sobre FirstRow; de lo contrario FirstRow es 1 por defecto; LastRow = 0 usa la última fila usada de la hoja, mientras que un LastRow positivo puede incluir celdas ausentes sin crearlas; las columnas deben estar entre 1 y 16,384 y los límites activos de filas de datos entre 1 y 1,048,576

Reglas de columna y tipos explícitos

TlxImportColumnRuleColumn, Flags, Name, Title, MinLength, MaxLength, Pattern, ValueKind y DateSerialMode configuran una columna; MinimumValue, MaximumValue, HasMinimum, HasMaximum, MinimumInclusive y MaximumInclusive configuran los límites; Validate comprueba la configuración del esquema y PreparePattern prepara la regex; las dos sobrecargas de Check devuelven un Boolean con un mensaje de error y opcionalmente un TlxImportViolationKind
TlxImportRuleFlagsirRequired, irTextLength, irPattern, irUnique y irCallback conservan sus comprobaciones existentes; irValueType habilita ValueKind y irValueRange habilita los límites configurados; una columna sin flags no se comprueba
TlxImportValueKindivkAny acepta valores escalares finitos soportados, ivkNumber acepta Variants numéricos finitos, ivkInteger exige además un valor integral, ivkDate acepta Variants de fecha o seriales de Excel habilitados explícitamente, ivkBoolean exige un Variant Boolean, y ivkText exige un Variant de cadena
TlxImportDateSerialModeidsNone es el valor predeterminado y mantiene los valores numéricos distintos de las fechas; idsExcel1900 y idsExcel1904 interpretan explícitamente valores numéricos para una columna que usa irValueType con ValueKind = ivkDate

AddRule(Column) reemplaza y libera cualquier regla previa de esa columna; los predicados por tipo de valor, rango, longitud y patrón omiten los valores faltantes, los nulls y las cadenas vacías, mientras que irRequired los reporta; la unicidad conserva las políticas diferenciadas descritas abajo; los espacios en blanco no vacíos siguen siendo un valor; un número no califica como Boolean, una fecha no califica como número ordinario, y una cadena con apariencia numérica sigue siendo texto

Asignar MinimumValue o MaximumValue habilita ese límite; cualquiera de HasMinimum o HasMaximum puede deshabilitarlo de nuevo; ambos interruptores de inclusividad son True por defecto; los límites deben ser números o fechas tipados finitos, y dos límites deben ser comparables y describir un intervalo no vacío; límites invertidos, faltantes, incompatibles o vacíos lanzan una excepción antes de que comience la validación de la hoja

Los límites numéricos comparan valores numéricos y los límites de fecha comparan fechas; las comparaciones entero a entero preservan todos los bits de Int64 y UInt64; los valores de una categoría incompatible fallan la comprobación de rango; los predicados de longitud de texto y regex siguen inspeccionando la representación textual del escalar, y las comprobaciones regex conservan el comportamiento IsMatch existente, así que use anclas como ^...$ cuando el texto completo deba coincidir; una regex inválida deshabilita su comprobación de patrón por compatibilidad

Valores de Excel con formato de fecha

Una celda importada de Excel puede contener un serial numérico incluso cuando su formato numérico muestra una fecha; elija un modo de serial explícitamente cuando ese sea el esquema de importación aceptado; el modo afecta solo la validación y nunca cambia el valor almacenado de la celda

Rule := Validator.AddRule(4);
Rule.Flags := [irRequired, irValueType, irValueRange];
Rule.ValueKind := ivkDate;
if Sheet.Workbook.Date1904 then
  Rule.DateSerialMode := idsExcel1904
else
  Rule.DateSerialMode := idsExcel1900;
Rule.MinimumValue := VarFromDateTime(EncodeDate(2026, 1, 1));
Rule.MaximumValue := VarFromDateTime(EncodeDate(2026, 12, 31));

VarFromDateTime se declara en Variants y EncodeDate en SysUtils; los seriales numéricos deben ser no negativos y resolverse antes del 1 de enero de 10000; los seriales fraccionarios retienen su hora del día; el sistema 1900 rechaza todo serial desde 60 inclusive hasta 61 exclusivo porque ese intervalo denota el día bisiesto ficticio; el sistema 1904 mapea el serial cero al 1 de enero de 1904

Los límites de fecha incluyen la hora del día, así que un máximo fijado a la medianoche del 31 de diciembre excluye las horas posteriores de ese día; use un límite superior exclusivo en el 1 de enero del año siguiente cuando el día final completo deba aceptarse; las fechas textuales como 10/08/2026 siguen siendo texto sin importar el modo de serial configurado

Unicidad compuesta y comparaciones entre columnas

AddUniqueRule(const AColumns: array of Integer): TlxImportUniqueRuleAgrega una restricción de tupla independiente sobre una lista ordenada, no vacía de columnas distintas; Name identifica la regla, Title antecede su mensaje, ColumnCount y Columns[Index] de base 0 exponen sus miembros, y SkipIncompleteRows es True por defecto
AddCrossColumnRule(ALeftColumn, ARightColumn: Integer; AComparison: TlxImportComparison): TlxImportCrossColumnRuleAgrega una comparación de la misma fila con LeftColumn y RightColumn de solo lectura, y Comparison, Name, Title y SkipBlankValues editables, que es True por defecto
TlxImportComparisonicEqual, icNotEqual, icLess, icLessOrEqual, icGreater e icGreaterOrEqual seleccionan la relación; los pares numéricos y de fechas comparan sus valores, los pares Boolean ordenan False antes que True, y los pares de cadenas comparan unidades de código UTF-16 de forma ordinal con distinción de mayúsculas y minúsculas

Las claves compuestas retienen el tipo Variant exacto y la identidad textual de cada miembro; Integer(1), Double(1), la cadena '1', un Boolean y una fecha son miembros distintos; no hay plegado de mayúsculas y minúsculas, normalización Unicode, análisis por configuración regional ni ambigüedad de delimitadores; combinaciones como ('ab', 'c') y ('a', 'bc') siguen siendo diferentes; cada pasada de validación comienza un índice de tuplas fresco

Cuando SkipIncompleteRows = True, un miembro faltante, null o de cadena vacía excluye esa fila de la unicidad de tuplas; asignarle False incluye esos miembros con sus identidades Variant originales; un duplicado informa la primera columna de la tupla como su dirección de celda y la primera fila coincidente mediante FirstDuplicateRow

El irUnique existente de una sola columna conserva su comportamiento de coincidencia textual sin distinción de mayúsculas y minúsculas y omite los valores faltantes o null; use AddUniqueRule([Column]) cuando se exija identidad tipada estricta para una columna

Las comparaciones entre columnas nunca coercitan cadenas a números, números a Boolean ni números ordinarios a fechas; las categorías mixtas incompatibles fallan incluso para icNotEqual; las comparaciones de cadenas distinguen Unicode compuesto y descompuesto, preservan caracteres null incrustados y usan el orden de prefijo-más-corto-primero; cuando SkipBlankValues = False, cualquiera de los dos operandos en blanco produce una violación entre columnas

Resultados estructurados y libros de corrección

TlxImportViolationRow, Col, SheetName y Address identifican la celda, con Address en notación A1; ValueText y ErrorText llevan información de visualización; RuleName y Kind identifican la regla configurada y la categoría de fallo; RelatedColumn identifica el segundo operando en un fallo entre columnas y FirstDuplicateRow identifica la fila original en fallos de unicidad
TlxImportViolationKindivRequired, ivTextLength, ivPattern, ivUnique, ivCallback, ivValueType, ivValueRange, ivCellError, ivFormulaCacheMissing, ivCompositeUnique e ivCrossColumn distinguen las categorías de fallo soportadas

Check(Sheet) devuelve el número de violaciones, y ViolationCount más Violation(Index) de base 0 enumeran el reporte; una regla de columna informa su primer predicado que falla, mientras que las reglas de tupla y de comparación configuradas independientemente pueden agregar más violaciones para la misma celda; asigne valores Name con significado cuando los llamadores necesiten identificadores estables de reglas de la aplicación

Las celdas con fórmula se validan usando sus valores en caché almacenados; una fórmula sin resultado en caché almacenado reporta ivFormulaCacheMissing, y un resultado de error reporta ivCellError; recalcule explícitamente antes de comprobar cuando se requieran resultados de fórmulas frescos; la validación no accede a fuentes externas, altera definiciones de fórmulas ni evalúa fórmulas sin caché

OnVerifyCell retiene la firma del callback TlxImportVerifyCell y se ejecuta después de los predicados de columna aplicables exitosos y de las comprobaciones de unicidad; devuelve un Boolean y puede asignar un mensaje de error de la aplicación; los callbacks deben mantener el libro y el esquema de validación sin cambios, y las escrituras al libro son rechazadas por el lease de lectura; las excepciones del callback se propagan y el lease se libera para operaciones posteriores

Check nunca anota, elimina filas ni materializa valores empaquetados; use Annotate después de comprobar para aplicar fuentes rojas y anexar texto de error a los comentarios existentes, o llame explícitamente a KeepOnlyViolations para eliminar las filas sin violaciones y crear un libro de corrección; estos métodos modifican la hoja de cálculo suministrada, así que llámelos sobre el libro previsto después de revisar el reporte

La validación toma prestadas la hoja y el libro para la llamada síncrona; no adopta la propiedad de los objetos del llamador ni exige un libro propiedad de una interfaz; un lease de lectura protege las instantáneas relevantes de celdas almacenadas y el acceso a cachés de fórmulas almacenadas durante toda la comprobación

TXLSExternalLinkUpdateMode = (xluPromptUser, xluNever, xluAlways);

property IXLSWorkbook.SaveExternalLinkValues: Boolean;
property IXLSWorkbook.UpdateLinks: TXLSExternalLinkUpdateMode;
property TXLSXWorkbook.SaveExternalLinkValues: Boolean;
property TXLSXWorkbook.UpdateLinks: TXLSExternalLinkUpdateMode;
      
Ambos motores guardan por defecto los valores en caché y usan xluPromptUser; xluNever y xluAlways solo cambian la preferencia de actualización almacenada en el libro de trabajo, y nunca autorizan ni inician acceso a archivos externos o a la red

Auditoría de cálculo y pistas del libro de trabajo

function TXLSWorkbook.RecalcAndVerify(MaxIssues: Integer = 10000): TXLSCalculationAuditReport;
function TXLSXWorkbook.RecalcAndVerify(MaxIssues: Integer = 10000): TXLSCalculationAuditReport;
function TXLSWorkbook.RecalcAndVerifyEx(const Options: TXLSRecalcAuditOptions): TXLSCalculationAuditReport;
function TXLSXWorkbook.RecalcAndVerifyEx(const Options: TXLSRecalcAuditOptions): TXLSCalculationAuditReport;
function TXLSWorkbook.RunCalculationAudit(const Options: TXLSRecalcAuditOptions): TXLSCalculationAuditReport;
function TXLSWorkbook.FormulaIsVolatile(Formula: WideString): Boolean;

function TXLSWorkbook.AuditOverlayHash(SheetIndex, Row, Col: Integer): Integer;
function TXLSWorkbook.AuditOverlayRead(SheetIndex, Row, Col: Integer; var Value: Variant): Boolean;
procedure TXLSWorkbook.AuditOverlayWrite(SheetIndex, Row, Col: Integer; const Value: Variant);
procedure TXLSWorkbook.AuditOverlayClear;

TXLSCalculationAuditIssueKind = (xlcaiCacheMismatch, xlcaiParseFailure,
  xlcaiMissingFunction, xlcaiMissingName, xlcaiUnsupportedArguments,
  xlcaiCircularReference, xlcaiExternalReferenceDenied,
  xlcaiExternalReferenceMissing, xlcaiDataTableSkipped, xlcaiCancelled,
  xlcaiInternalFailure);

TXLSCalculationAuditIssue = record
  Kind: TXLSCalculationAuditIssueKind;
  SheetIndex: Integer;
  SheetName: WideString;
  Row: Integer;
  Col: Integer;
  Formula: WideString;
  Symbol: WideString;
  Expected: Variant;
  Actual: Variant;
  ResultCode: Integer;
  Stack: WideString;
  ExternalTarget: WideString;
end;
TXLSCalculationAuditIssues = array of TXLSCalculationAuditIssue;

TXLSRecalcAuditProgress = procedure(ASender: TObject;
  ACurrent, ATotal: Integer; var ACancel: Boolean) of object;

property WorkbookCodeName: WideString;
property CalculationThreadMode: TXLSCalculationThreadMode;
property ForceFullCalculationState: TXLSOptionalBooleanState;
property RefreshAllOnLoadState: TXLSOptionalBooleanState;
      
RecalcAndVerify combina los fallos de símbolos de fórmula y las discrepancias de valores en caché en categorías estructuradas estables, con coordenadas de hoja de cálculo, fórmulas, símbolos, valores esperados y reales, y truncamiento acotado, sin alterar las cachés ni la semántica del libro de trabajo. RecalcAndVerifyEx ejecuta la auditoría profunda: evalúa cada fórmula una vez a través del grafo de dependencias en una capa aislada de resultados para que las celdas dependientes lean este pase en lugar de cachés obsoletas, clasifica los fallos de evaluación (argumentos no soportados, referencias circulares, referencias externas denegadas o faltantes, tablas de datos omitidas, cancelación, fallos internos) con códigos de resultado, registra una pila de llamadas acotada por fallo, respeta un presupuesto de problemas y un receptor de progreso/cancelación, y permanece de solo lectura salvo que ApplyResults confirme atómicamente los valores recalculados tras un pase completamente exitoso sobre una estructura de libro de trabajo sin cambios
AbsoluteTolerance y RelativeTolerance controlan el reporte de discrepancias, no los valores intermedios de cálculo ni la aplicación explícita de cachés Para resultados numéricos, una discrepancia requiere una diferencia absoluta mayor que AbsoluteTolerance y, cuando la tolerancia relativa está habilitada, mayor que RelativeTolerance * max(abs(Expected), abs(Actual)) La igualdad en cualquiera de los dos umbrales se tolera; los valores modificados igualmente entran en la superposición de la auditoría para que las fórmulas dependientes vean el cálculo actual, y ApplyResults confirma esos valores aunque sus diferencias no se puedan reportar Una auditoría de solo lectura nunca cambia las cachés almacenadas
Cada elemento de TXLSCalculationAuditReport.Issues es un TXLSCalculationAuditIssue; Kind selecciona una de las categorías xlcai*, Expected / Actual llevan los valores comparados en las discrepancias de caché, Stack es la cadena acotada de llamadas de evaluación representada como Sheet!A1 > Sheet!B2 (marco más externo primero), y ExternalTarget describe el libro de trabajo externo en los problemas de referencias externas. TXLSRecalcAuditOptions.OnProgress es un receptor TXLSRecalcAuditProgress que recibe el progreso de nodos ACurrent / ATotal y puede asignar ACancel para detener la auditoría en el siguiente límite de nodo con un único problema xlcaiCancelled
RunCalculationAudit es el punto de entrada del motor al que delegan los envoltorios de auditoría a nivel de libro de trabajo, y acepta el mismo registro de opciones. FormulaIsVolatile informa si una fórmula forzaría un recálculo en cada pasada (llamadas como NOW, RAND, TODAY, OFFSET, INDIRECT, o una referencia no resoluble)
La capa de auditoría (overlay) es una capa What-If sobre las cachés de celdas: AuditOverlayWrite almacena un valor de reemplazo para una celda (índice de hoja de base 1, fila y columna de base 0 según la convención de la calculadora), AuditOverlayRead y AuditOverlayHash la consultan, y AuditOverlayClear vacía la capa. Los valores superpuestos los devuelven los obtenedores normales de valores de celda, así que el recálculo y la auditoría profunda los observan sin mutar las celdas de la hoja de cálculo; limpiar la capa restaura los valores almacenados
Las propiedades de pistas del libro de trabajo conservan los estados ausente, falso, verdadero, deshabilitado, automático y manual donde el formato de origen los soporta; nunca inician cálculo, actualización, ni trabajo de sistema de archivos, red o base de datos al abrir

Fórmulas de tabla y estado IME

property TXLSXTable.ColumnCalculatedFormulaArrayStates[Index: Integer]: TXLSTableFormulaArrayState;
property TXLSXTable.ColumnTotalsFormulaArrayStates[Index: Integer]: TXLSTableFormulaArrayState;
property TDataValidation.ImeMode: TXLSDataValidationImeMode;
property TXLSXDataValidation.ImeModeKind: TXLSDataValidationImeMode;
      
Las fórmulas de columnas calculadas y de filas de totales conservan estados de matriz independientes de ausente, falso, verdadero o desconocido, incluidos los valores léxicos de origen intactos y las ediciones estructurales de columnas; las fórmulas de matriz son rechazadas por la expansión escalar de filas en lugar de cambiarse silenciosamente
Los modos IME usan mapeos explícitos de BIFF y OOXML, preservan los valores de origen desconocidos, y rechazan el valor deshabilitado exclusivo de OOXML cuando se crea para XLS Classic
Asignar SaveExternalLinkValues a False omite los registros Classic XCT y CRN, o el subárbol sheetDataSet del libro externo XLSX, conservando los destinos de los vínculos, los nombres de hoja, los nombres definidos externos, las relaciones, las referencias de fórmulas, el XML desconocido y la caché en memoria; restaurar la propiedad a True en el mismo libro de trabajo puede serializar de nuevo esa caché retenida
Los tokens de origen no soportados intactos se preservan byte a byte o léxicamente, las asignaciones explícitas emiten solo valores legales, las partes XLSX sin cambios conservan la ruta de copia comprimida, y la conversión XLS/XLSX transfiere ambas políticas; los libros de trabajo ODS y de texto no tienen declaración equivalente y abren con los valores predeterminados, mientras que las partes de vínculos DDE y OLE preservadas no se tratan como cachés de celdas de libros externos

Inspección y eliminación de paneles de tareas de Web Add-in

function IXLSWorkbook.HasWebAddinTaskPanes: Boolean;
function IXLSWorkbook.WebAddinTaskPaneCount: Integer;
function IXLSWorkbook.RemoveWebAddinTaskPanes: Integer;
function TXLSXWorkbook.HasWebAddinTaskPanes: Boolean;
function TXLSXWorkbook.WebAddinTaskPaneCount: Integer;
function TXLSXWorkbook.RemoveWebAddinTaskPanes: Integer;
      
Los métodos de inspección reconocen solo las relaciones internas de la raíz del paquete cuyo tipo coincide exactamente con el tipo de relación de paneles de tareas de Web Add-in; las relaciones externas, los tipos con distinto uso de mayúsculas, las relaciones de hojas de cálculo y las partes con nombres similares se ignoran
La eliminación primero valida el grafo completo de relaciones, incluidos los destinos normalizados, el confinamiento a la raíz del paquete, los ciclos, las partes faltantes y los límites de recursos; luego elimina todas las relaciones de raíz coincidentes y solo las partes alcanzables que no comparta otra relación retenida, junto con las partes de relación propiedad de los orígenes eliminados
La operación es atómica e idempotente, las partes de origen eliminadas no pueden reaparecer mediante guardado con copia comprimida, y los tipos de contenido se reconstruyen a partir del paquete restante; los grafos mal formados agregan el código de diagnóstico 1303 y lanzan una excepción antes de mutar, mientras que Classic XLS y ODS devuelven False, 0 y -1 sin escanear el paquete

Política de visualización de objetos del libro de trabajo

TXLSObjectDisplayMode = (xlsodmShowAll, xlsodmShowPlaceholders,
  xlsodmHideAll);

property IXLSWorkbook.ObjectDisplayMode: TXLSObjectDisplayMode;
property TXLSWorkbook.ObjectDisplayMode: TXLSObjectDisplayMode;
property TXLSXWorkbook.ObjectDisplayMode: TXLSObjectDisplayMode;
property TXLSPaginationModel.ExportObjectPlaceholders: Boolean;
property TXLSPDFExport.ExportObjectPlaceholders: Boolean;
property TXLSSvgExport.ExportObjectPlaceholders: Boolean;
property TXLSPageImageExporter.ExportObjectPlaceholders: Boolean;
property TXLSPrintDocument.ExportObjectPlaceholders: Boolean;
property TXLSXHtmlExportOptions.ExportObjectPlaceholders: Boolean;
      
Classic XLS mapea los tres estados a su registro de visualización de objetos del libro de trabajo y XLSX los mapea a workbookPr.showObjects; los valores faltantes adoptan xlsodmShowAll por defecto, las cargas útiles Classic reservadas intactas y los tokens XLSX no soportados permanecen sin pérdidas, y las asignaciones explícitas emiten solo valores canónicos
El visor renderiza el modo de marcadores de posición como cuadros ligeros que llevan el tipo, nombre, texto y texto alternativo disponibles del objeto; los exportadores retienen los objetos completos de forma predeterminada, mientras que asignar ExportObjectPlaceholders solicita la misma política de bajo costo sin decodificar cargas útiles de imágenes ni construir escenas de gráficos
xlsodmHideAll impide la recolección de dibujos y la expansión de rangos impulsada por objetos antes de que comience el renderizado; la conversión de libros de trabajo transporta los tres estados, ODS escribe los dibujos completos en el modo de marcadores de posición y omite la salida de dibujos y medios en el modo hide-all, y los fondos de hoja de cálculo permanecen independientes

Valores e instantáneas de calibración de renderizado

TXLSRenderCalibration = record
  WidthCorrection: Double;
  HeightCorrection: Double;
  LineSpacing: Double;
  CellMarginFactor: Double;
  ScreenScaling: Integer;
  MeasurementDpi: Integer;
end;

function XLSDefaultRenderCalibration: TXLSRenderCalibration;
function XLSValidateRenderCalibration(const AValue: TXLSRenderCalibration;
  out AInvalidField: TXLSRenderCalibrationField): Boolean;
      
Los valores predeterminados son 1, 1, 1, 1, 100 y 96; las correcciones de ancho y alto deben ser mayores que cero y menores que dos, el interletrado de línea está acotado a (0, 4], los márgenes de celda a [0, 4], el escalado de pantalla a [100, 500] por ciento, y el DPI de medición a [36, 2400]
Los libros de trabajo Classic XLS y XLSX exponen los mismos miembros RenderCalibration, CaptureRenderCalibration y ResetRenderCalibration; la asignación de registros completos valida antes de mutar, y cada captura devuelve una instantánea de valores independiente e inmutable por convención para una operación de renderizado

Geometría de renderizado y medición de fuentes

TXLSRenderGeometryBackend = (xlsrgbAutoFit, xlsrgbPagination, xlsrgbPdf,
  xlsrgbSvg, xlsrgbBitmap, xlsrgbPrintPreview, xlsrgbViewer, xlsrgbHtml);

TXLSRenderFont = record
  Name: WideString;
  Size: Double;
  Styles: TXLSRenderFontStyles;
  Charset: Byte;
end;

function CreateXLSRenderGeometry(
  const ACalibration: TXLSRenderCalibration;
  AWorkbookGeneration: UInt64;
  ABackend: TXLSRenderGeometryBackend;
  ACacheCapacity: Integer = 4096): IXLSRenderGeometry;

property TXLSHTMLExport.RenderGeometry: IXLSRenderGeometry;
property TXLSXHtmlExportSession.RenderGeometry: IXLSRenderGeometry;
      
IXLSRenderGeometry posee una calibración inmutable, una generación de libro de trabajo, una identidad de backend, un servicio de medición y una caché acotada de métricas local de la operación; CreateXLSRenderGeometry usa GDI, mientras que CreateXLSPortableCairoRenderGeometry en lxPortableCairo usa bytes de fuentes explícitos con FreeType/HarfBuzz en Linux o macOS nativos; MeasureText devuelve ancho en píxeles, alto, interletrado, ascenso, descenso y número de líneas, mientras que MaximumDigitWidthPixels, ColumnWidthToPixels, PixelsToColumnWidth, PointsToPixels, PixelsToPoints y UsableCellWidthPixels proporcionan las conversiones de geometría compartidas
La identidad de la caché incluye backend, generación del libro de trabajo, todos los valores de calibración, nombre de fuente, tamaño exacto, estilos, juego de caracteres, ancho de ajuste y texto; las correcciones de ancho y alto se aplican una vez durante la medición del texto, el interletrado afecta solo al alto multilínea, la corrección de márgenes de celda afecta solo al ancho útil del texto, y el escalado de pantalla afecta solo a la emulación de ancho máximo de dígito para los anchos de columna implícitos
El AutoFit de Classic XLS y XLSX captura un servicio por cada operación pública, incluida la medición de rangos combinados y de la fase doble MarkSheet, mientras que TXLSPaginationModel.Build captura un servicio para el RenderBackend seleccionado; los puntos de entrada de PDF, SVG, mapa de bits, vista previa de impresión, visor de libros y HTML seleccionan su propio backend antes de la salida, cambiar la calibración del libro de trabajo no puede mutar una instantánea existente, y la salida no escribe dimensiones de la hoja de cálculo
Las llamadas HTML directas a libros de trabajo, hojas de cálculo y rangos capturan un servicio xlsrgbHtml fresco, mientras que una TXLSXHtmlExportSession incremental captura una vez en BeginExport y reutiliza esa instantánea para todas las hojas; ambos exportadores exponen el servicio retenido a través de RenderGeometry para diagnósticos de calibración y de caché
Las propiedades de solo lectura de IXLSRenderGeometry — WorkbookGeneration, CacheCapacity y CacheEntryCount — informan la generación vinculada y el llenado de la caché para diagnósticos, y ImplicitWidthMaximumDigitWidthPixels devuelve la medición de ancho de dígito detrás de la emulación de anchos de columna implícitos
MeasureText rellena un registro TXLSRenderTextMetrics (ancho en píxeles, alto, interletrado, ascenso, descenso y número de líneas) a partir de un TXLSRenderFont cuyo miembro Styles es un conjunto de flags TXLSRenderFontStyle (negrita, cursiva, subrayado, tachado)

Importación, generación de código, comparación y supervisión

TXLSHTMLImportLas sobrecargas de LoadFromHTML importan contenido de tablas HTML desde un flujo o archivo a una hoja de cálculo, con coordenadas de inicio, selección de tabla y separador decimal opcionales
TXLSCodeGenLanguage (tipo TlxCodeGenLanguage: lcgDelphi o lcgCppBuilder) selecciona el dialecto de origen de las sentencias generadas, GenerateToList escribe el código generado del libro de trabajo en una lista de cadenas, y TlxCodeGenOptions amplía la salida con combinaciones, anchos de columna o formatos numéricos (cgoMerges, cgoColumnWidths, cgoNumberFormats; las hojas y celdas siempre se emiten)
TXLSXWorkbookCompareCompare compara celdas almacenadas tipadas, texto de fórmulas, presencia de hojas y combinaciones; Options agrega cachés de fórmulas, estilos base de celdas y geometría de filas o columnas, SetNumericTolerance configura la igualdad numérica, y Count, Diff y Report exponen los resultados ordenados; consulte comparación de libros
TXLSFileMonitorIntervalMs selecciona el intervalo de sondeo y SynchronizeEvent selecciona la entrega sincronizada de callbacks; un manejador OnFileChanged puede desactivar o destruir el monitor, o cambiar FileName para empezar a vigilar otro archivo
TXLSCSVLoader and TXLSCSVSaverEl cargador analiza texto delimitado en una cuadrícula en memoria de Variants — ParseFile y ParseStream llenan la cuadrícula, CellValue, RowCount y ColCount la leen de vuelta — con separador (ValueSeparator) y codificación (TXLSCsvEncoding: ANSI del sistema, UTF-16, UTF-8) autodetectados, y promoción opcional de tipos controlada por DetectTypes y entradas ColumnTypes por columna (TXLSCsvColumnType: auto, texto, número, fecha, booleano, omitir); SkipRows, AutoTrim, LocaleTolerantNumbers y FieldWidths refinan el manejo de ancho fijo y configuración regional. TXLSCSVSaver.SaveAs escribe la cuadrícula de vuelta con comillas RFC 4180, y QuoteAllStrings fuerza el entrecomillado; TXLSTSVSaver deriva del saver para salida separada por tabuladores

Comparación de libros

TXLSXWorkbookCompare en lxCompare compara dos instancias de TXLSXWorkbook sin recalcular fórmulas ni modificar ninguno de los dos libros; las hojas se emparejan por nombre sin distinción de mayúsculas y minúsculas, y cambiar solo el orden de las hojas no produce una diferencia

El valor Options predeterminado está vacío y ambas tolerancias son cero por defecto; la comparación predeterminada reporta hojas agregadas o eliminadas, celdas almacenadas agregadas o eliminadas, valores literales tipados cambiados, texto de fórmulas cambiado y rangos combinados agregados o eliminados

La comparación de literales distingue números, texto, valores Boolean, fechas, errores y blancos: el número 1 difiere del texto '1', un Boolean difiere de su escritura textual, las fechas retienen su propio tipo, y los errores se comparan por su código de error almacenado; los tipos de almacenamiento numérico con valores iguales se comparan como iguales, mientras que valores Int64 distintos permanecen distintos durante la comparación exacta

lcoFormulaCachedResultsPara celdas con texto de fórmula coincidente, compara el resultado en caché existente y distingue una caché faltante o invalidada de una caché disponible; las cachés cargadas y calculadas con el mismo valor tipado se comparan como iguales
lcoCellStylesCompara los estilos base resueltos en coordenadas coincidentes de celdas almacenadas, incluidas fuentes, rellenos, degradados, bordes, alineación, formatos numéricos y protección de celdas; un orden de inserción del pool de estilos no relacionado no crea diferencias, y los colores de tema se resuelven contra el tema actual de cada libro
lcoAxisGeometryCompara altos de fila efectivos, anchos de columna, flags de oculto, niveles de esquema, flags de contraído y valores predeterminados de la hoja; un tamaño explícito igual al predeterminado efectivo se compara como igual a un tamaño implícito
lcoDefinedNamesCompara nombres con ámbito de libro y de hoja, sus definiciones de fórmula, visibilidad, comentarios y flags de macro; el ámbito sigue los nombres de las hojas, y el orden de inserción no crea diferencias
lcoDataValidationsCompara definiciones de validación en orden almacenado, incluidos los rangos objetivo normalizados, fórmulas, operadores, mensajes de entrada, mensajes de error y flags de control; cambiar el orden de los rangos objetivo dentro de una definición no crea una diferencia
lcoConditionalFormatsCompara definiciones de formato condicional en orden almacenado, incluidas la prioridad efectiva, el comportamiento stop-if-true, los rangos objetivo, las fórmulas, los estilos diferenciales y los ajustes soportados de escala de colores, barras de datos e icon sets; los identificadores del pool de estilos y de la paleta indexada se resuelven a sus valores semánticos
lcoTablesEmpareja tablas por nombre y compara rangos, encabezados, totales, ajustes de estilo, comentarios, nombres de columnas, etiquetas, fórmulas, flags de matriz, nombres únicos, nombres de conexión, criterios de filtro y condiciones de ordenación; los IDs de tabla, los IDs de columna y el orden de inserción no crean diferencias, mientras que los IDs de filtro de color y de estilo diferencial de ordenación se resuelven a apariencia
lcoDrawingsCompara definiciones de dibujos tipadas en orden de dibujo, reteniendo el orden de hijos de grupos y el orden de grupos de trazado de gráficos; las definiciones canónicas soportadas cubren imágenes, cuadros de texto, gráficos, grupos, vistas completas de slicers tipadas y vistas de timelines tipadas, con nodos de dibujo opacos o no soportados lanzando EXLSSemanticSnapshot
lcoBlankStyleRegionsCompara estilos base resueltos en coordenadas sin celda almacenada de ninguno de los lados, incluidos los valores predeterminados de la hoja y las superposiciones virtuales de estilo; subdivisiones equivalentes de rectángulos se comparan como iguales, y los cambios adyacentes iguales se fusionan en rectángulos sin materializar celdas
lcoRichTextRunsCompara las fuentes efectivas y el texto de runs en celdas de texto almacenado coincidentes, hereda la fuente base para propiedades de run omitidas, ignora runs vacíos y fusiona runs adyacentes con fuentes efectivas iguales; el texto plano coincide con un run de texto enriquecido equivalente de fuente predeterminada
lcoPivotTablesEmpareja definiciones tipadas de PivotTable por nombre y compara vinculaciones de origen, diseño, campos, miembros de vista ordenados, agregaciones de datos, filtros, referencias de agrupación, definiciones calculadas, estilos y flags nativos de materialización; los IDs de caché y de miembros compartidos se resuelven a identidades de origen y valores tipados
lcoPivotCachesEmpareja definiciones tipadas locales de PivotCache por identidad de origen y compara metadatos de refresh, metadatos de campos, etiquetas y rangos agrupados, dominios de miembros compartidos sin ordenar y valores de registros tipados ordenados; los miembros numéricos, de texto, Boolean, de fecha, de error y vacíos permanecen distintos, las fechas retienen la precisión binary64, y los IDs de caché y el orden de ranuras de miembros compartidos no crean diferencias
lcoSlicerStateEmpareja vistas de slicers con nombre y cachés, incluidas vinculaciones de columna de tabla o de Pivot no OLAP, nombres de PivotTables conectados, selecciones tipadas de miembros, ajustes de cross-filter y ordenación, leyenda, posición de desplazamiento, diseño de columnas, dimensiones, estilo, flags de bloqueo y de leyenda, y geometría de anclaje; las vinculaciones resuelven IDs de tabla, columna, hoja y caché
lcoTimelineStateEmpareja vistas tipadas de timelines con nombre y cachés locales no OLAP, incluidas vinculaciones del campo de origen y del PivotTable conectado, selección activa de fechas, leyenda, nivel y límites de la hoja; las selecciones inactivas omiten los extremos de fecha no usados

Options es de tipo TlxCompareOptions, un conjunto de TlxCompareOption; habilitar una opción agrega sus diferencias a la comparación predeterminada

SetFeatureLimits(MaxBytes, MaxItems) valida ambos límites positivos antes de cambiar cualquiera de los dos ajustes; MaxFeatureBytes es 64 MiB por defecto y MaxFeatureItems es 1,000,000 por defecto, y los setters individuales preservan la misma validación atómica

Los presupuestos de características cubren los bytes canónicos separados agregados y las entradas contadas de ambos libros, incluidos runs de texto enriquecido, nodos XML de filtros, campos Pivot, miembros de dominio y valores de registros, y conexiones de slicers o timelines; los readers comprueban conteos y entradas de texto grandes antes de construir XML nativo, aplican flujos de salida acotados, y lanzan EXLSXSemanticBudget cuando se excede un límite

SetNumericTolerance(AbsoluteTolerance, RelativeTolerance) valida ambos argumentos antes de cambiar cualquiera de los dos ajustes; ambos deben ser finitos y no negativos, y los setters individuales AbsoluteTolerance y RelativeTolerance usan la misma validación

Los literales numéricos y los valores numéricos en caché se comparan como iguales cuando su diferencia absoluta es como máximo AbsoluteTolerance o su diferencia relativa al mayor valor absoluto es como máximo RelativeTolerance; un umbral de cero conserva la igualdad exacta, el cálculo relativo evita el desborde para valores opuestos extremos, y la tolerancia no coercita texto ni se aplica a fechas, estilos ni geometría

LeftName y RightName fijan nombres de visualización opcionales usados por las líneas de Report, con left y right por defecto; los nombres afectan solo al reporte, no al emparejamiento de hojas ni a la comparación

Comparer := TXLSXWorkbookCompare.Create;
try
  Comparer.Options := [lcoFormulaCachedResults, lcoCellStyles,
    lcoAxisGeometry];
  Comparer.SetNumericTolerance(0.001, 0.000001);
  DifferenceCount := Comparer.Compare(LeftWorkbook, RightWorkbook);
  for I := 0 to DifferenceCount - 1 do
  begin
    Entry := Comparer.Diff(I);
    ReportLines.Add(Entry.Describe);
  end;
finally
  Comparer.Free;
end;

Compare devuelve el conteo de diferencias, Count lee ese conteo después, y Diff(Index) usa indexación de base 0 para devolver un TlxCompareDiff propiedad del comparador; retenga el comparador mientras lee sus entradas, y vuelva a obtener las entradas tras otra comparación exitosa

Cada entrada proporciona Kind, Sheet, Row y Col de base 1 donde aplica, Ref, LeftText, RightText y valores tipados LeftKind / RightKind; TlxCompareValueKind contiene lcvNone, lcvBlank, lcvNumber, lcvText, lcvBoolean, lcvDateTime, lcvError y lcvFormula, con lcvNone usado para un lado ausente o una diferencia que no es de valor

TlxCompareKind retiene lckSheetAdded, lckSheetRemoved, lckCellAdded, lckCellRemoved, lckValueChanged, lckFormulaChanged, lckMergeAdded y lckMergeRemoved, y agrega lckFormulaCacheChanged, lckStyleChanged, lckRowGeometryChanged y lckColumnGeometryChanged

Las diferencias de estilo llevan huellas canónicas estables de estilo en LeftText y RightText; las diferencias de geometría llevan el tamaño, oculto, esquema y estado de contraído comparados, con Ref identificando el intervalo contiguo del eje afectado, Row fijado a su primera fila y Col a cero para filas, o Col fijado a su primera columna y Row a cero para columnas

Las diferencias de características usan lckDefinedNameChanged, lckDataValidationChanged, lckConditionalFormatChanged, lckTableChanged, lckDrawingChanged, lckPivotTableChanged, lckPivotCacheChanged, lckSlicerChanged o lckTimelineChanged; Change es lccChanged, lccAdded o lccRemoved, y cada lado presente lleva su huella canónica de definición mientras que un lado ausente lleva una cadena vacía

lckRichTextChanged identifica una definición de run cambiada en su coordenada de celda y lleva huellas canónicas de runs en LeftText y RightText; la tolerancia numérica se aplica a literales de celda y cachés de fórmulas, mientras que las definiciones tipadas de características se comparan exactamente

Las referencias de características identifican nombres con ámbito o nombres de tablas, o usan posiciones de secuencia de base 1 para definiciones de validación, formato condicional y dibujos; insertar o mover una característica ordenada puede cambiar varias posiciones, mientras que las entradas de nombres a nivel de libro tienen un Sheet vacío

lckBlankStyleRegionChanged identifica un rectángulo en blanco cambiado mediante Row, Col, LastRow y LastCol inclusivos, y su Ref en A1; las coordenadas almacenadas las maneja la comparación ordinaria de celdas y lcoCellStyles, así que habilite ambas opciones de estilo para inspeccionar juntas las celdas almacenadas y las áreas en blanco

Describe formatea una entrada, mientras que Report(List) anexa las entradas formateadas a un TStrings propiedad del llamador; un cambio de valor tipado incluye etiquetas de tipo cuando los tipos difieren, y los resultados se ordenan por nombre de hoja, fila, columna, tipo de diferencia y referencia en lugar del orden de inserción de celdas

La comparación mantiene leases de lectura, recorre las celdas almacenadas a través de instantáneas de cursores separadas, y retiene el almacenamiento empaquetado; la geometría particiona los límites de metadatos almacenados y los tramos compactos de filas repetidas, mientras que la comparación de estilos en blanco barre los rectángulos activos y los límites de celdas almacenadas sin escanear una cuadrícula rectangular de un millón de filas; el trabajo crece con las características almacenadas, las intersecciones de regiones y las diferencias reportadas

Una comparación fallida preserva el resultado exitoso previo; una asignación de tolerancia inválida también preserva los ajustes y el resultado existentes, mientras que pasar un libro nil limpia el resultado y devuelve cero

Esta comparación cubre el contenido de celdas almacenadas de la fachada XLSX y definiciones tipadas seleccionadas de características; la escritura de fórmulas de nombres, validaciones, formatos condicionales, tablas y gráficos se normaliza a través del parser semántico de fórmulas, mientras que las fórmulas calculadas de Pivot retienen su texto de definición almacenado

Los filtros de tablas aceptan formas y condiciones de ordenación soportadas personalizadas, de lista de valores, de grupos de fechas, de color, de iconos, dinámicas y de top-count; las columnas de filtro independientes y las entradas de conjuntos de valores normalizan su orden, los valores predeterminados Boolean y las escrituras numéricas se normalizan, y el orden de las condiciones de ordenación sigue siendo significativo

La comparación tipada de Pivot, slicers y timelines resuelve fuentes locales de hojas de cálculo soportadas y vinculaciones no OLAP sin refrescar ni evaluar disponibilidad; las pistas nativas de disponibilidad de slicers son metadatos de visualización derivados, mientras que las selecciones de miembros y los metadatos nativos de ordenación reconocidos se comparan

Las propiedades nativas opacas de dibujos, los modelos Pivot binarios incompletos, las fuentes Pivot externas u OLAP, los registros suplementarios crudos de PivotTable y el XML de extensiones, el XML de filtros desconocido, y los atributos o hijos de extensión de slicers o timelines sin modelar lanzan EXLSSemanticSnapshot; la preservación de tales datos no implica equivalencia semántica

Las características importadas seleccionadas de PivotTable y PivotCache también validan el XML nativo preservado antes de comparar la proyección tipada, incluidos los metadatos de campos anidados y los registros de caché; los namespaces, atributos, hijos y cargas de extensión desconocidos fallan explícitamente dentro de los mismos límites cooperativos de características, mientras que las vinculaciones modeladas de cachés de slicers siguen soportadas

TSimpleDomNode.RawName expone el QName original del elemento junto al Name normalizado por el reader, permitiendo inspección sensible a namespaces sin cambiar la coincidencia de nombres existente del parser

Los ajustes del libro y los metadatos opacos del paquete permanecen fuera de la comparación; la comparación de estilos base no evalúa la apariencia de formatos condicionales ni de estilos de tabla, y la comparación de dibujos preserva los límites soportados de imágenes, cuadros de texto, gráficos y grupos ordenados de la instantánea semántica

Propiedades efectivas de texto enriquecido

TMsoFbtOpt.StoredPids devuelve los identificadores de propiedades OfficeArt almacenados en orden ordenado, mientras que TMsoFbtSp.PersistentFlags expone los flags nativos de la forma sin asignar propiedades ni anclajes

TMsoShapeContainer.HasPreservedObjectData identifica los bytes de cola OBJ retenidos; HasOrdinaryEmbeddedPictureObjectData comprueba que las colas de imágenes contengan solo formatos de portapapeles reconocidos y registros de flags de imagen en cero, y rechaza los registros vinculados o desconocidos sin copiar la carga útil

TMSOShapeTextBox.HasValidTextRuns comprueba los límites de runs TXO almacenados y los campos reservados sin crear runs; TMsoDrawing.HasUnmodeledAppearance identifica datos nativos de dibujo que el parser tipado omite, permitiendo que la captura rechace explícitamente una apariencia sin resolver

TXLSXRichTextRun.BoldSet, ItalicSet, StrikethroughSet, UnderlineSet, VertAlignSet y ColorSet distinguen las propiedades de fuente heredadas de las anulaciones explícitas, incluidos los flags falsos, none, baseline y los colores automáticos; los setters marcan la propiedad como explícita incluso cuando su valor coincide con el valor inicial predeterminado del nuevo run

TXLSXRichText.HasUnsupportedAppearance reporta las propiedades nativas enriquecidas que el modelo tipado de runs no puede representar; la captura portable y la comparación efectiva de texto enriquecido rechazan explícitamente esos runs, mientras que las propiedades compartidas/en línea de runs soportadas y los espacios en blanco retienen su semántica importada

La comparación efectiva de texto enriquecido aplica las anulaciones explícitas en falso antes de fusionar runs adyacentes iguales; las propiedades heredadas y las limpiadas explícitamente permanecen distintas durante la deduplicación de cadenas compartidas y los round trips XML soportados

TXMLReader.ResolveNamespaceUri(Prefix, Uri) resuelve la vinculación de namespace actualmente en alcance sin cambiar la posición del reader, devolviendo false cuando no existe vinculación; un prefijo vacío solicita el namespace predeterminado, y los QNames crudos siguen disponibles para inspección sensible a namespaces

Los registros inmutables de rich/scene, la extensión de origen de captura y el contrato de transferencia HXRSNP02 se describen en Salida headless portable

Inspección separada de estilos y ejes

TXLSXWorksheet.ReadSemanticCellStyle(Row, Col) devuelve un TXLSSemanticCellStyle separado para coordenadas válidas de base 1, resolviendo estilos almacenados y empaquetados, valores predeterminados de la hoja, superposiciones de estilo aplicables, formatos de fecha implícitos, colores indexados y colores de tema sin materializar celdas ni cambiar los pools de estilos; la llamada pública adquiere un lease de lectura y excluye las reglas de formato condicional y de estilos de tabla

TXLSXWorksheet.GetStoredAxisSpans(IsRow) devuelve TXLSXAxisSpans, un arreglo de registros TXLSXAxisSpan con FirstIndex y LastIndex inclusivos de base 1; reporta las huellas de metadatos de tamaño, oculto, esquema y contraído, preserva los tramos compactos de altos de filas repetidas, y deja el predeterminado efectivo de la hoja disponible a través de sus propiedades ordinarias

Los tramos devueltos describen huellas de metadatos almacenados en lugar de una partición normalizada disjunta; las aplicaciones que comparan dos ejes pueden combinar sus límites primero y último, y luego inspeccionar el estado efectivo una vez por cada intervalo resultante

TXLSXWorksheet.GetStoredStyleRegions devuelve TXLSXStyleRegions separados que contienen los límites inclusivos FirstRow, FirstCol, LastRow y LastCol de las huellas compactas de formato virtual; estas huellas pueden solaparse, y los llamadores leen su apariencia efectiva con ReadSemanticCellStyle

TXLSXWorkbook.ReadSemanticFeatures(Kind, Sheet, MaxBytes, MaxItems) devuelve entradas separadas TXLSXSemanticFeatures con un Key estable, bytes canónicos de Definition y un ItemCount contado; los límites positivos opcionales son 64 MiB y 1,000,000 de entradas por defecto

TXLSXSemanticFeatureKind contiene xlsxSemanticDefinedNames, xlsxSemanticDataValidations, xlsxSemanticConditionalFormats, xlsxSemanticTables, xlsxSemanticDrawings, xlsxSemanticPivotTables, xlsxSemanticPivotCaches, xlsxSemanticSlicers, xlsxSemanticSlicerCaches, xlsxSemanticTimelines y xlsxSemanticTimelineCaches

Los nombres definidos y los tres tipos de cachés usan ámbito de todo el libro y permiten una hoja nil; los demás tipos exigen una hoja perteneciente al libro, las reglas y los dibujos retienen su secuencia almacenada, y los arreglos y búferes devueltos son copias propiedad del llamador; estos readers adquieren leases de lectura y heredan la cobertura tipada y el comportamiento explícito con datos no soportados descrito arriba

TXLSXWorksheet.ReadSemanticRichText(Row, Col, IncludePlainText, MaxBytes, MaxItems, ConsumedItems) devuelve bytes canónicos separados de runs para coordenadas de base 1, o un búfer vacío cuando no hay texto enriquecido y IncludePlainText es false; el ConsumedItems: PInteger opcional recibe el conteo de runs capturados, y la captura de texto plano retiene el almacenamiento empaquetado

TXLSPivotCacheField.GroupItemTypes[Index] expone el tipo tipado correspondiente a GroupItemLabels[Index] y rechaza un índice fuera del dominio almacenado de etiquetas agrupadas

Metadatos de fórmulas y callbacks de consultas Pivot

TXLSGetCellFormulaText y TXLSCalculator.OnGetCellFormulaText leen el texto de expresiones almacenado usando un SheetIndex de base 1 y Row/Col de base 0, devolviendo lxOk o un código de error tipado y respetando la protección formula-hidden; TXLSGetPivotTable y OnGetPivotTable localizan una tabla prestada usando un SheetIndex de base 1 y coordenadas de rango de base 0

Los motores de libros conectan estos callbacks opcionales en contextos de cálculo normal, de solo lectura y aislado; los callbacks no recalculan destinos, no refrescan fuentes Pivot ni transfieren propiedad

TXLSPivotDataConstraint almacena un FieldName y un Item tipado, con TXLSPivotDataConstraints coleccionando pares campo/item; TXLSPivotTable.GetDataValue consulta un agregado visible soportado desde una instantánea separada de tabla/caché local, e IntersectsQueryRange usa límites de hoja de base 1 incluidas las celdas modeladas de filtros de reporte

TlxPivotQueryBudget recibe estimaciones de trabajo y memoria de forma síncrona y devuelve si la evaluación puede continuar; EXLSPivotQueryBudget y EXLSPivotQueryUnsupported distinguen los límites agotados de los modelos de caché o agregación no soportados

TXLSPivotCache.QueryModelIsComplete registra la preparación de consultas decodificada independientemente de la completitud de la reproducción cruda BIFF; QueryRecordsValid expone la validez de los registros importados y SetQueryRecordValidity aplica la precedencia del form-reader sin refrescar registros

Bytes de páginas de códigos explícitos

MiembroContrato
XlsEncodeCodePage(Text, CodePage, MaxBytes = -1)Devuelve un RawByteString con los bytes exactos en una página explícita orientada a bytes distinta de cero, preserva los null incrustados, verifica la identidad de round trip Unicode, y lanza EConvertError para texto no representable; un MaxBytes no negativo conserva el prefijo más largo de caracteres completos que cabe, mientras que -1 deja la longitud sin acotar; la validación cubre el texto original antes del truncamiento
XlsDecodeCodePage(Bytes, CodePage)Devuelve un WideString desde la codificación de bytes explícita y preserva los null incrustados; las secuencias de bytes mal formadas siguen el comportamiento del decodificador instalado; la página 0 y la página UTF-16 1200 se rechazan porque esta API no infiere una configuración regional ANSI ni maneja un flujo de bytes UTF-16
TXLSBlob.GetCompressedUnicodeString(Index, Count)Devuelve las unidades de código exactas de Unicode comprimido BIFF8 de U+0000 a U+00FF, preserva los null incrustados, valida el rango de bytes solicitado, y no interpreta esos bytes mediante una página de códigos
TXLSBlob.AddRawStringAnexa los bytes codificados exactos sin una conversión de página de códigos AnsiString y actualiza DataLength; una entrada vacía no anexa bytes
TXLSCalculator.CodePage, TXLSFormula.FCodePageSeleccionan la codificación de bytes explícita de fórmulas legadas, con CP1252 por defecto; el libro Classic propietario sincroniza su calculadora al inicializarse o cuando se llama a SetCodePage
TXLSFontList.GetFont, TXLSNumFormatList.GetNumFormatBlob, TXLSStyles.GetStyleBlobEl argumento opcional CodePage es 1252 por defecto y codifica texto BIFF5; la salida BIFF8 permanece Unicode
TMsoDrawing.StoreNotesEl argumento opcional CodePage es 1252 por defecto y codifica el texto de comentarios previo a Unicode; el límite existente de tamaño de registro de comentarios ordinarios BIFF5 se mantiene; esto no agrega campos de autor, texto enriquecido ni geometría ausentes de ese formato de registro
TXLSCustomName.SetSourceDataLos argumentos opcionales FileFormat y CodePage identifican los bytes crudos NAME importados y son xlExcel97 y 1252 por defecto; los registros crudos se reutilizan solo cuando su formato y codificación legada coinciden con la salida solicitada
TXLSFormulatArrayItem.GetDataSize, TXLSFormulatArray.GetDataSize, TXLSFormulatArray.GetData, TXLSFormulatArrays.GetDataSize, TXLSFormulatArrays.GetData, TXLSCompiledFormula.GetExternalDataEl argumento opcional ACodePage es 1252 por defecto; el tamaño y la salida de los arreglos de cadenas legados usan el mismo conteo de bytes codificados, mientras que las cadenas BIFF8 permanecen Unicode

Pase el RawByteString devuelto directamente a AddRawString o a una operación de flujo orientada a bytes; convertirlo a un AnsiString predeterminado puede recodificar sus bytes en sistemas FPC nativos

Nombres definidos clásicos y bloques de fórmulas de matriz

TXLSCustomName deferred compilationClearDefinition libera el AST compilado de RefersTo conservando la cadena de definición almacenada y los bytes crudos NAME importados, Compile reconstruye el AST desde la definición almacenada e informa el éxito, y GetCompiledFormula recompila automáticamente, de modo que un nombre limpiado se resuelve de nuevo en su siguiente lectura; PeekCompiledFormula devuelve el AST actual sin disparar esa recompilación, y StoredDefinition expone el origen de la definición sin analizar
TXLSCustomName identity and flagsStoreIndex expone la posición de almacenamiento del nombre dentro de su colección, NameID su identidad numérica única en el libro tal como la usa el motor de cálculo, y IsHidden e IsMacro leen y escriben los flags hidden y macro del registro NAME de BIFF
TXLSFormulatArray.RowsCount, ColsCountInforman las extensiones de filas y columnas del bloque de fórmulas de matriz analizado; ambas comienzan en uno y acotan el dominio de items por celda que llevan los métodos de emisión

Pools clásicos de fuentes, formatos y estilos

TXLSFontList stored font attributesLas propiedades indexadas reflejan la clave de fuente almacenada en un índice de lista de base 0: Name, Size, ColorIndex, Bold, Italic, Strikethrough y Underline se unen a OutLineFont, Shadow, SubScript, SuperScript, Family y CharSet para inspección de solo lectura
TXLSNumFormatList.AddValue, FmtExistsAddValue registra una cadena de formato y devuelve su índice, mapeando las escrituras de formatos integrados a sus ids canónicos y marcando los formatos de fecha y hora; FmtExists informa si una cadena de formato personalizado ya está registrada
TXLSNumFormatList.IsDateFormat, IsDateFormatValueIsDateFormat informa si el formato almacenado en un índice está marcado como formato de fecha u hora, mientras que IsDateFormatValue prueba directamente una cadena de formato buscando tokens de fecha y hora
TXLSStyles.AddStyle, AddBuiltinStyleAddStyle registra un estilo de celda personalizado con nombre vinculado a un índice de registro XF, y AddBuiltinStyle registra un estilo de celda integrado por su id integrado junto con el nivel de esquema usado por los estilos de nivel de filas y columnas
TXLSStyles.BuiltinStyleNameFunción de clase que devuelve el nombre de visualización canónico del estilo de celda integrado de Excel para los ids integrados 0 a 53; los ids fuera de rango devuelven un nombre vacío para que los writers recurran a la forma cruda de bytes integrados

Aplicaciones auxiliares de paquete y almacenamiento binario

TXLSXOpaquePackageLoadWorkbookXmlMetadata captura el estado XML a nivel de libro de trabajo, MarkAllPartsClean reinicia los flags de suciedad, y WorkbookExtLstXml más WorkbookRootAttributesXml exponen los fragmentos XML del libro de trabajo preservados; IsDiscardedPart informa si un nombre de parte fue eliminado por una operación de descarte, como la limpieza de Web Add-ins
TXLSFileStorageLoad, LoadFolder, Write y WriteFolder transfieren contenido de archivos compuestos; Child y Count enumeran las entradas hijas, cada una un TXLSFileItem — un nodo de almacenamiento con nombre cuya subclase TXLSFileStream lleva los bytes almacenados como un TXLSBlob con DataSize informando la longitud de la carga útil
TXLSBlobAdd agrega otro blob, mientras que AddByte, AddWord, AddLong, AddDouble, AddString y AddWideString agregan valores con tipos; CopyData, CopyMem, FillByte, Write, Clear, Reset y Dump gestionan el contenido; Buff y DataLength exponen el almacenamiento
TXLSBlobListAppend, AppendList, CopyData y Write combinan o emiten entradas; Entries y TotalSize exponen el estado de la lista
TXLSWideStringBuilderAddString agrega texto y Length informa el número de caracteres acumulados

Novedades de dibujo y del visor de libros de trabajo

TXLSFillFormatPictureFill configura un relleno de forma respaldado por imagen, mientras que FillType selecciona el tipo de relleno (sólido, degradado, imagen o textura preestablecida) que emite el escritor
TXLSShapesAddScrollBar y AddSpinner crean controles de formulario — los objetos TXLSScrollBar y TXLSSpinner devueltos exponen la geometría del control y la celda vinculada, y el spinner agrega los límites de paso Min, Max e Inc — mientras que RegisterScrollBar y RegisterSpinner registran controles cargados desde un libro de trabajo
TXLSWorkbookViewerCanUndo y CanRedo informan la disponibilidad del historial de transacciones; ClearSelectedRange, CopySelectedRange, PasteSelectedRange y PasteText operan sobre el rango seleccionado, mientras que ReferencePickMode habilita la selección interactiva de referencias de celda o rango
TXLSWorkbookEditHistoryEl motor de transacciones de contenido headless en lxWorkbookViewer vincula un libro Classic o XLSX prestado y proporciona preflight de protección de rangos, copia y pegado de texto Unicode, borrado de rangos, y una transacción de undo/redo por operación; consulte las transacciones de edición headless
TXLSCellContentSnapshotAmbas clases de hojas de cálculo exponen ReadCellContent(Row, Col) y RestoreCellContent(Snapshot) para la captura y restauración separada de contenido nativo en coordenadas de base 1 de la hoja de origen; la captura no evalúa fórmulas, no crea celdas ausentes ni materializa almacenamiento empaquetado, y la carga útil inmutable NativeData preserva el texto enriquecido, las cachés de fórmulas y el estilo de la celda; la restauración directa es una operación de bajo nivel cuyo llamador debe validar la protección y los límites estructurales

Paginación, salida de imágenes e impresión

XLSValidateCachedChartSceneModel, XLSRecordCachedChartSceneHacen preflight de los metadatos de gráficos en caché sin resolver celdas y registran primitivas vectoriales y de texto acotadas para un gráfico separado en lxPortableChart, devolviendo TXLSPortableSceneObjects y contabilidad de items, bytes y texto; los puntos de entrada de lxPagination retienen la misma implementación compartida para los llamadores Windows existentes; el subconjunto actual cubre gráficos ordinarios de columnas, barras, líneas, dispersión, circular, de anillo y de área de una sola serie con un grupo de trazado primario, y el registro exige metadatos nativos validados, puntos de caché finitos estrictamente ordenados y un modelo de gráfico sin adjuntar; consulte el registro de gráficos en caché
TXLSGraphicsBackendDrawTiledImage pinta un fondo de hoja repetidamente en la región de página recortada
TXLSPaginationModelCompactRangeMode, IncludeDrawings, IncludeGridlines, IncludeCellBorders y PaintPageBackground controlan el contenido de la página; RenderDPI, RenderColorMode y RenderSession exponen la resolución de salida, el manejo de color y la sesión de renderizado activa
TXLSCellImageExporterMeasure calcula dimensiones en píxeles para rangos Classic o XLSX; ImageFormat, JpegQuality, MaxPixels, MaxBytes, IncludeObjects, IncludeGridlines, IncludeCellBorders, BackgroundColor, TransparentBackground, BeforePaint, AfterPaint y PaginationModel configuran y observan el renderizado
TXLSPageImageExporterBeforePaint, AfterPaint, MaxPixels, MaxBytes, BackgroundColor y TransparentBackground aplican los mismos hooks de pintura y límites de seguridad de salida a la exportación de imágenes paginadas
TXLSPrintDocumentPrintWorksheet, PrintWorkbook y PrintAllVisibleSheets envían contenido Classic o XLSX a la impresora VCL; FirstPage, PrintRangeOnly, Collate, Copies, OnBeforeNewPage y OnAfterGeneratePage controlan el trabajo de impresión

Modelos de gráfico clásicos y objetos de gráfico de la hoja de cálculo

TXLSXChartSeriesLineVisible, LineColorRGB y LineWidthPoints describen un trazo de serie independiente; LineStyleSet, LineColorSet y LineWidthSet preservan los ajustes explícitos, y EffectiveLineVisible resuelve la convención legada de solo relleno; MarkerFillSet y MarkerBorderSet distinguen el negro explícito de los colores automáticos de marcadores, mientras que el registro portable de líneas y dispersión soporta diámetros de círculo de 2 a 72 puntos; los setters de color y ancho validan antes de mutar y obedecen los leases de lectura del libro
TXLSChartSeriesAddTrendline y AddErrorBars crean anotaciones de series con tipos, mientras que TrendlineCount y ErrorBarCount informan los tamaños de sus colecciones; el campo existente MarkerSize retiene twips crudos de BIFF, mientras que el getter de solo lectura MarkerSizePoints devuelve ese valor dividido entre 20, incluidos tamaños de puntos fraccionarios
TXLSChartAxisHasAxcExtFlag comprueba un flag crudo AXCEXT sin exigir que el llamador decodifique la máscara de bits
TXLSChartModelAxisGroupCount informa el número de grupos de ejes principales y secundarios decodificados del gráfico
TXLSCustomChartAddAreaData agrega un elemento de área preconstruido para el reenlace de fórmulas al guardar, y ApplyDateAxisModel aplica un modelo de eje de fechas con tipos a los registros crudos del gráfico; GetStoredRecordInfo lee un ID de registro de base 0 y un conteo de bytes sin asignación, mientras que ReadStoredRecord(Index, MaxBytes) comprueba el límite de bytes antes de devolver bytes separados en un TXLSChartStoredRecord, sin evaluar fórmulas ni modificar cachés
TXLSWorksheetAddChartObject ancla un marco de gráfico en la hoja de cálculo y lo conecta al constructor de gráficos compartido
TXLSXChartLayoutResolverTryResolve resuelve un rectángulo de diseño con validación de tamaño opcional, y ResolveChart calcula los rectángulos del gráfico, título, leyenda, área de trazado y ejes

Modelo de decodificación de gráficos con tipos

El estado decodificado del gráfico se expone como registros y enums sencillos para que el código de inspección nunca tenga que recorrer registros BIFF crudos: TXLSChartInfo lleva el resumen decodificado del gráfico con TXLSChartTypeFamily (cfBar, cfLine, cfPie, cfArea, cfScatter, cfRadar, cfDoughnut, cfSurface, cfBubble), cada serie informa su TXLSChartSeriesType, y TXLSChart3DState más TXLSChart3DInfo describen las vistas tridimensionales. TXLSChartAxisType (catCategory, catValue, catSeries, catDate) y TXLSChartLegendPosition clasifican ejes y leyendas, mientras que el modelo de eje de fechas usa TXLSChartDateUnit (xcduDays, xcduMonths, xcduYears) y TXLSChartDateValues. TXLSCustomChart expone el modelo decodificado a través de TXLSChartInfo; las anotaciones de líneas de tendencia y barras de error son objetos con tipos (TXLSChartTrendline, TXLSChartErrorBars) alcanzables desde cada serie

Registros de autoría de gráficos

La autoría de hojas de gráfico y del constructor acepta registros sencillos en lugar de grafos de objetos: TXLSChartTrendlineInfo, TXLSChartErrorBarsInfo, TXLSChartDataLabelsInfo y TXLSChartSeriesStyleInfo rellenan las entradas de serie que se pasan a TXLSWorksheets.AddChartSheet y al constructor de gráficos compartido, y TXLSPivotChartInfo describe el enmarcado de gráfico dinámico usado cuando un gráfico se adjunta a una tabla dinámica

Inspección de rellenos de gráficos clásicos

TXLSCustomChart.GetChartModel decodifica las tablas de propiedades OfficeArt nativas soportadas y las tablas de propiedades terciarias en registros GelFrame, incluidas las propiedades que siguen a entradas de carga útil complejas; la representación existente del constructor sigue soportada, y los límites de tabla mal formados dejan el relleno tipado previo sin cambios y reportan el registro no soportado

La inspección de gráficos valida la carga útil completa almacenada de texto y anotaciones antes de agregar estado tipado: los nombres de líneas de tendencia truncados o los separadores de etiquetas de datos reportan su ID de registro a través de _UnsupportedSemanticRecordID, mientras que los encabezados SeriesText nil o de tamaño insuficiente reportan ese registro como no soportado tanto para BIFF5 como para BIFF8; una extensión declarada de texto de serie que excede su carga útil lanza EReadError, libera el modelo parcial y deja los registros almacenados del gráfico sin cambios

El getter de marcadores y la inspección de rellenos preservan el almacenamiento crudo del gráfico; la ruta de captura de apariencia declarada valida por separado los gráficos de núcleo soportados, mientras que las sumas de verificación no verificadas de extensiones de títulos enriquecidos o de formas siguen sin soportarse

Readers acotados de gráficos, cadenas y fuentes almacenadas

TXLSChartStoredBytes es un arreglo de bytes separado y TXLSChartStoredRecord contiene RecordId y Data; estos readers inspeccionan el almacenamiento de origen retenido sin crear un modelo de gráfico decodificado ni evaluar fórmulas

TXLSCustomChart.GetStoredRecordInfoDevuelve un ID de registro y una longitud de bytes contada para un índice de registro de base 0 sin copiar su carga útil
TXLSCustomChart.ReadStoredRecordCopia una carga útil después de validar el índice y el MaxBytes no negativo; el límite de bytes predeterminado es High(Int64)
TXLSCustomChart.ReadStoredFormulaLeafInfoInspecciona una hoja BRAI almacenada coherente usando la calculadora de origen exacta y cuotas no negativas de bytes y texto; las calculadoras ajenas o los propietarios de traducción devuelven una hoja no soportada, y AllowUnboundBiff es False por defecto
TXLSCustomChart.ReadStoredFormulaLiteralDevuelve un literal separado solo después de las mismas comprobaciones de procedencia y cuotas; una hoja no soportada lanza EInvalidOperation
TXLSCustomChart.SourceBiffVersion, SourceCodePageProcedencia de solo lectura de los registros del gráfico retenidos
TXLSStringTable.GetStoredStringLength, ReadStoredStringCuenta el almacenamiento UTF-16 existente usando la identidad de cadena de base 1 de la tabla, y luego copia solo cuando la cuota de caracteres no negativa lo cubre; las identidades inválidas y el almacenamiento UTF-16 incompleto se rechazan
TXLSFontList.GetStoredNameLength, ReadStoredNameComprueba la clave de fuente almacenada en el índice de base 0 de la lista antes de contar o copiar su nombre bajo una cuota de caracteres no negativa
TMsoFbtOptItem.HasStoredUnicodeStringComprueba los metadatos acotados almacenados de cadenas Unicode complejas sin materializar una cadena
TMsoShapeContainer.HasOrdinaryChartObjectDataComprueba el tipo de objeto de gráfico almacenado, la identidad de objeto distinta de cero, los flags soportados y la ausencia de datos desconocidos de cola de objeto

Mantenimiento de la tabla de cadenas compartidas y emisión de SST

TXLSStringTable en lxStringTable respalda las cadenas compartidas del libro Classic; los miembros de abajo cubren el registro del lado del reader, el mantenimiento de ranuras y la emisión cruda de SST para guardados de round trip

KeyExists, AddWithExtrasKeyExists informa si una cadena ya ocupa una ranura; AddWithExtras es el acompañante del lado del reader de Add que adjunta la carga útil cruda rgRun de texto enriquecido y rgExtRst fonética a la entrada sin elevar su conteo de referencias, porque cada celda que la referencia restaura después el conteo a través de la ruta normal de agregación
Replace, ReplaceIndexReplace suelta una referencia en la ranura antigua, liberándola cuando su conteo llega a cero, y vuelve a agregar el texto, devolviendo la ranura resultante; ReplaceIndex mueve una referencia de la ranura antigua a la nueva sin copiar texto
AddSSTData, InitExtIndexAddSSTData emite la carga útil cruda del SST a la lista de blobs del writer; la sobrecarga que recibe una tabla de remapeo de runs de fuente reescribe cada índice de fuente FormatRun a la salida ([MS-XLS] §2.5.129) de modo que los runs enriquecidos siguen el reordenamiento de fuentes al guardar, mientras que una tabla vacía conserva la emisión verbatim legada, e InitExtIndex numera los buckets ExtSST sobre las ranuras vivas antes de la emisión
SlotCount, ExtIndex, ParsedExtSSTDsst, ParsedExtSSTItemCount, BiffSizeLimitSlotCount es el límite superior de base 1 para la iteración de ranuras con las ranuras eliminadas leyéndose vacías, ExtIndex resuelve una ranura a su número de bucket ExtSST o -1 para una ranura que no está viva, ParsedExtSSTDsst y ParsedExtSSTItemCount retienen los valores importados del encabezado EXT/SST, y BiffSizeLimit acota cada fragmento de registro emitido — el writer Classic lo fija a 2080 bytes para BIFF5 y 8224 para BIFF8

Adjuntos PDF, firmas y exportación HTML

IXLSPDFAttachmentSourceWriteTo transmite por flujo los bytes del adjunto hacia la exportación PDF sin exigir que el exportador sea propietario de los datos de origen
TXLSPDFExportAttachmentDuplicatePolicy selecciona el manejo de nombres duplicados, AttachmentSpoolThreshold controla el spooling de adjuntos, y DocumentLanguage escribe los metadatos de idioma del documento
TXLSPDFSignatureTextAlign, TextSize, TextColor, TextBold y TextItalic configuran la apariencia de la firma visible
TXLSHTMLExportViewMode (tipo TXLSHtmlViewMode: vista actual o tabla completa de la hoja de cálculo) elige la presentación HTML, mientras que HotTrackTargets (conjunto de TXLSHtmlHotTrackTarget) y HotTrackColor configuran el resaltado interactivo de celdas y objetos
TXLSXHtmlExportOptionsViewMode, HotTrackTargets y HotTrackColor proporcionan los controles equivalentes de exportación HTML XLSX

Auditoría de cálculo y controles del libro de trabajo

TXLSCalculationAuditReportTruncated informa un truncamiento por límite de problemas, StackTruncated informa el truncamiento de marcos de la pila de llamadas, e Issues indexa los problemas de cálculo registrados
TXLSUserFunctionRegistryGeneration cambia siempre que cambia el conjunto de funciones de usuario registradas, lo que permite invalidar los enlaces de fórmulas en caché
EXLSReportRecoverableDataCategory identifica la categoría de datos de informe recuperables presentada al llamador
IXLSWorkBookManualCalculationThreadCount limita el número de trabajadores usado por el cálculo manual
TXLSXDataValidationHasUnknownImeMode informa un valor de modo IME que HotXLS preservó pero no reconoce
TXLSXTableColumnCalculatedFormulaArrayRaw y ColumnTotalsFormulaArrayRaw exponen el texto original de las fórmulas de matriz de las columnas de la tabla

Compatibilidad con el encuadre heredado de PivotCache

TXLSPivotCacheRawBucketIndex identifica la posición del subflujo de origen, RawFramingIsLegacy identifica un encuadre antiguo de HotXLS, RawModelIsComplete informa si el modelo tipado representa todos los registros, y CanUpgradeFraming informa si la re-emisión tipada opcional es segura
TXLSPivotCacheStreamId expone la identidad del flujo de caché clásico, SourceDataType expone el tipo de datos de origen clásico, y RawHasStorageStream informa si una caché cargada provino de un flujo de almacenamiento PivotCache independiente
TXLSWorkbookUpgradeLegacyPivotCacheFraming habilita la reescritura solo de los encuadres de caché heredados de HotXLS cuyo modelo tipado está completo; la reproducción cruda ordinaria de la caché sigue siendo el valor predeterminado

StreamId se escribe como el registro SXStreamID ([MS-XLS] §2.4.303) y se repite como el campo idstm del encabezado SXDB, que debe coincidir con él; SourceDataType se escribe como el registro SXVS ([MS-XLS] §2.4.317: $0001 hoja de cálculo, $0002 externa, $0004 consolidación, $0010 escenario) y se repite como el campo vsType del encabezado SXDB, que debe coincidir con él. Las cachés construidas desde un rango de hoja de cálculo empiezan con el tipo hoja de cálculo, mientras que las cachés leídas de un archivo conservan el valor que traía su subflujo, de modo que el escritor BIFF nunca deja un campo SXDB nombrando un registro que no emitió; RawHasStorageStream marca una caché cargada desde su propio flujo de almacenamiento cuyo descriptor global del libro de trabajo precede a los registros en caché

Integración con el portapapeles y opciones de pegado

TXLSPasteOption = (xlpoValuesOnly, xlpoInsertRows, xlpoInsertCols);
TXLSPasteOptions = set of TXLSPasteOption;

function XLSGetClipboardText: WideString;
function XLSSetClipboardText(const Text: WideString): Boolean;
function XLSSetClipboardTextAndHtml(const Text: WideString;
  const Html: AnsiString): Boolean;
function XLSBuildHtmlClipboard(const Html: AnsiString): AnsiString;
function XLSEncodeClipboardField(const Text: WideString): WideString;
function XLSClipboardHasText: Boolean;
function XLSParseClipboardGrid(const ClipboardText: WideString;
  Loader: TXLSCSVLoader): Boolean;
function XLSClipboardHasXmlSpreadsheet: Boolean;
function XLSGetClipboardXmlSpreadsheet: WideString;
function XLSParseXmlSpreadsheet(const XmlText: WideString;
  Loader: TXLSCSVLoader): Boolean;
function XLSClipboardHasBiff8: Boolean;
function XLSGetClipboardBiff8: AnsiString;
function XLSReadClipboardPasteData(out Biff8: AnsiString;
  out Text: WideString): Boolean;
function XLSSetClipboardBiff8(const Biff8: AnsiString;
  const Text: WideString; const Html: AnsiString = ''): Boolean;
      
Las opciones de pegado son compartidas por las sobrecargas de PasteFromClipboard de ambas fachadas: xlpoValuesOnly conserva los valores en caché de las celdas con fórmula y omite formatos y combinaciones, mientras que xlpoInsertRows y xlpoInsertCols desplazan el contenido existente antes de que el bloque aterrice
Los asistentes envuelven el portapapeles de Windows para la interoperabilidad de hojas de cálculo: los asistentes de texto usan CF_UNICODETEXT (con respaldo en CF_TEXT a través de la página de códigos ANSI actual), XLSSetClipboardTextAndHtml escribe texto y una carga útil con estilos HTML Format en una sola transacción, XLSBuildHtmlClipboard calcula los desfases de bytes CF_HTML para un documento o fragmento, y XLSEncodeClipboardField entrecomilla un campo separado por tabuladores. XLSParseClipboardGrid analiza el texto del portapapeles como filas separadas por tabuladores con el mismo oleo de tipos que TXLSCSVLoader usa para CSV, XLSParseXmlSpreadsheet ejecuta el mismo llenado del loader sobre una carga útil SpreadsheetML 2003 obtenida con XLSGetClipboardXmlSpreadsheet, y los asistentes Biff8 detectan y leen el flujo nativo que el propio Excel coloca en el portapapeles, de modo que los datos pegados conservan valores, fórmulas y formato sin pérdida de texto
XLSReadClipboardPasteData captura el flujo Biff8 y el texto Unicode bajo un solo bloqueo del portapapeles, así que un pegado nunca tiene que reabrir el portapapeles entre las dos lecturas ni pierde ninguno de los dos formatos ante un titular concurrente. XLSSetClipboardBiff8 es el lado de escritura correspondiente: coloca el flujo de archivo compuesto BIFF8, el texto Unicode delimitado por tabuladores y una carga útil CF_HTML opcional en una sola transacción — pase un Text o un Html vacíos para omitir cualquiera de los dos formatos acompañantes, mientras que la parte Biff8 es obligatoria

Resolución del texto de visualización de celdas

TXLSCellDisplayMode = (xcdmFormattedValue, xcdmFormulaText,
  xcdmSuppressedZero);

TXLSCellDisplayOptions = record
  ShowFormulas: Boolean;
  ShowZeros: Boolean;
  SheetProtected: Boolean;
  FormulaWidthFactor: Double;
  DateSerialZero: Double;
end;

TXLSCellDisplayInput = record
  HasFormula: Boolean;
  FormulaHidden: Boolean;
  IsNumericZero: Boolean;
  FormulaText: WideString;
  FormattedText: WideString;
end;

TXLSCellDisplayResult = record
  Mode: TXLSCellDisplayMode;
  Text: WideString;
  TreatAsText: Boolean;
  EffectiveWidthFactor: Double;
end;

function XLSDefaultCellDisplayOptions: TXLSCellDisplayOptions;
function XLSNormalizeFormulaDisplayText(const FormulaText: WideString): WideString;
function XLSResolveCellDisplay(const Options: TXLSCellDisplayOptions;
  const Input: TXLSCellDisplayInput): TXLSCellDisplayResult;
      
Un resolvedor compartido decide qué muestra una celda para un estado de vista dado: fórmulas en lugar de valores, ceros suprimidos, texto de fórmula oculto en hojas protegidas, y el factor de ancho doble que Excel aplica a la visualización de fórmulas. El visor de libros de trabajo y los renderizadores lo llaman a través de sus puntos de entrada de opciones de visualización, y las aplicaciones pueden llamar a XLSResolveCellDisplay directamente con sus propios registros de entrada; XLSDefaultCellDisplayOptions devuelve los valores predeterminados canónicos y XLSNormalizeFormulaDisplayText normaliza una cadena de fórmula para visualización

Objetos de validación de datos clásicos

TXLSDataValidationType = (xlsDvAny, xlsDvWhole, xlsDvDecimal, xlsDvList,
  xlsDvDate, xlsDvTime, xlsDvTextLength, xlsDvCustom);
TXLSDvErrorStyle = (xlsDvErrStop, xlsDvErrWarning, xlsDvErrInformation);

TDVRange = class;             { one validation rule over one or more ranges }
TDVRangeList = class;         { the per-sheet rule collection }
TDataValidator = class;       { engine that checks edits against the rules }
      
Los asistentes con tipos TXLSWorksheet.Add*Validation crean reglas TDVRange en el TDVRangeList de la hoja; cada regla lleva su TXLSDataValidationType, límites, mensajes de entrada y error, y TXLSDvErrorStyle. TDataValidator evalúa una edición contra las reglas e informa si el valor es aceptable, que es también la comprobación detrás de los mensajes de validación del propio Excel

Escaneo y resolución de colores indexados

TXLSIndexedColorKind = (xickPalette, xickAutomatic, xickSystem, xickInvalid);
TXLSSystemColorRole = (xscrNone, xscrWindowText, xscrWindowBackground,
  xscrChartText, xscrChartBackground, xscrChartNeutral, xscrToolTipText);

TXLSIndexedColorResolution = record
  Kind: TXLSIndexedColorKind;
  RawIndex: Int64;
  PaletteSlot: Integer;
  SystemColorRole: TXLSSystemColorRole;
  ARGB: LongWord;
  HasResolvedColor: Boolean;
end;

TXLSNearestIndexedColorMatch = record
  InputARGB: LongWord;
  ColorIndex: Integer;
  PaletteSlot: Integer;
  ARGB: LongWord;
  DistanceSquared: Double;
  ExactMatch: Boolean;
end;

TXLSIndexedColorUsageKind = (xicukFont, xicukFillForeground,
  xicukFillBackground, xicukGradient, xicukBorder, xicukConditionalFormat,
  xicukChart, xicukShape, xicukComment, xicukWorksheet, xicukOther);
      
Estos registros respaldan los métodos a nivel de libro de trabajo ResolveIndexedColor, NearestIndexedColor y ScanIndexedColorUsage: una resolución informa cuál de las cuatro fuentes TXLSIndexedColorKind originó un token indexado, junto con su ranura de paleta, rol de color de sistema y ARGB normalizado; una coincidencia más cercana agrega la distancia RGB al cuadrado y el flag de coincidencia exacta; y el escaneo de uso etiqueta cada categoría de consumidor que bloquea una ranura de paleta. La biblioteca mantiene una caché interna TXLSIndexedColorMatcher clasificada por generación de paleta — FindNearest responde desde ella a las consultas de color más cercano y UpdateSlot parchea una ranura de paleta — de modo que las resoluciones repetidas no asignan memoria

Funciones auxiliares de referencias A1

function XLSA1CellRef(ARow, ACol: Integer): WideString;
function XLSTryParseA1CellRef(const ARef: WideString;
  out ARow, ACol: Integer): Boolean;
function XLSTryParseA1RangeRef(const ARef: WideString;
  out ARow1, ACol1, ARow2, ACol2: Integer): Boolean;
      
Asistentes independientes para la misma notación A1 que aceptan las APIs del libro de trabajo: formatean coordenadas de base 0 como una referencia de celda A1 y analizan referencias de celda o rango, devolviendo False ante entradas mal formadas en lugar de lanzar excepciones

Ver también