Documentación HotXLS

Tokens de fórmula y funciones de usuario

HotXLS expone flujos de tokens de fórmula propiedad del llamador para inspección sin pérdida y escritura protegida en ambos motores de libro, además de registros jerárquicos de funciones de usuario para cálculo personalizado

Modelo de tokens

TXLSFormulaTokenClass, TXLSFormulaTokenKindy TXLSFormulaTokenSource clasifican cada TXLSFormulaToken y registran si proviene de texto analizado, bytes BIFF clásicos u otra fuente compatible

TXLSFormulaTokenKind, Opcode, BaseOpcode, TokenClass, RawBytes, TextValue, NumberValue, IntegerValue, ArgumentCount, FunctionIndex, ExternSheetIndex, Row1, Col1, Row2, Col2, Row1Relative, Col1Relative, Row2Relative, Col2Relative, ReferenceUsesOffsets, Supported, ArrayRows, ArrayColsy ArrayValueCount, and ArrayValues
TXLSFormulaTokenStreamDecodeBiff, Clone, CloneSyntaxTree, BindContext, CanCompileFor, CanWriteBiffAt, ReplaceReference, Count, Items, Source, FormulaText, FullyDecoded, Rgce, RgbExtra, BiffWritabley BiffVersion
TXLSCompiledFormulaCreateTokenStream devuelve un clon propiedad del llamador del flujo de tokens de fórmula compilada
TXLSFormulaArrayFormulaMode, FormulaLocale, MaxRow, MaxCol, FuncNamebyPtg, FuncArgsCntByPtg, GetCompiled, GetCompiledPreservingUnknownNames, GetCompiledR1C1, GetTokenStream, GetTranslated, GetStoreData, GetStoreDataExt, CanStoreData, BindUserDefinedFunctions, GetTExpData, SetMode, IsKnownFunction, GetFunctionNamesy FunctionArgumentClass

Cada motor de libros compila y traduce fórmulas a través de una única instancia compartida de TXLSFormula: GetCompiled analiza texto en estilo A1 y lo convierte en un árbol de sintaxis, GetCompiledR1C1 resuelve las referencias R1C1 contra las coordenadas de la celda donde vive la fórmula, GetTranslated reconstruye un árbol a partir de bytes BIFF clásicos, y la familia GetStoreData vuelve a escribir los bytes de tokens para almacenarlos. MaxRow y MaxCol acotan la cuadrícula de referencias que acepta el compilador —el motor XLSX los eleva de los valores predeterminados de BIFF8 a la cuadrícula XLSX, y las referencias que no caben en BIFF8 no tienen forma ptg, de modo que los escritores BIFF8 las informan como no codificables

ArrayFormulaMode se activa mientras se escribe el rgce de un registro ARRAY (una fórmula de matriz): las referencias de clase valor y las constantes de matriz se serializan entonces como clase matriz (tAreaA / tArrayA), tal como las escribe el propio Excel. Con operandos de clase valor, Excel evalúa la fórmula de matriz con intersección implícita en lugar de tratarla como una fórmula de matriz verdadera, y por eso los motores activan la marca para el rgce del propio registro ARRAY

Inspección acotada de una hoja simple almacenada

TXLSCompiledFormula.ReadSimpleLeafInfo(ExpectedOwner, MaxBytes, MaxTextCharacters, AllowUnboundBiff) inspecciona in situ el árbol de sintaxis principal y cualquier flujo de tokens retenido, sin clonar, decompilar, evaluar ni materializar tokens o matrices; el valor predeterminado de AllowUnboundBiff es False

Las formas admitidas son una hoja absoluta REF3D o RANGE3D y un literal de cadena, con exactamente un token coherente cuando se retiene un flujo; las expresiones, las referencias relativas o con desplazamiento, las matrices, los datos de matriz externos, los tokens desconocidos, las hojas principal y retenida no coincidentes y los propietarios enlazados ajenos devuelven fslkUnsupported sin cambiar los valores cacheados ni el estado de cálculo

