HotXLS Belgeleri

Formül belirteçleri ve kullanıcı işlevleri

HotXLS, her iki çalışma kitabı motorunda kayıpsız inceleme ve korumalı geri yazma için çağıranın sahipliğindeki formül belirteci akışlarını ve özel hesaplama için hiyerarşik kullanıcı işlevi kayıtlarını açığa çıkarır

Belirteç modeli

TXLSFormulaTokenClass, TXLSFormulaTokenKind ve TXLSFormulaTokenSource, her TXLSFormulaToken öğesini sınıflandırır ve ayrıştırılmış metinden, klasik BIFF baytlarından veya desteklenen başka bir kaynaktan gelip gelmediğini kaydeder

TXLSFormulaTokenKind, Opcode, BaseOpcode, TokenClass, RawBytes, TextValue, NumberValue, IntegerValue, ArgumentCount, FunctionIndex, ExternSheetIndex, Row1, Col1, Row2, Col2, Row1Relative, Col1Relative, Row2Relative, Col2Relative, ReferenceUsesOffsets, Supported, ArrayRows, ArrayCols, ArrayValueCount ve ArrayValues
TXLSFormulaTokenStreamDecodeBiff, Clone, CloneSyntaxTree, BindContext, CanCompileFor, CanWriteBiffAt, ReplaceReference, Count, Items, Source, FormulaText, FullyDecoded, Rgce, RgbExtra, BiffWritable ve BiffVersion
TXLSCompiledFormulaCreateTokenStream, derlenmiş formül belirteci akışının çağıranın sahipliğinde bir kopyasını döndürür
TXLSFormulaArrayFormulaMode, FormulaLocale, MaxRow, MaxCol, FuncNamebyPtg, FuncArgsCntByPtg, GetCompiled, GetCompiledPreservingUnknownNames, GetCompiledR1C1, GetTokenStream, GetTranslated, GetStoreData, GetStoreDataExt, CanStoreData, BindUserDefinedFunctions, GetTExpData, SetMode, IsKnownFunction, GetFunctionNames ve FunctionArgumentClass

Her çalışma kitabı motoru, formülleri tek bir paylaşılan TXLSFormula örneği üzerinden derler ve çevirir: GetCompiled A1 tarzı metni bir sözdizimi ağacına ayrıştırır, GetCompiledR1C1 R1C1 başvularını formülün yaşadığı hücrenin koordinatlarına göre çözer, GetTranslated ağacı klasik BIFF baytlarından yeniden kurar ve GetStoreData ailesi belirteç baytlarını saklanmak üzere geri yazar. MaxRow ve MaxCol, derleyicinin kabul ettiği başvuru ızgarasını sınırlar — XLSX motoru bunları BIFF8 varsayılanlarından XLSX ızgarasına yükseltir ve BIFF8'e sığmayan başvuların ptg karşılığı olmadığından BIFF8 yazıcıları bunları kodlanamaz olarak bildirir

ArrayFormulaMode, bir ARRAY kaydının (dizi formülü) rgce'si yazılırken ayarlanır: değer sınıfı başvular ve dizi sabitleri bu durumda Excel'in kendisinin yazdığı gibi dizi sınıfı olarak (tAreaA / tArrayA) serileştirilir. Değer sınıfı işlenenlerle Excel, dizi formülünü gerçek bir dizi formülü saymak yerine örtük kesişimle değerlendirir; motorlar bu bayrağı ARRAY kaydının kendi rgce'si için bu yüzden kaldırır

Basit saklanan yaprağın sınırlı incelemesi

TXLSCompiledFormula.ReadSimpleLeafInfo(ExpectedOwner, MaxBytes, MaxTextCharacters, AllowUnboundBiff) ana sözdizimi ağacını ve tutulan belirteç akışını yerinde inceler; klonlamadan, derlemeden, değerlendirmeden veya belirteçleri ile dizileri somutlaştırmadan; varsayılan AllowUnboundBiff False'tur

Desteklenen şekiller bir mutlak REF3D veya RANGE3D yaprağı ile bir dize literalidir ve bir akış tutuluyorsa tam olarak tutarlı tek bir belirteç vardır; ifadeler, göreli veya ofset başvuruları, diziler, harici dizi verisi, bilinmeyen belirteçler, uyuşmayan ana ve tutulan yapraklar ve yabancı bağlı sahipler fslkUnsupported döndürür ve önbellek değerlerini veya hesaplama durumunu değiştirmez

