HotXLS Belgeleri

Bağlama duyarlı formül değerlendirmesi

Classic XLS ve XLSX çalışma sayfaları, formül metnini seçili bire dayalı bir satır ve sütuna girilmiş gibi değerlendiren aynı salt okunur API'yi sunar

Tek seferlik değerlendirme

function EvaluateFormulaAt(Row, Col: Integer;
  const Formula: WideString): TXLSFormulaEvaluationResult; overload;

function EvaluateFormulaAt(Row, Col: Integer;
  const Formula: WideString;
  ReferenceStyle: TXLSFormulaReferenceStyle;
  const Options: TXLSFormulaEvaluationOptions): TXLSFormulaEvaluationResult; overload;
Çalışma sayfası, yerel ad, nitelendirilmemiş başvuru, tablo ve dış bağlantı bağlamını; etkin sayfayı, seçimi, hücre modelini, formül önbelleğini, kirli durumu veya bağımlılık grafiğini değiştirmeden sağlar
xlfrsA1 mutlak ve karma başvuruları korurken göreli başvuruları hedef hücreden çözümler; xlfrsR1C1 göreli uzaklıkları doğrudan o hedeften çözümler

Tür bilgili sonuçlar

TXLSFormulaEvaluationResult; Status, özgün tür bilgili Value, IsVolatile ve durum, yerel kod ile ileti içeren sabit bir Issue kaydı döndürür
TXLSFormulaEvaluationStatus = (xlfeOk, xlfeInvalidArgument,
  xlfeWorksheetUnavailable, xlfeParseError, xlfeUnsupportedFunction,
  xlfeCircularReference, xlfeExternalReferenceDenied, xlfeCancelled,
  xlfeResourceLimit, xlfeFailed, xlfeUnsafeFunctionDenied);

TXLSFormulaEvaluationIssue = record
  Status: TXLSFormulaEvaluationStatus;
  NativeCode: Integer;
  Message: WideString;
end;
    
#DIV/0! ve #REF! gibi formül değerleri, boş dizeler, diziler, Boolean değerler ve tarihler ayırt edilebilir değerler olarak kalır; ayrıştırma hataları, desteklenmeyen işlevler, döngüsel başvurular, reddedilen dış başvurular, reddedilen güvenli olmayan geri çağırmalar, iptal, geçersiz bağımsız değişkenler, kullanılamayan çalışma sayfaları ve kaynak tükenmesi açık API durumlarıyla bildirilir. Status xlfeOk olmadığında Issue.NativeCode altta yatan motor hata kodunu, Issue.Message ise insan okunabilir açıklamayı taşır

Yeniden kullanılabilir değişmez şablonlar

function CreateFormulaEvaluationTemplate(Row, Col: Integer;
  const Formula: WideString;
  ReferenceStyle: TXLSFormulaReferenceStyle): IXLSFormulaEvaluationTemplate;
Bir şablon, formülü çapasında bir kez derler ve farklı hedef hücrelerde yinelenen değerlendirme için EvaluateAt ve EvaluateAtWithOptions üyelerini sunar
Sıradan A1 ve R1C1 formülleri derlenmiş ağacı doğrudan yeniden kullanır; anlamı hedef tablo satırına bağlı olan A1 yapılandırılmış başvuruları bu hedef bağlam için çözümlenir ve derlenir
Şablonlar yazılabilir çalışma sayfası durumu tutmaz, çalışma kitabı yok edildikten sonra güvenli biçimde xlfeWorksheetUnavailable bildirir ve çalışma kitabı değişiklikleri özgün derlenmiş bağlamı geçersiz kılıyorsa bağlama duyarlı yeniden derlemeye geri döner

Kaynak, dış başvuru ve geri çağırma seçenekleri

AllowExternalReferencesVarsayılan olarak true değerindedir ancak yalnızca açıkça kaydedilmiş çalışma alanı hedeflerine veya dosya yerel önbelleklerine izin verir ve asla örtük dosya ya da ağ erişimi yapmaz
AllowUnsafeFormulaCallbacksVarsayılan olarak false değerindedir ve herhangi bir bağımsız değişken değerlendirilmeden önce tehlikeli işlev adlarının bir kullanıcı işlevi kayıt defterine veya geri çağırmaya ulaşmasını engeller; reddedilme xlfeUnsafeFunctionDenied döndürür
CancelFlagDeğerlendirmeden önce ve sonra denetlenen isteğe bağlı Boolean işaretçisi
MaxFormulaLengthVarsayılan değer 8192 UTF-16 kod birimidir
MaxEvaluationStepsVarsayılan değer 1,000,000 sözdizimi öğesi değerlendirmesidir
MaxRecursionDepthVarsayılan değer 256 iç içe formül değerlendirmesidir
MaxArrayBytesÜretilen dizi yükleri için varsayılan değer 64 MiB'dir
Sıfır veya negatif bir üst sınır, çağrı başına o sınırı devre dışı bırakır; çalışma kitabı genelindeki dizi bellek ilkesi geçerli olmayı sürdürür ve etkinleştirilmiş bir sınıra ulaşmak, geçici değerlendirme durumunu serbest bıraktıktan sonra xlfeResourceLimit döndürür
Açık seçenekleri kabul eden aşırı yükleme, AllowUnsafeFormulaCallbacks değerini o çağrı için belirleyici sayar; varsayılan tek seferlik ve şablon değerlendirmesi aynı ada sahip çalışma kitabı özelliğini devralır

Delphi örneği

Template := Sheet.CreateFormulaEvaluationTemplate(2, 2,
  '=R[-1]C[-1]+1', xlfrsR1C1);

Result := Template.EvaluateAt(2, 2);
if Result.Status = xlfeOk then
  UseValue(Result.Value);

Options := XLSDefaultFormulaEvaluationOptions;
Options.MaxEvaluationSteps := 10000;
Result := Template.EvaluateAtWithOptions(20, 4, Options);

C++Builder örneği

Lxcalc::_di_IXLSFormulaEvaluationTemplate evalTemplate =
  sheet->CreateFormulaEvaluationTemplate(1, 1,
    WideString(L"=ROW()+COLUMN()"), Lxcalc::xlfrsA1);

Lxcalc::TXLSFormulaEvaluationResult result =
  evalTemplate->EvaluateAt(7, 8);

Ayrıca bkz.

TXLSWorksheet.Calculate yöntemi
IXLSWorkbook.Calculate yöntemi
Excel hesaplama motoru