TXLSFormulaSimpleLeafKindfslkUnsupported, fslkRange o fslkLiteral; inspeccione Kind antes de usar los demás campos del resultado
TXLSFormulaLeafOwnerStateflosNoRetainedStream informa de la ausencia de procedencia de flujo de tokens, flosUnboundStream informa de BIFF importado sin enlazar, flosSameOwner informa de una coincidencia exacta del propietario enlazado y flosForeignOwner rechaza un propietario enlazado distinto
TXLSFormulaSimpleLeafInfoUn registro de valores sin cadenas que contiene Kind, OwnerState, RangeType, ExternId, FirstRow, FirstCol, LastRow, LastCol, TextCharacters, StoredTextCharacters, ReadBytes, SyntaxNodesy TokenCount
Range coordinates and identityLas coordenadas son de base cero; ExternId es el identificador lógico de base 1 del árbol de sintaxis, no el índice de línea BIFF; el llamador debe resolverlo a través del libro fijado y rechazar libros externos, intervalos de hojas, hojas ausentes o coordenadas fuera de su rango de captura admitido
Source costsTextCharacters es la longitud literal de salida en unidades de código UTF-16, o cero para un rango; StoredTextCharacters suma el texto de origen retenido, el texto de tokens y el texto de sintaxis inspeccionado; ReadBytes suma su coste de texto de dos bytes y las longitudes de bytes brutos retenidas, incluidas las representaciones retenidas por separado; estos contadores describen las entradas de la inspección acotada, no el uso total del montón
Syntax and token countsSyntaxNodes vale uno para una hoja compilada corriente o dos cuando se comprueban la hoja principal y la retenida; TokenCount es cero sin flujo, o uno con un flujo retenido coherente admitido
TXLSFormulaTokenStream.ReadSimpleLeafInfoLa capa inferior toma los mismos propietario y cuotas, un ComparedLeaf opcional y un ReferenceContext opcional; comprueba directamente la sintaxis privada, los tokens y los bytes brutos del propio flujo; ComparedLeaf añade comprobaciones de coherencia con la hoja principal, mientras que ReferenceContext mapea los índices externos de las fórmulas de texto serializadas sin copiar
TXLSCompiledFormula.ReadSimpleLiteralToma los mismos argumentos, repite las comprobaciones de la hoja y devuelve un WideString propiedad del llamador solo después de que las cuotas restantes de bytes y caracteres cubran también su salida; las hojas no admitidas o la capacidad restante insuficiente generan EInvalidOperation

ExpectedOwner debe ser la calculadora exacta adjunta a la fuente que la consume, y debe permanecer viva y estable durante toda la inspección y la extracción de literales; un propietario ausente genera EArgumentException, las cuotas negativas generan EArgumentOutOfRangeException y las entradas de origen retenidas demasiado grandes generan EInvalidOperation antes de las comparaciones de contenido o de la copia de salida

Una hoja corriente sin flujo retenido no establece su propietario original; un flujo importado sin enlazar tampoco aporta identidad de libro, de modo que un AllowUnboundBiff=True explícito solo es apropiado cuando el llamador ya ha fijado la calculadora de origen y validará la identidad de la hoja de cálculo local antes de leer celdas; la inspección de referencias importadas acepta actualmente referencias BIFF8 y rechaza la representación externa distinta de BIFF5

Los campos de sintaxis heredados llamados FFirstRowRel, FFirstColRel, FLastRowRel y FLastColRel son verdaderos para coordenadas absolutas; el auxiliar también comprueba los indicadores independientes de token relativo y la representación con desplazamiento, de modo que los consumidores no necesitan inferir coordenadas absolutas a partir de estos nombres históricos

Árbol de sintaxis

