Tokeny vzorců a uživatelské funkce
HotXLS zpřístupňuje streamy tokenů vzorců vlastněné volajícím pro bezztrátovou kontrolu a chráněný zpětný zápis v obou enginách sešitu a také hierarchické registry uživatelských funkcí pro vlastní výpočty
Model tokenů
TXLSFormulaTokenClass, TXLSFormulaTokenKind a TXLSFormulaTokenSource klasifikují každý TXLSFormulaToken a zaznamenávají, zda pochází z analyzovaného textu, klasických bajtů BIFF nebo jiného podporovaného zdroje
| TXLSFormulaToken | Kind, Opcode, BaseOpcode, TokenClass, RawBytes, TextValue, NumberValue, IntegerValue, ArgumentCount, FunctionIndex, ExternSheetIndex, Row1, Col1, Row2, Col2, Row1Relative, Col1Relative, Row2Relative, Col2Relative, ReferenceUsesOffsets, Supported, ArrayRows, ArrayCols, ArrayValueCount a ArrayValues |
| TXLSFormulaTokenStream | DecodeBiff, Clone, CloneSyntaxTree, BindContext, CanCompileFor, CanWriteBiffAt, ReplaceReference, Count, Items, Source, FormulaText, FullyDecoded, Rgce, RgbExtra, BiffWritable a BiffVersion |
| TXLSCompiledFormula | CreateTokenStream vrací klon streamu tokenů kompilovaného vzorce vlastněný volajícím |
Syntaktický strom
CloneSyntaxTree vrací vlastněný volajícím rozparsovaný strom uzlů TXLSSyntaxItem pro strukturální kontrolu: každý uzel hlásí svůj ItemType, literální obsah (Value, IntValue, DecValue), úvodní Spaces, stromové vazby (Parent, Child, ChildCount), referenční list jako TXLSRangeItem přes Range a data array konstant (ArrayRows, ArrayCols, ArrayValueCount a položky TXLSArraySerVal v ArrayValues). Strom je oddělená kopie, takže jeho průchod nikdy nesáhne na zkompilované vzorce sešitu, a mutační členy (AddChild, PushChild, CopyObject, OffsetCopyReferences, AdjustForShift a TXLSRangeItem.CopyObject / AdjustForShift) existují pro nástroje, které klonovaný strom přepíšou před rekompilací
Vstupní body sešitu
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, FormulaTokensToText a SetFormulaTokens ponechávají vlastnictví explicitní a před změnou buňky ověřují kontext, verzi BIFF, podporu tokenů, vlastnictví polí a meze referencí
Registry uživatelských funkcí
TXLSUserFunctionResolver a TXLSUserFunctionRegistry poskytují vyhledávání podle názvu prostřednictvím RegisterHandler, UnregisterHandler, Clear, Contains, TryGetHandler a Count
Workbook.RegisterUserFunction('NETMARGIN', CalculateNetMargin);
Workbook.RegisterGlobalUserFunction('FISCALYEAR', CalculateFiscalYear);
try
Workbook.Calculate;
finally
Workbook.UnregisterUserFunction('NETMARGIN');
Workbook.UnregisterGlobalUserFunction('FISCALYEAR');
end;
IXLSWorkbook, TXLSWorkbook a TXLSXWorkbook zpřístupňují RegisterUserFunction, UnregisterUserFunction, ClearUserFunctions, RegisteredUserFunctionCount, RegisterGlobalUserFunction, UnregisterGlobalUserFunction, ClearGlobalUserFunctions a RegisteredGlobalUserFunctionCount
Ekvivalentní vstupní body na úrovni jednotky jsou XLSRegisterGlobalUserFunction, XLSUnregisterGlobalUserFunction, XLSClearGlobalUserFunctions, XLSRegisteredGlobalUserFunctionCount a XLSGlobalUserFunctionRegistered
TXLSCalculator.OnUserFunctionResolve se účastní před starším fallbackem událostí a obsluhy registru jsou volány mimo zámek registru, takže se obsluha může bezpečně zrušit svou vlastní registraci
Diagnostika vzorců
TXLSXFormulaIssueKind, TXLSXFormulaLocation a TXLSXFormulaIssue vrací TXLSXWorkbook.AnalyzeFormulaIssues pro chybějící funkce, externí reference a součásti cyklických závislostí
Kontrola maker listů
TXLSSheetKind rozlišuje list, list maker, list grafu, modul VBA a neznámé záznamy listů prostřednictvím TXLSWorksheet.SheetKind; TXLSMacroRisk, TXLSMacroCommandInfo a TXLSMacroCommandArray popisují typované výsledky z TXLSWorksheet.ScanMacroCommands
Sloučené typy AutoFit a řazení
TXLSMergedAutoFitStrategy a TXLSXMergedAutoFitStrategy vybírají první, poslední nebo vyvážený růst pro sloučené rozpětí, zatímco TXLSSortOrientation, TXLSSortFormulaMode a TXLSSortCompareEvent řídí vertikální nebo horizontální stabilní řazení a přesun vzorců