Dokumentace HotXLS

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

TXLSFormulaTokenKind, 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
TXLSFormulaTokenStreamDecodeBiff, Clone, CloneSyntaxTree, BindContext, CanCompileFor, CanWriteBiffAt, ReplaceReference, Count, Items, Source, FormulaText, FullyDecoded, Rgce, RgbExtra, BiffWritable a BiffVersion
TXLSCompiledFormulaCreateTokenStream 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ů

Viz také