CloneSyntaxTree devuelve un árbol analizado propiedad del llamador, formado por nodos TXLSSyntaxItem , para inspección estructural: cada nodo expone su ItemType, la carga literal (Value, IntValue, DecValue), los Spacesiniciales, los enlaces del árbol (Parent, Child, ChildCount), la hoja de referencia como un TXLSRangeItem a través de Rangey los datos de constantes array (ArrayRows, ArrayCols, ArrayValueCounty las entradas TXLSArraySerVal de ArrayValues). El árbol es una copia independiente, así que recorrerlo nunca toca las fórmulas compiladas del libro, y los miembros de mutación (AddChild, PushChild, CopyObject, OffsetCopyReferences, AdjustForShifty TXLSRangeItem.CopyObject / AdjustForShift) existen para herramientas que reescriben un árbol clonado antes de recompilar

Puntos de entrada del libro

Tokens := Worksheet.ParseFormulaTokens('SUM(A1:A4)', 1, 1);
try
  if Tokens.ReplaceReference(OldRef, NewRef) then
    Worksheet.SetFormulaTokens(1, 1, Tokens);
finally
  Tokens.Free;
end;

ParseFormulaTokens, GetFormulaTokens, FormulaTokensToTexty SetFormulaTokens mantienen la propiedad explícita y validan el contexto, la versión BIFF, la compatibilidad de tokens, la propiedad del array y los límites de referencia antes de modificar una celda

Registros de funciones de usuario

TXLSUserFunctionResolver y TXLSUserFunctionRegistry proporcionan búsqueda por nombre mediante RegisterHandler, UnregisterHandler, Clear, Contains, TryGetHandlery Count

Workbook.RegisterUserFunction('NETMARGIN', CalculateNetMargin);
Workbook.RegisterGlobalUserFunction('FISCALYEAR', CalculateFiscalYear);
try
  Workbook.Calculate;
finally
  Workbook.UnregisterUserFunction('NETMARGIN');
  Workbook.UnregisterGlobalUserFunction('FISCALYEAR');
end;

IXLSWorkbook, TXLSWorkbooky TXLSXWorkbook exponen RegisterUserFunction, UnregisterUserFunction, ClearUserFunctions, RegisteredUserFunctionCount, RegisterGlobalUserFunction, UnregisterGlobalUserFunction, ClearGlobalUserFunctionsy RegisteredGlobalUserFunctionCount

Los puntos de entrada equivalentes a nivel de unidad son XLSRegisterGlobalUserFunction, XLSUnregisterGlobalUserFunction, XLSClearGlobalUserFunctions, XLSRegisteredGlobalUserFunctionCounty XLSGlobalUserFunctionRegistered

TXLSCalculator.OnUserFunctionResolve participa antes de la reserva del evento heredado, y los controladores del registro se invocan fuera del bloqueo del registro para que un controlador pueda anular su propio registro de forma segura

Los nombres de funciones externas y de estilo macro peligrosos se bloquean antes de evaluar los argumentos y buscar el controlador, a menos que AllowUnsafeFormulaCallbacks esté habilitado explícitamente para el libro o para la evaluación contextual individual; los nombres de funciones de usuario ordinarias siguen estando disponibles de forma predeterminada

Diagnósticos de fórmula

TXLSXFormulaIssueKind, TXLSXFormulaLocationy TXLSXFormulaIssue son devueltos por TXLSXWorkbook.AnalyzeFormulaIssues para funciones ausentes, referencias externas y componentes de dependencias circulares

Inspección de hojas de macro

TXLSSheetKind distingue hojas de cálculo, hojas de macro, hojas de gráfico, módulos VBA y registros de hoja desconocidos mediante TXLSWorksheet.SheetKind; TXLSMacroRisk, TXLSMacroCommandInfoy TXLSMacroCommandArray describen los resultados tipados de TXLSWorksheet.ScanMacroCommands

Tipos de autoajuste combinado y ordenación

TXLSMergedAutoFitStrategy y TXLSXMergedAutoFitStrategy eligen el crecimiento primero, último o equilibrado para rangos combinados, mientras que TXLSSortOrientation, TXLSSortFormulaModey TXLSSortCompareEvent controlan la ordenación estable vertical u horizontal y el movimiento de fórmulas

Véase también