Формулни токени и потребителски функции
HotXLS разкрива потоци от формулни токени, притежавани от извикващия код, за загуби на загуби инспекция и защитено записване в двата механизма на работната книга, плюс йерархични регистри на потребителски функции за персонализирани изчисления
Модел на токените
TXLSFormulaTokenClass, TXLSFormulaTokenKind и TXLSFormulaTokenSource класифицират всеки TXLSFormulaToken и записват дали той произхожда от анализиран текст, класически BIFF байтове или друг поддържан източник
| 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 и ArrayValues |
| TXLSFormulaTokenStream | DecodeBiff, Clone, CloneSyntaxTree, BindContext, CanCompileFor, CanWriteBiffAt, ReplaceReference, Count, Items, Source, FormulaText, FullyDecoded, Rgce, RgbExtra, BiffWritable и BiffVersion |
| TXLSCompiledFormula | CreateTokenStream връща притежаван от извикващия код клонинг на потока от токени на компилираната формула |
Синтактично дърво
CloneSyntaxTree връща анализирано дърво от възли TXLSSyntaxItem, притежавано от извикващия код, за структурна инспекция: всеки възел докладва своя ItemType, литералния payload (Value, IntValue, DecValue), водещите Spaces, връзките в дървото (Parent, Child, ChildCount), референтния лист като TXLSRangeItem чрез Range и данните от константи-масиви (ArrayRows, ArrayCols, ArrayValueCount и записите TXLSArraySerVal в ArrayValues). Дървото е отделено копие, така че обхождането му никога не засяга компилираните формули на работната книга, а членовете за мутиране (AddChild, PushChild, CopyObject, OffsetCopyReferences, AdjustForShift и TXLSRangeItem.CopyObject / AdjustForShift) съществуват за инструменти, които пренаписват клонираното дърво преди повторна компилация
Точки на влизане в работната книга
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 и SetFormulaTokens запазват собствеността изрична и валидират контекста, BIFF версията, поддръжката на токени, собствеността на масивите и границите на препратките, преди клетка да бъде променена
Регистри на потребителски функции
TXLSUserFunctionResolver и TXLSUserFunctionRegistry предоставят търсене по име чрез RegisterHandler, UnregisterHandler, Clear, Contains, TryGetHandler и Count
Workbook.RegisterUserFunction('NETMARGIN', CalculateNetMargin);
Workbook.RegisterGlobalUserFunction('FISCALYEAR', CalculateFiscalYear);
try
Workbook.Calculate;
finally
Workbook.UnregisterUserFunction('NETMARGIN');
Workbook.UnregisterGlobalUserFunction('FISCALYEAR');
end;
IXLSWorkbook, TXLSWorkbook и TXLSXWorkbook разкриват RegisterUserFunction, UnregisterUserFunction, ClearUserFunctions, RegisteredUserFunctionCount, RegisterGlobalUserFunction, UnregisterGlobalUserFunction, ClearGlobalUserFunctions и RegisteredGlobalUserFunctionCount
Еквивалентните точки на влизане на ниво единица са XLSRegisterGlobalUserFunction, XLSUnregisterGlobalUserFunction, XLSClearGlobalUserFunctions, XLSRegisteredGlobalUserFunctionCount и XLSGlobalUserFunctionRegistered
TXLSCalculator.OnUserFunctionResolve участва преди наследения фолбек на събитията, а обработчиците на регистъра се извикват извън заключването на регистъра, така че обработчик може безопасно да се дерегистрира сам
Опасни външни и макро-подобни имена на функции се блокират преди изчисляването на аргументите и търсенето на обработчик, освен ако AllowUnsafeFormulaCallbacks не е изрично разрешена за работната книга или за отделното контекстуално изчисление; обикновените имена на потребителски функции остават налични по подразбиране
Диагностика на формули
TXLSXFormulaIssueKind, TXLSXFormulaLocation и TXLSXFormulaIssue се връщат от TXLSXWorkbook.AnalyzeFormulaIssues за липсващи функции, външни препратки и компоненти на циклични зависимости
Инспекция на макро листове
TXLSSheetKind различава записите за работен лист, макро лист, лист с диаграми, VBA модул и неизвестен лист чрез TXLSWorksheet.SheetKind; TXLSMacroRisk, TXLSMacroCommandInfo и TXLSMacroCommandArray описват типизираните резултати от TXLSWorksheet.ScanMacroCommands
Обединени типове за автоматично прилягане и сортиране
TXLSMergedAutoFitStrategy и TXLSXMergedAutoFitStrategy избират първи, последен или балансиран растеж за обединени обхвати, докато TXLSSortOrientation, TXLSSortFormulaMode и TXLSSortCompareEvent контролират вертикално или хоризонтално стабилно сортиране и преместването на формули