Токени формул і функції користувача
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
Об'єднані типи AutoFit і сортування
TXLSMergedAutoFitStrategy і TXLSXMergedAutoFitStrategy обирають перше, останнє або збалансоване зростання для об'єднаних діапазонів, тоді як TXLSSortOrientation, TXLSSortFormulaMode і TXLSSortCompareEvent керують вертикальним або горизонтальним стабільним сортуванням і переміщенням формул