توکنهای فرمول و توابع کاربر
HotXLS جریانهای توکن فرمول متعلق به فراخواننده را برای بررسی بدون اتلاف و بازنویسی محافظتشده در هر دو موتور کتاب کار در معرض دید قرار میدهد، علاوه بر رجیستریهای سلسلهمراتبی تابع کاربر برای محاسبه سفارشی
مدل توکن
TXLSFormulaTokenClass، TXLSFormulaTokenKind و TXLSFormulaTokenSource هر TXLSFormulaToken را طبقهبندی میکنند و ثبت میکنند که آیا از متن تجزیهشده، بایتهای BIFF کلاسیک یا منبع پشتیبانیشدهٔ دیگری آمده است
| 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 و ArrayValues |
| TXLSFormulaTokenStream | DecodeBiff، Clone، CloneSyntaxTree، BindContext، CanCompileFor، CanWriteBiffAt، ReplaceReference، Count، Items، Source، FormulaText، FullyDecoded، Rgce، RgbExtra، BiffWritable و BiffVersion |
| TXLSCompiledFormula | CreateTokenStream یک نسخهٔ شبیهسازیشدهٔ متعلق به فراخواننده از جریان توکن فرمول کامپایلشده برمیگرداند |
درخت نحوی
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 مرتبسازی پایدار عمودی یا افقی و جابهجایی فرمول را کنترل میکنند