Kaavatunnisteet ja käyttäjäfunktiot
HotXLS paljastaa soittajan omistamat kaavatunnistevirrat häviöttömään tarkasteluun ja suojattuun takaisinkirjoitukseen molemmissa työkirjamoottoreissa sekä hierarkkiset käyttäjäfunktiorekisterit mukautettua laskentaa varten
Tunnistemalli
TXLSFormulaTokenClass, TXLSFormulaTokenKind ja TXLSFormulaTokenSource luokittelevat jokaisen TXLSFormulaToken-tunnisteen ja tallentavat, tuliko se jäsennetystä tekstistä, klassisista BIFF-tavuista vai jostakin muusta tuetusta lähteestä
| 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 ja ArrayValues |
| TXLSFormulaTokenStream | DecodeBiff, Clone, CloneSyntaxTree, BindContext, CanCompileFor, CanWriteBiffAt, ReplaceReference, Count, Items, Source, FormulaText, FullyDecoded, Rgce, RgbExtra, BiffWritable ja BiffVersion |
| TXLSCompiledFormula | CreateTokenStream palauttaa soittajan omistaman kloonin käännetyistä kaavatunnistevirrasta |
Syntaksipuu
CloneSyntaxTree palauttaa soittajan omistaman jäsennetyn TXLSSyntaxItem-solmupuun rakennetarkastusta varten: jokainen solmu ilmoittaa ItemType-tyyppinsä, literaaliarvonsa (Value, IntValue, DecValue), edeltävät Spaces-välilyönnit, puulinkkinsä (Parent, Child, ChildCount), viitalehden TXLSRangeItem-oliona Range-kautta sekä taulukkovakiodatan (ArrayRows, ArrayCols, ArrayValueCount sekä TXLSArraySerVal-alkiot ArrayValuesissa). Puu on irrallinen kopio, joten sen läpikäynti ei koskaan muokkaa työkirjan käännettyjä kaavoja, ja mutaatiojäsenet (AddChild, PushChild, CopyObject, OffsetCopyReferences, AdjustForShift sekä TXLSRangeItem.CopyObject / AdjustForShift) on tehty työkaluja varten, jotka kirjoittavat kloonatun puun uudelleen ennen takaisinkääntämistä
Työkirjan rajapinnat
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 ja SetFormulaTokens pitävät omistajuuden eksplisiittisenä ja validoivat kontekstin, BIFF-version, tunnisteiden tuen, taulukon omistajuuden ja viittausten rajat ennen solun muuttamista
Käyttäjäfunktiorekisterit
TXLSUserFunctionResolver ja TXLSUserFunctionRegistry tarjoavat nimipohjaisen haun RegisterHandler, UnregisterHandler, Clear, Contains, TryGetHandler ja Count -kutsujen kautta
Workbook.RegisterUserFunction('NETMARGIN', CalculateNetMargin);
Workbook.RegisterGlobalUserFunction('FISCALYEAR', CalculateFiscalYear);
try
Workbook.Calculate;
finally
Workbook.UnregisterUserFunction('NETMARGIN');
Workbook.UnregisterGlobalUserFunction('FISCALYEAR');
end;
IXLSWorkbook, TXLSWorkbook ja TXLSXWorkbook paljastavat RegisterUserFunction, UnregisterUserFunction, ClearUserFunctions, RegisteredUserFunctionCount, RegisterGlobalUserFunction, UnregisterGlobalUserFunction, ClearGlobalUserFunctions ja RegisteredGlobalUserFunctionCount -jäsenet
Vastaavat yksikkötason rajapinnat ovat XLSRegisterGlobalUserFunction, XLSUnregisterGlobalUserFunction, XLSClearGlobalUserFunctions, XLSRegisteredGlobalUserFunctionCount ja XLSGlobalUserFunctionRegistered
TXLSCalculator.OnUserFunctionResolve osallistuu ennen vanhaa tapahtumavarasijärjestelmää, ja rekisterinkäsittelijät kutsutaan rekisterilukon ulkopuolella, jotta käsittelijä voi turvallisesti poistaa itsensä rekisteristä
Vaarallisia ulkoisia ja makotyyppisiä funktioiden nimiä estetään ennen argumenttien evaluointia ja käsittelijähakua, ellei AllowUnsafeFormulaCallbacks ole eksplisiittisesti käytössä työkirjassa tai yksittäisessä kontekstikohtaisessa evaluoinnissa; tavalliset käyttäjäfunktioiden nimet ovat oletuksena edelleen käytettävissä
Kaavadiagnostiikka
TXLSXFormulaIssueKind, TXLSXFormulaLocation ja TXLSXFormulaIssue palauttaa TXLSXWorkbook.AnalyzeFormulaIssues puuttuvien funktioiden, ulkoisten viittausten ja syklisten riippuvuuksien komponenttien osalta
Makrolaskentataulukoiden tarkastelu
TXLSSheetKind erottaa laskentataulukko-, makrolaskentataulukko-, kaaviolaskentataulukko-, VBA-moduuli- ja tuntemattomat laskentataulukkotietueet TXLSWorksheet.SheetKind-ominaisuuden kautta; TXLSMacroRisk, TXLSMacroCommandInfo ja TXLSMacroCommandArray kuvaavat tyypitetyt tulokset TXLSWorksheet.ScanMacroCommands-kutsusta
Yhdistetyt AutoFit- ja lajittelutyypit
TXLSMergedAutoFitStrategy ja TXLSXMergedAutoFitStrategy valitsevat ensimmäisen, viimeisen tai tasapainotetun kasvun yhdistetyille alueille, kun TXLSSortOrientation, TXLSSortFormulaMode ja TXLSSortCompareEvent ohjaavat pystysuuntaista tai vaakasuuntaista vakaata lajittelua ja kaavojen siirtymistä