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
| AllowExternalReferences | Varsayı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 |
| AllowUnsafeFormulaCallbacks | Varsayı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 |
| CancelFlag | Değerlendirmeden önce ve sonra denetlenen isteğe bağlı Boolean işaretçisi |
| MaxFormulaLength | Varsayılan değer 8192 UTF-16 kod birimidir |
| MaxEvaluationSteps | Varsayılan değer 1,000,000 sözdizimi öğesi değerlendirmesidir |
| MaxRecursionDepth | Varsayı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.