โทเคนสูตรและฟังก์ชันผู้ใช้
HotXLS เปิดเผยสตรีมโทเคนสูตรที่เป็นของตัวเรียกใช้สำหรับการตรวจสอบแบบไม่สูญเสียและการเขียนกลับแบบมีการป้องกันในทั้งสองกลไกสมุดงาน พร้อมรีจิสทรีฟังก์ชันผู้ใช้แบบลำดับชั้นสำหรับการคำนวณที่กำหนดเอง
โมเดลโทเคน
TXLSFormulaTokenClass, TXLSFormulaTokenKind และ TXLSFormulaTokenSource จำแนกแต่ละ TXLSFormulaToken และบันทึกว่าโทเคนมาจากข้อความที่แยกวิเคราะห์, ไบต์ BIFF แบบคลาสสิก หรือแหล่งอื่นที่รองรับหรือไม่
| TXLSFormulaToken | Kind, Opcode, BaseOpcode, TokenClass, RawBytes, TextValue, NumberValue, IntegerValue, ArgumentCount, 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, Rgce, RgbExtra, BiffWritable และ BiffVersion |
| TXLSCompiledFormula | CreateTokenStream คืนโคลนสตรีมโทเคนสูตรที่คอมไพล์ซึ่งเป็นของตัวเรียกใช้ |
Syntax tree
CloneSyntaxTree คืน parsed tree ของ node TXLSSyntaxItem ที่เป็นของผู้เรียกเอง เอาไว้ตรวจโครงสร้าง: แต่ละ node รายงาน ItemType, payload แบบ literal (Value, IntValue, DecValue), Spaces นำหน้า, ลิงก์ของต้นไม้ (Parent, Child, ChildCount), ใบ reference เป็น TXLSRangeItem ผ่าน Range และข้อมูลค่าคงที่แบบอาร์เรย์ (ArrayRows, ArrayCols, ArrayValueCount และรายการ TXLSArraySerVal ใน ArrayValues) ต้นไม้ที่ได้เป็นสำเนาแยกขาด การเดินไปมาในมันจึงไม่แตะสูตรที่คอมไพล์ไว้ของสมุดงาน ส่วนสมาชิกสำหรับ mutate (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 เข้าร่วมก่อนการย้อนกลับของอีเวนต์รุ่นเก่า และแฮนเดลของรีจิสทรีจะถูกเรียกใช้นอกล็อกของรีจิสทรี เพื่อให้แฮนเดลสามารถยกเลิกการลงทะเบียนตัวเองได้อย่างปลอดภัย
การวินิจฉัยสูตร
TXLSXFormulaIssueKind, TXLSXFormulaLocation และ TXLSXFormulaIssue ถูกคืนโดย TXLSXWorkbook.AnalyzeFormulaIssues สำหรับฟังก์ชันที่ขาดหายไป, การอ้างอิงภายนอก และส่วนประกอบการอ้างอิงแบบวัฏจักร
การตรวจสอบชีตมาโคร
TXLSSheetKind แยกแยะเวิร์กชีต, ชีตมาโคร, ชีตแผนภูมิ, โมดูล VBA และเรกคอร์ดชีตที่ไม่รู้จักผ่าน TXLSWorksheet.SheetKind; TXLSMacroRisk, TXLSMacroCommandInfo และ TXLSMacroCommandArray อธิบายผลลัพธ์แบบมีประเภทจาก TXLSWorksheet.ScanMacroCommands
ประเภท AutoFit แบบรวมและการจัดเรียง
TXLSMergedAutoFitStrategy และ TXLSXMergedAutoFitStrategy เลือกการเติบโตแบบแรก, สุดท้าย หรือสมดุลสำหรับช่วงที่รวมกัน ในขณะที่ TXLSSortOrientation, TXLSSortFormulaMode และ TXLSSortCompareEvent ควบคุมการจัดเรียงที่เสถียรแนวตั้งหรือแนวนอนและการเคลื่อนย้ายสูตร