TXLSFormulaSimpleLeafKindfslkUnsupported, fslkRange veya fslkLiteral; diğer sonuç alanlarını kullanmadan önce Kind'i inceleyin
TXLSFormulaLeafOwnerStateflosNoRetainedStream belirteç-akışı kökeni olmadığını bildirir, flosUnboundStream içe aktarılmış bağlı-olmayan BIFF bildirir, flosSameOwner tam bağlı sahip eşleşmesi bildirir ve flosForeignOwner farklı bir bağlı sahibi reddeder
TXLSFormulaSimpleLeafInfoKind, OwnerState, RangeType, ExternId, FirstRow, FirstCol, LastRow, LastCol, TextCharacters, StoredTextCharacters, ReadBytes, SyntaxNodes ve TokenCount içeren dizesiz bir değer kaydı
Range coordinates and identityKoordinatlar 0 tabanlıdır; ExternId BIFF wire indeksi değil mantıksal 1 tabanlı sözdizimi ağacı kimliğidir; caller onu sabitlenmiş çalışma kitabı üzerinden çözmelidir ve harici kitapları, sayfa span'lerini, eksik sayfaları veya desteklenen yakalama aralığı dışındaki koordinatları reddetmelidir
Source costsTextCharacters, UTF-16 kod ünitelerinde literal çıktı uzunluğudur veya bir aralık için sıfırdır; StoredTextCharacters tutulan kaynak metnini, belirteç metnini ve incelenen sözdizimi metnini toplar; ReadBytes bunların iki baytlık metin maliyetini ve tutulan ham bayt uzunluklarını — ayrı tutulan gösterimler dahil — toplar; bu sayaçlar toplam heap kullanımını değil sınırlı inceleme girdilerini tanımlar
Syntax and token countsSyntaxNodes, düz derlenmiş yaprak için bir veya ana ve tutulan yaprakların ikisi de denetlendiğinde ikidir; TokenCount, akış yokken sıfır veya desteklenen tutarlı tutulan akışla birdir
TXLSFormulaTokenStream.ReadSimpleLeafInfoAlt katman aynı sahip ve kotaları, isteğe bağlı ComparedLeaf ve isteğe bağlı ReferenceContext alır; akışın kendi özel sözdizimini, belirteçlerini ve ham baytlarını doğrudan denetler; ComparedLeaf ana-yaprak tutarlılık denetimleri eklerken ReferenceContext, serileştirilmiş metin-formül extern indekslerini kopyalamadan eşler
TXLSCompiledFormula.ReadSimpleLiteralAynı argümanları alır, yaprak denetimlerini yineler ve caller sahipliğinde bir WideString döndürür; yalnızca kalan bayt ve karakter kotaları da çıktısını kapsıyorsa; desteklenmeyen yapraklar veya yetersiz kalan kapasite EInvalidOperation fırlatır

ExpectedOwner, tüketen kaynağa bağlı tam hesaplayıcı olmalı ve inceleme ile literal çıkarımı boyunca canlı ve stabil kalmalıdır; eksik sahip EArgumentException, negatif kotalar EArgumentOutOfRangeException ve aşırı büyük tutulan kaynak girişleri, içerik karşılaştırmalarından veya çıktı kopyalamadan önce EInvalidOperation fırlatır

Tutulan akışı olmayan düz bir yaprak özgün sahibini kuramaz; bağlı olmayan içe aktarılmış bir akış da çalışma kitabı kimliği taşımaz, bu nedenle açık AllowUnboundBiff=True yalnızca caller kaynak hesaplayıcıyı zaten sabitlemişse ve hücreleri okumadan önce yerel sayfa kimliğini doğrulayacaksa uygundur; içe aktarılan başvuru incelemesi şu anda BIFF8 başvurularını kabul eder ve farklı BIFF5 extern gösterimini reddeder

FFirstRowRel, FFirstColRel, FLastRowRel ve FLastColRel adlı eski sözdizimi alanları mutlak koordinatlar için doğrudur; yardımcı ayrıca bağımsız belirteç göreli bayraklarını ve ofset gösterimini denetler, böylece tüketiciler mutlak koordinatları bu tarihsel adlardan çıkarsamak zorunda kalmaz

Sözdizimi ağacı

