Документація HotXLS

Токени формул і функції користувача

HotXLS надає потоки токенів формул, що належать викликачу, для безвтратного перегляду та контрольованого зворотного запису в обох рушіях книг, а також ієрархічні реєстри функцій користувача для користувацьких обчислень

Модель токенів

TXLSFormulaTokenClass, TXLSFormulaTokenKind і TXLSFormulaTokenSource класифікують кожен TXLSFormulaToken і фіксують, чи походить він із розібраного тексту, класичних байтів BIFF чи іншого підтримуваного джерела

TXLSFormulaTokenKind, Opcode, BaseOpcode, TokenClass, RawBytes, TextValue, NumberValue, IntegerValue, ArgumentCount, FunctionIndex, ExternSheetIndex, Row1, Col1, Row2, Col2, Row1Relative, Col1Relative, Row2Relative, Col2Relative, ReferenceUsesOffsets, Supported, ArrayRows, ArrayCols, ArrayValueCount і ArrayValues
TXLSFormulaTokenStreamDecodeBiff, Clone, CloneSyntaxTree, BindContext, CanCompileFor, CanWriteBiffAt, ReplaceReference, Count, Items, Source, FormulaText, FullyDecoded, Rgce, RgbExtra, BiffWritable і BiffVersion
TXLSCompiledFormulaCreateTokenStream повертає клон потоку токенів скомпільованої формули, що належить викликачу

Дерево синтаксису

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 керують вертикальним або горизонтальним стабільним сортуванням і переміщенням формул

Див. також