เอกสาร HotXLS

โทเคนสูตรและฟังก์ชันผู้ใช้

HotXLS เปิดเผยสตรีมโทเคนสูตรที่เป็นของตัวเรียกใช้สำหรับการตรวจสอบแบบไม่สูญเสียและการเขียนกลับแบบมีการป้องกันในทั้งสองกลไกสมุดงาน พร้อมรีจิสทรีฟังก์ชันผู้ใช้แบบลำดับชั้นสำหรับการคำนวณที่กำหนดเอง

โมเดลโทเคน

TXLSFormulaTokenClass, TXLSFormulaTokenKind และ TXLSFormulaTokenSource จำแนกแต่ละ TXLSFormulaToken และบันทึกว่าโทเคนมาจากข้อความที่แยกวิเคราะห์, ไบต์ BIFF แบบคลาสสิก หรือแหล่งอื่นที่รองรับหรือไม่

TXLSFormulaTokenKind, Opcode, BaseOpcode, TokenClass, RawBytes, TextValue, NumberValue, IntegerValue, ArgumentCount, ExternSheetIndex, Row1, Col1, Row2, Col2, Row1Relative, Col1Relative, Row2Relative, Col2Relative, ReferenceUsesOffsets, Supported, ArrayRows, ArrayCols, ArrayValueCount และ ArrayValues
TXLSFormulaTokenStreamDecodeBiff, Clone, CloneSyntaxTree, BindContext, CanCompileFor, CanWriteBiffAt, ReplaceReference, Count, Items, Rgce, RgbExtra, BiffWritable และ BiffVersion
TXLSCompiledFormulaCreateTokenStream คืนโคลนสตรีมโทเคนสูตรที่คอมไพล์ซึ่งเป็นของตัวเรียกใช้

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 ควบคุมการจัดเรียงที่เสถียรแนวตั้งหรือแนวนอนและการเคลื่อนย้ายสูตร

ดูเพิ่มเติม