CloneSyntaxTree, yapısal inceleme amacıyla TXLSSyntaxItem düğümlerinden oluşan, çağıranın sahipliğinde ayrıştırılmış bir ağaç döndürür: her düğüm kendi ItemType değerini, literal yükünü (Value, IntValue, DecValue), baştaki Spaces bilgisini, ağaç bağlantılarını (Parent, Child, ChildCount), Range üzerinden TXLSRangeItem türündeki başvuru yaprağını ve dizi sabiti verilerini (ArrayRows, ArrayCols, ArrayValueCount ve ArrayValues içindeki TXLSArraySerVal girdileri) raporlar. Ağaç bağımsız bir kopyadır; dolayısıyla üzerinde gezinmek, çalışma kitabının derlenmiş formüllerine hiç dokunmaz. Mutasyon üyeleri (AddChild, PushChild, CopyObject, OffsetCopyReferences, AdjustForShift ve TXLSRangeItem.CopyObject / AdjustForShift), yeniden derlemeden önce klonlanmış ağacı yeniden yazacak araçlar için mevcuttur

Çalışma kitabı giriş noktaları

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 ve SetFormulaTokens, sahipliği açık tutar ve bir hücre değiştirilmeden önce bağlamı, BIFF sürümünü, belirteç desteğini, dizi sahipliğini ve başvuru sınırlarını doğrular

Kullanıcı işlevi kayıtları

TXLSUserFunctionResolver ve TXLSUserFunctionRegistry, RegisterHandler, UnregisterHandler, Clear, Contains, TryGetHandler ve Count aracılığıyla ada göre arama sağlar

Workbook.RegisterUserFunction('NETMARGIN', CalculateNetMargin);
Workbook.RegisterGlobalUserFunction('FISCALYEAR', CalculateFiscalYear);
try
  Workbook.Calculate;
finally
  Workbook.UnregisterUserFunction('NETMARGIN');
  Workbook.UnregisterGlobalUserFunction('FISCALYEAR');
end;

IXLSWorkbook, TXLSWorkbook ve TXLSXWorkbook, RegisterUserFunction, UnregisterUserFunction, ClearUserFunctions, RegisteredUserFunctionCount, RegisterGlobalUserFunction, UnregisterGlobalUserFunction, ClearGlobalUserFunctions ve RegisteredGlobalUserFunctionCount öğelerini açığa çıkarır

Karşılık gelen birim düzeyindeki giriş noktaları XLSRegisterGlobalUserFunction, XLSUnregisterGlobalUserFunction, XLSClearGlobalUserFunctions, XLSRegisteredGlobalUserFunctionCount ve XLSGlobalUserFunctionRegistered öğeleridir

TXLSCalculator.OnUserFunctionResolve, eski olay geri dönüşünden önce katılır ve kayıt işleyicileri kayıt kilidinin dışında çağrılır; böylece bir işleyici kendini güvenle kayıttan kaldırabilir

Tehlikeli dış ve makro tarzı işlev adları, AllowUnsafeFormulaCallbacks çalışma kitabı için ya da tekil bağlamsal değerlendirme için açıkça etkinleştirilmedikçe, bağımsız değişken değerlendirmesi ve işleyici aramasından önce engellenir; sıradan kullanıcı işlevi adları varsayılan olarak kullanılabilir kalır

Formül tanılaması

TXLSXFormulaIssueKind, TXLSXFormulaLocation ve TXLSXFormulaIssue, eksik işlevler, dış başvurular ve döngüsel bağımlılık bileşenleri için TXLSXWorkbook.AnalyzeFormulaIssues tarafından döndürülür

Makro sayfası incelemesi

TXLSSheetKind, TXLSWorksheet.SheetKind aracılığıyla çalışma sayfası, makro sayfası, grafik sayfası, VBA modülü ve bilinmeyen sayfa kayıtlarını ayırt eder; TXLSMacroRisk, TXLSMacroCommandInfo ve TXLSMacroCommandArray, TXLSWorksheet.ScanMacroCommands öğesinin türlenmiş sonuçlarını açıklar

Birleştirilmiş Otomatik Sığdır ve sıralama türleri

TXLSMergedAutoFitStrategy ve TXLSXMergedAutoFitStrategy, birleştirilmiş aralıklar için ilk, son veya dengeli büyümeyi seçerken TXLSSortOrientation, TXLSSortFormulaMode ve TXLSSortCompareEvent dikey veya yatay kararlı sıralamayı ve formül hareketini denetler

Ayrıca bkz.