Tokenuri de formulă și funcții de utilizator
HotXLS expune fluxuri de tokenuri de formulă deținute de apelant pentru inspecție fără pierderi și rescriere protejată în ambele motoare de registru, plus registre ierarhice de funcții de utilizator pentru calcul personalizat
Modelul tokenurilor
TXLSFormulaTokenClass, TXLSFormulaTokenKind și TXLSFormulaTokenSource clasifică fiecare TXLSFormulaToken și înregistrează dacă acesta provine din text analizat, din octeți BIFF clasici sau din altă sursă acceptată
| TXLSFormulaToken | Kind, Opcode, BaseOpcode, TokenClass, RawBytes, TextValue, NumberValue, IntegerValue, ArgumentCount, ExternSheetIndex, Row1, Col1, Row2, Col2, Row1Relative, Col1Relative, Row2Relative, Col2Relative, ReferenceUsesOffsets, Supported, ArrayRows, ArrayCols, ArrayValueCount și ArrayValues |
| TXLSFormulaTokenStream | DecodeBiff, Clone, CloneSyntaxTree, BindContext, CanCompileFor, CanWriteBiffAt, ReplaceReference, Count, Items, Rgce, RgbExtra, BiffWritable și BiffVersion |
| TXLSCompiledFormula | CreateTokenStream returnează o clonă deținută de apelant a fluxului de tokenuri al formulei compilate |
Puncte de intrare în registrul de lucru
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 și SetFormulaTokens păstrează proprietatea explicită și validează contextul, versiunea BIFF, suportul tokenurilor, proprietatea array-urilor și limitele referințelor înainte de a fi modificată o celulă
Registre de funcții de utilizator
TXLSUserFunctionResolver și TXLSUserFunctionRegistry oferă căutare după nume prin RegisterHandler, UnregisterHandler, Clear, Contains, TryGetHandler și Count
Workbook.RegisterUserFunction('NETMARGIN', CalculateNetMargin);
Workbook.RegisterGlobalUserFunction('FISCALYEAR', CalculateFiscalYear);
try
Workbook.Calculate;
finally
Workbook.UnregisterUserFunction('NETMARGIN');
Workbook.UnregisterGlobalUserFunction('FISCALYEAR');
end;
IXLSWorkbook, TXLSWorkbook și TXLSXWorkbook expun RegisterUserFunction, UnregisterUserFunction, ClearUserFunctions, RegisteredUserFunctionCount, RegisterGlobalUserFunction, UnregisterGlobalUserFunction, ClearGlobalUserFunctions și RegisteredGlobalUserFunctionCount
Punctele de intrare echivalente la nivel de unitate sunt XLSRegisterGlobalUserFunction, XLSUnregisterGlobalUserFunction, XLSClearGlobalUserFunctions, XLSRegisteredGlobalUserFunctionCount și XLSGlobalUserFunctionRegistered
TXLSCalculator.OnUserFunctionResolve participă înainte de rezerva de evenimente moștenită, iar handler-ele din registru sunt invocate în afara blocării registrului, astfel încât un handler se poate dezînregistra în siguranță pe sine
Diagnosticare formulă
TXLSXFormulaIssueKind, TXLSXFormulaLocation și TXLSXFormulaIssue sunt returnate de TXLSXWorkbook.AnalyzeFormulaIssues pentru funcții lipsă, referințe externe și componente de dependențe circulare
Inspectarea foilor de macro
TXLSSheetKind distinge foaia de lucru, foaia de macro, foaia de diagramă, modulul VBA și înregistrările de foaie necunoscute prin TXLSWorksheet.SheetKind; TXLSMacroRisk, TXLSMacroCommandInfo și TXLSMacroCommandArray descriu rezultatele tipizate de la TXLSWorksheet.ScanMacroCommands
Tipuri AutoFit îmbinate și de sortare
TXLSMergedAutoFitStrategy și TXLSXMergedAutoFitStrategy aleg creșterea pentru prima, ultima sau echilibrată pentru intervalele îmbinate, în timp ce TXLSSortOrientation, TXLSSortFormulaMode și TXLSSortCompareEvent controlează sortarea stabilă verticală sau orizontală și mutarea formulelor