Képlettokenek és felhasználói függvények
A HotXLS a hívó tulajdonában lévő képlettoken-adatfolyamokat tesz elérhetővé a veszteségmentes vizsgálathoz és az őrzött visszaíráshoz mindkét munkafüzet-motorban, valamint hierarchikus felhasználói függvény-regisztereket az egyéni számításhoz
Tokenmodell
TXLSFormulaTokenClass, TXLSFormulaTokenKind és TXLSFormulaTokenSource osztályozza az egyes TXLSFormulaToken tokeneket, és rögzíti, hogy azok elemzett szövegből, klasszikus BIFF-bájtokból vagy más támogatott forrásból származnak-e
| 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 és ArrayValues |
| TXLSFormulaTokenStream | DecodeBiff, Clone, CloneSyntaxTree, BindContext, CanCompileFor, CanWriteBiffAt, ReplaceReference, Count, Items, Source, FormulaText, FullyDecoded, Rgce, RgbExtra, BiffWritable és BiffVersion |
| TXLSCompiledFormula | CreateTokenStream az összeállított képlet tokentfolyamának hívó tulajdonában lévő klónját adja vissza |
Szintaxisfa
A CloneSyntaxTree a hívó tulajdonában lévő, TXLSSyntaxItem csomópontokból álló elemzett fát ad vissza strukturális vizsgálathoz: minden csomópont jelenti az ItemType típust, a literál hasznos adatot (Value, IntValue, DecValue), a vezető Spaces szóközöket, a fa kapcsolatait (Parent, Child, ChildCount), a hivatkozáslevelet TXLSRangeItem-ként a Range-ön keresztül, valamint a tömbkonstans adatait (ArrayRows, ArrayCols, ArrayValueCount, valamint a TXLSArraySerVal bejegyzéseket az ArrayValues gyűjteményben). A fa egy leválasztott másolat, így bejárása soha nem érinti a munkafüzet összeállított képleteit, a módosító tagok (AddChild, PushChild, CopyObject, OffsetCopyReferences, AdjustForShift, valamint a TXLSRangeItem.CopyObject / AdjustForShift) pedig olyan eszközök számára léteznek, amelyek újrafordítás előtt átírják a klónozott fát
Munkafüzet belépési pontjai
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 és SetFormulaTokens explicit módon tartják a tulajdonlást, és a cella módosítása előtt érvényesítik a kontextust, a BIFF-verziót, a tokentámogatást, a tömbök tulajdonlását és a hivatkozási határokat
Felhasználói függvény-regiszterek
TXLSUserFunctionResolver és TXLSUserFunctionRegistry név szerinti keresést biztosít a RegisterHandler, UnregisterHandler, Clear, Contains, TryGetHandler és Count segítségével
Workbook.RegisterUserFunction('NETMARGIN', CalculateNetMargin);
Workbook.RegisterGlobalUserFunction('FISCALYEAR', CalculateFiscalYear);
try
Workbook.Calculate;
finally
Workbook.UnregisterUserFunction('NETMARGIN');
Workbook.UnregisterGlobalUserFunction('FISCALYEAR');
end;
IXLSWorkbook, TXLSWorkbook és TXLSXWorkbook a RegisterUserFunction, UnregisterUserFunction, ClearUserFunctions, RegisteredUserFunctionCount, RegisterGlobalUserFunction, UnregisterGlobalUserFunction, ClearGlobalUserFunctions és RegisteredGlobalUserFunctionCount tagokat teszik elérhetővé
A megfelelő egységszintű belépési pontok az XLSRegisterGlobalUserFunction, XLSUnregisterGlobalUserFunction, XLSClearGlobalUserFunctions, XLSRegisteredGlobalUserFunctionCount és XLSGlobalUserFunctionRegistered
TXLSCalculator.OnUserFunctionResolve az örökölt esemény-fallback előtt vesz részt, és a regiszterkezelők a regiszter-záron kívül kerülnek meghívásra, így egy kezelő biztonságosan kiregisztrálhatja magát
A veszélyes külső és makrostípusú függvénynevek blokkolva vannak az argumentumkiértékelés és a kezelőkeresés előtt, hacsak a AllowUnsafeFormulaCallbacks nincs explicit módon engedélyezve a munkafüzet vagy az egyedi kontextusfüggő kiértékelés számára; a közönséges felhasználói függvénynevek alapértelmezés szerint továbbra is elérhetők
Képlet-diagnosztika
TXLSXFormulaIssueKind, TXLSXFormulaLocation és TXLSXFormulaIssue a TXLSXWorkbook.AnalyzeFormulaIssues által adódik vissza hiányzó függvények, külső hivatkozások és körkörös függőségi összetevők esetén
Makrolap-vizsgálat
TXLSSheetKind a munkalap-, makrolap-, diagramlap-, VBA-modul- és ismeretlen laprekordokat különbözteti meg a TXLSWorksheet.SheetKind segítségével; a TXLSMacroRisk, TXLSMacroCommandInfo és TXLSMacroCommandArray a TXLSWorksheet.ScanMacroCommands által visszaadott típusos eredményeket írják le
Összevont AutoFit- és rendezéstípusok
TXLSMergedAutoFitStrategy és TXLSXMergedAutoFitStrategy első, utolsó vagy kiegyensúlyozott növekedést választ az összevont tartományokhoz, míg a TXLSSortOrientation, TXLSSortFormulaMode és TXLSSortCompareEvent a függőleges vagy vízszintes stabil rendezést és a képletmozgatást vezérli