Klasik XLS ve XLSX, bir çağıran bir hücreyi değiştirmeden önce formül girişini sınıflandırmak için aynı yan etkisiz sözleşmeyi sunar
Paylaşılan ilke
TXLSFormulaEmptyStringMode =
(xlfesmClearCell, xlfesmPreserveString);
TXLSFormulaUnknownSymbolMode =
(xlfusmReject, xlfusmPreserve);
TXLSFormulaEntryPolicy = record
EmptyStringMode: TXLSFormulaEmptyStringMode;
UnknownFunctionMode: TXLSFormulaUnknownSymbolMode;
UnknownNameMode: TXLSFormulaUnknownSymbolMode;
end;
property FormulaEntryPolicy: TXLSFormulaEntryPolicy;
Klasik IXLSWorkbook ve TXLSWorkbook , özelliği TXLSXWorkbookile birlikte sunar; XLSDefaultFormulaEntryPolicy boş girişi temizler ve bilinmeyen işlevleri ile bilinmeyen tanımlı adları reddeder
Çalışma kitabı özelliği değere göre kopyalanır ve atandığında atomik olarak doğrulanır; böylece desteklenmeyen numaralandırma değerleri, önceki ilkeyi değiştirmeden EArgumentOutOfRangeException oluşturur
Doğrulama sonucu
function ValidateFormulaEntry(Row, Col: Integer;
const Formula: WideString): TXLSFormulaEntryValidationResult;
TXLSFormulaEntryValidationResult = record
Issue: TXLSFormulaEntryIssue;
Action: TXLSFormulaEntryAction;
Symbol: WideString;
end;
Issue ; hata yok, bilinmeyen işlev, bilinmeyen ad, söz dizimi hatası, hedef biçimi sınırlaması ve geçersiz hedef koordinatları arasında ayrım yapar
Action ; hücreyi temizlemeyi, dize depolamayı, formül depolamayı veya reddetmeyi seçer; bir bilinmeyen işlev veya ad tanındıysa Symbol bunu tanımlar
Boş metin ve formüller
Tam olarak boş giriş, xlfeaClearCell ayarına göre xlfeaStoreString veya EmptyStringMode
Boş bir dize döndüren bir formül — örneğin =""gibi boş bir dize döndüren formül formül olarak kalır ve hedef biçim onu temsil edebiliyorsa xlfeaStoreFormula döndürür
Formül metni baştaki bir eşittir işaretini içerebilir veya onu atlayabilir
Normal Klasik XLS veya XLSX hücre Value özelliği aracılığıyla tam olarak boş bir dize atamak artık bu modu doğrudan uygular: varsayılan, mevcut değeri veya formülü kaldırır; xlfesmPreserveString ise hücre içeriğini uzunluğu sıfır olan sabit bir dizeyle değiştirir
Null ve Unassigned her iki modda da her zaman hücreyi temizler; ="" gibi gerçek bir formül ise bağımsız olarak depolanan veya hesaplanan boş dize sonucuyla formül olarak kalır
XLSX dize ve Variant satır veya sütun yazıcıları, temizlenen boşlukları somutlaştırmadan aynı kuralı uygular ve kalan değerler orada temsil edilebiliyorsa paketlenmiş depolamayı korur
Yerel XLS, XLSX ve ODS okuyucuları ile XLS-XLSX veya XLSX-XLS dönüştürücüleri depolanan değerleri güvenilir giriş olarak işler; böylece dosya düzeyinde sabit bir boş dize, hedef çalışma kitabı varsayılan kullanıcı girişi ilkesini korusa bile varlığını sürdürür
Bilinmeyen simgeler ve hedef biçimleri
Çalışma kitabı yerel veya işlem genelinde kayıtlı kullanıcı işlevleri ile atanan OnUserFunction veya OnUserFunctionEx geri çağrıları, bir işleyici çağrılmadan doğrulama sırasında bilinen sayılır; kayıtlı olmayan çağrılar ise işlev adlarını Symbol
Katı mod, bilinmeyen işlevler veya adlar için xlfeaReject döndürür; normal hücre Formula özelliği üzerinden atama, değeri, formül önbelleğini veya bağımlılıkları değiştirmeden önce reddeder
Koruma modu tanılamayı korur ve formülü normal hücre API'si üzerinden depolar; Klasik XLS, bilinmeyen bir çağrıyı BIFF eklenti kullanıcı işlevi belirteçleri aracılığıyla serileştirir ve bilinmeyen ad metnini kaydetme, yeniden açma ve XLS/XLSX dönüştürme boyunca korur
Klasik XLS ayrıca bilinen formülleri BIFF yazıcı aracılığıyla derler ve ifade temsil edilemiyorsa xlfeiTargetFormatUnsupported döndürür; XLSX ise formül modelinin desteklediği bilinen modern formül işlevlerini kabul eder
XLSX doğrulaması LAMBDA'yı, sözcüksel LET çağrılabilirlerini, lambdalara başvuran tanımlı adları, rapor yer tutucularını, kayıtlı dış çalışma kitabı bağlantılarını ve iç içe ile geçerli satır biçimleri de dahil olmak üzere geçerli nitelemiş veya nitelememiş yapılandırılmış başvuruları tanır
Uyumluluk modu, çözümlenmemiş dış yapılandırılmış başvuruları sonraki işleme için koruyabilir; katı mod ise çözümlenmemiş tablo adlarını reddetmeye devam eder
Hesaplama ve toplu denetim
Lambda ve kullanıcı işlevi dağıtımından sonra işlenmemiş kalan korunan bir bilinmeyen işlev veya korunan bir bilinmeyen ad, Excel $1Dhatası olan #NAME? kodlu bir Variant hatası olarak değerlendirilir; aynı türlü hata bağımlı formüller ve bağlama duyarlı değerlendirme boyunca yayılır
Uygulanmamış bilinen yerleşik işlevler bilinmeyen bir çağrıdan ayrışmış kalır; bir çalışma kitabı yerel veya işlem genelinde kullanıcı işlevini kaydetmek, değiştirmek, kaldırmak veya temizlemek ile tanımlı ad formülünü değiştirmek ise bayat bağımlılık ve hesaplama durumunu geçersiz kılar
function AuditFormulaSymbols: TXLSFormulaSymbolIssues; overload;
function AuditFormulaSymbols(
out AStats: TXLSFormulaSymbolAuditStats):
TXLSFormulaSymbolIssues; overload;
TXLSFormulaSymbolIssueKind = (xlfsiUnknownFunction, xlfsiUnknownName,
xlfsiSyntaxError);
TXLSFormulaSymbolLocationKind = (xlfslCell, xlfslDefinedName);
TXLSFormulaSymbolIssue = record
Kind: TXLSFormulaSymbolIssueKind;
LocationKind: TXLSFormulaSymbolLocationKind;
Sheet: Integer;
Row: Integer;
Col: Integer;
DefinedNameIndex: Integer;
DefinedName: WideString;
Formula: WideString;
Symbol: WideString;
end;
TXLSWorkbook and TXLSXWorkbook aynı toplu denetim aşırı yüklemelerini sağlar; her sorun, bilinmeyen bir işlevi, bilinmeyen bir adı veya sözdizimi hatasını, ya bir çalışma sayfası hücre konumuyla (LocationKind = xlfslCellveLocationKind = xlfslDefinedNameaynı toplu denetim aşırı yüklemelerini sağlar; her sorun, bir çalışma sayfası hücre konumu veya tanımlı ad konumu, kaynak formül ve çözümlenmemiş simge ile birlikte bilinmeyen bir işlevi, bilinmeyen bir adı veya söz dizimi hatasını tanımlar
Denetim, metin taramak yerine ayrıştırılmış formül ağaçlarını veya depolanan BIFF belirteçlerini gezdirir; böylece bir dizenin içindeki işlev benzeri metin bildirilmez. XLSX derlemesi, çözümlenmiş formül metni, çalışma sayfası, yerel ayar, tanımlı ad jenerasyonu, kullanıcı işlevi kayıt jenerasyonları ve geri çağrı kullanılabilirliğine göre anahtarlanan işleme yerel bir önbellek kullanır
EntryCount denetlenen formülleri, UniqueFormulaCount bağımsız olarak derlenen veya incelenen formülleri, CacheHitCount ise işlem önbelleği tarafından sunulan yinelenen girdileri bildirir
Çalışma sayfası değişikliği yok
Doğrulama hücre oluşturmaz veya düzenlemez, önbelleğe alınmış değerleri değiştirmez, bağımlılık grafiğini güncellemez, çalışma kitabını değiştirilmiş olarak işaretlemez veya kayıtlı bir kullanıcı işlevi işleyicisini çağırmaz
Doğrudan doğrulama değişikliksiz kalır; normal formül ataması aynı kararı dahili olarak uygular ve yalnızca doğrulama ile hedef biçimi hazırlığı başarılı olduktan sonra kesinleştirir
Delphi örneği
Policy := Workbook.FormulaEntryPolicy;
Policy.UnknownFunctionMode := xlfusmReject;
Policy.UnknownNameMode := xlfusmReject;
Workbook.FormulaEntryPolicy := Policy;
Validation := Sheet.ValidateFormulaEntry(4, 2, FormulaText);
if Validation.Action = xlfeaStoreFormula then
Sheet.Cells[4, 2].Formula := FormulaText;
Issues := Workbook.AuditFormulaSymbols(Stats);
for I := 0 to High(Issues) do
if Issues[I].Kind = xlfsiUnknownFunction then
LogUnknownSymbol(Issues[I].Symbol);Ayrıca bkz.