Excel Hesaplama Motoru
Genel bakış
HotXLS, formülleri ayrıştırmak ve hesaplamak için yerleşik bir motor içerir; bu motor hücre formüllerini süreciniz içinde programlı olarak değerlendirir ve hesaplanan çalışma kitabı değerlerini çözmek için Excel'i veya harici OLE denetleyicilerini çağırma gereksinimini ortadan kaldırır
Hesaplama yürütme
Kaydetmeden veya dışa aktarmadan önce, ana çalışma kitabı arayüzünü kullanarak çalışma kitabının tam bir yeniden hesaplamasını tetikleyin
procedure Calculate;
Motor standart matematiksel, tarih, mantıksal, dize ve istatistiksel işlev ailelerini destekler; hücre bağımlılıklarını sıralı olarak çözer ve döngüsel başvuruları önlemek için başvuru zincirlerini izler
Bağlamsal formül değerlendirme
TXLSWorksheet ve TXLSXWorksheet, geçici bir hücre yazmadan veya çalışma kitabının hesaplama durumunu değiştirmeden seçilen 1 tabanlı satır ve sütundaki formül metnini hesaplamak için EvaluateFormulaAt metodunu sunar
A1 ve R1C1 başvuru stilleri, yerel adlar, yapılandırılmış başvurular, formül bağımlılıkları, dizi kökleri, tipli Excel hata değerleri, volatile durumu, açık harici başvuru yetkilendirmesi, iptal ve kararlı hata kategorileri normal çalışma kitabı değerlendiricisini paylaşır
CreateFormulaEvaluationTemplate değişmez bir anchor'ı bir kez derler ve hedef hücreler arasında yeniden kullanır; hedef satırına duyarlı A1 yapılandırılmış başvurular her hedef bağlamı için çözülür ve çağrı başına limitler formül uzunluğunu, sözdizimi adım sayısını, recursion derinliğini ve üretilen dizi baytlarını sınırlar
Sonuç türleri, varsayılan bütçeler, yaşam döngüsü kuralları ve Delphi ya da C++Builder örnekleri için Bağlamsal formül değerlendirme konusuna bakın
Dizi operatörleri
Aritmetik, karşılaştırma, birleştirme, tek terimli olumsuzlama ve yüzde operatörleri skaler değerlerin yanı sıra hesaplanmış dizileri de kabul eder
Bir skaler her öğeye yayılır; tek satırlık veya tek sütunluk bir dizi uyumlu boyut boyunca yayılır. Uyumsuz şekiller #VALUE! döndürür
Hatalar kendi sonuç hücrelerinde tutulur; böylece tek bir sıfıra bölme veya geçersiz öğe, kalan hücreler için hesaplanan değerleri yok etmez
COMBINA ve PERMUTATIONA, kesilmiş negatif olmayan tam sayı bağımsız değişkenleri ve taşma denetimiyle skaler ve broadcast dizi semantiğini paylaşır; MUNIT ise kompakt bir iki boyutlu Double birim matris döndürür
FormulaArrayMemoryLimit varsayılan olarak 64 MiB'dır ve üretilen matris yüklerini sınırlar; MUNIT ayrıca sabit bir boyut üst sınırı dayatmak yerine kalan çalışma sayfası spill alanını doğrular
Formül varlığı denetimi
ISFORMULA(reference), başvurulan hücreyi hesaplamadan formül sahipliğini inceler; böylece önbellekteki sonuç bir hata veya boş dize olsa bile formül tespit edilebilir kalır
Dikdörtgen bir aralık aynı şekle sahip Boolean bir dizi döndürür; paylaşılan formüller ile klasik veya XLSX dizi formülü üyeleri true döndürürken, dinamik spill'in yalnızca anchor hücresi formül hücresidir
Doğrudan değerler ve skaler tanımlı adlar #VALUE! döndürür, geçersiz başvurular #REF! değerini korur ve üretilen Boolean dizileri FormulaArrayMemoryLimit ile sınırlanır
XLSX, _xlfn.ISFORMULA yazar ve açılışta öneksiz adı geri yükler; ODS standart of:=ISFORMULA sözdizimini kullanır, Classic XLS çıktısı ise veri işlemeden desteklenmeyen future işlevi reddeder
Modern metin işlevleri
UNICHAR sayısal girişleri sıfıra doğru keser ve geçerli Unicode skaler değerlerini UTF-16'ya dönüştürür; bu, ek düzlemler için surrogate çifti çıktısını ve tüm private-use aralıklarını kapsar
Sıfır ve aralık dışı girişler #VALUE! döndürür; tek başına surrogate kod noktaları ve Unicode noncharacter'ları #N/A döndürür. Aralık ve üretilmiş dizi girişleri bu hataları öğe başına korur
BAHTTEXT sonlu sayıları Tayland bahtı ve satang metnine dönüştürür; orta noktadaki değerleri iki ondalık basamakta sıfırdan uzağa yuvarlar, yuvarlanan büyüklük sıfır olduğunda negatif işareti korur ve bilimsel gösterimi tam sayı tipine daraltmadan açar
XLSX, UNICHAR'ı _xlfn.UNICHAR olarak kaydeder ve dosya yeniden açıldığında öneksiz adı geri yükler; BAHTTEXT standart işlev kimliğini kullanır ve XLS ile XLSX formüllerinde öneksiz kalır
Regresyon ve tahmin
LINEST ve LOGEST bir veya daha fazla tahmin edici sütun ya da satır kabul eder ve katsayıları Excel sırasıyla, ardından varsa kesişme noktasıyla döndürür
İstatistik bağımsız değişkeni true olduğunda her iki işlev de katsayı hatalarını, uyum istatistiklerini, F istatistiğini, serbestlik derecesini, regresyon kareler toplamını ve artık kareler toplamını içeren beş satırlık tam sonucu döndürür
TREND ve GROWTH aynı çok değişkenli modeli kullanır ve verilen yeni tahmin edici değerlerin satır veya sütun şeklini korur
Classic XLS bağımlılık yeniden hesaplaması
TXLSWorkbook.Recalculate ilk çağrıda bir formül bağımlılık grafiği kurar ve formülleri fiziksel hücre sırası yerine önce bağımlılıklar gelecek şekilde değerlendirir
Sonraki çağrılar grafiği yeniden kullanır ve yalnızca değişen değerlerin geçişli bağımlılarını ve volatile formülleri yeniden hesaplar; formül düzenlemeleri, adlar, çalışma sayfası yapısı ve başvuru yeniden yazımları grafiği güvenle geçersiz kılıp yeniden kurar
Döngüsel başvurular klasik çalışma kitabının EnableIteration, MaxIterations ve MaxIterationChange ayarlarını kullanır; UseFullPrecision=False ise görüntülenen sayı hassasiyetini önbelleğe alınan sonuçlara ve bunların ardındaki hesaplamalara uygular
Tanımlı ad bağımlılıkları
Artımlı hesaplama, çalışma kitabı kapsamlı ve çalışma sayfası kapsamlı adları iç içe formüller ve çok alanlı başvurular üzerinden izler
Döngüsüz ad formülleri tam hücre bağımlılıklarını sağlar; recursive ad döngüleri ise güvenle Fallback yaparak volatile yeniden hesaplamaya döner
What-If veri tabloları
Hem klasik XLS hem de modern XLSX çalışma sayfaları tek değişkenli veya iki değişkenli What-If veri tabloları oluşturabilir, hesaplayabilir, okuyabilir, yazabilir, kopyalayabilir ve yapısal olarak ayarlayabilir
function AddDataTable( const AResultRange, ARowInputCell, AColumnInputCell: WideString ): TXLSDataTable;
Sonuç aralığı yalnızca hesaplanmış çıktı hücrelerini içerir; formüller ve deneme değerleri, Excel ile aynı yerleşimde çevredeki hücreleri kullanır
- Sütun girişli tablo —
ARowInputCell'i boş bırakın, her sonuç sütununun üstüne bir kaynak formül koyun ve deneme değerlerini sonuç satırlarının soluna yerleştirin - Satır girişli tablo —
AColumnInputCell'i boş bırakın, her sonuç satırının soluna bir kaynak formül koyun ve deneme değerlerini sonuç sütunlarının üstüne yerleştirin - İki değişkenli tablo — her iki giriş hücresini de verin, kaynak formülü sonuç aralığının üstüne ve soluna, satır girişi deneme değerlerini sonuçların üstüne, sütun girişi deneme değerlerini ise soluna koyun
Sheet.Range['B1', 'B1'].Value := 0;
Sheet.Range['D1', 'D1'].Formula := '=B1*2+1';
Sheet.Range['C2', 'C2'].Value := 1;
Sheet.Range['C3', 'C3'].Value := 2;
Sheet.Range['C4', 'C4'].Value := 3;
Table := Sheet.AddDataTable('D2:D4', '', 'B1');
Workbook.Recalculate;
Bu sütun girişli örnek D2:D4 aralığında 3, 5 ve 7 değerlerini hesaplar; her deneme değeri izole bir hesaplama bağlamı üzerinden uygulanır, dolayısıyla diğer formül hücreleri üzerinden dolaylı yoldan B1'e ulaşan formüller de doğru biçimde yeniden hesaplanır
AddDataTable, geçersiz aralık, geçersiz giriş başvurusu veya her iki giriş başvurusunun da boş olduğu durumlarda nil döndürür; çalışma sayfasının DataTables koleksiyonu oluşan tanımı ve silinmiş giriş bayraklarını sunar
Başvuruda kullanılan bir giriş hücresinin silinmesi tablo tanımını korur ve çıktıları için #REF! döndürür; bu, kayıtlı çalışma kitabı semantiğiyle uyumludur
Kullanıcı tanımlı işlevler
Formül motorunu özel iş mantığıyla genişletin; aşağıdaki olayları kullanarak kendi işlevlerinizi kaydedin
Tehlikeli harici ve makro tarzı adlar, çalışma kitabı veya tekil bağlamsal değerlendirme AllowUnsafeFormulaCallbacks izinini açıkça vermedikçe, bağımsız değişkenler ya da işleyiciler çalıştırılmadan önce reddedilir
- OnUserFunction olayı — Temel kullanıcı tanımlı işlevleri işleyin
- OnUserFunctionEx olayı — Hücre aralığı parametreleri olan karmaşık işlevleri çözün
- Kullanıcı işlevi geri çağırması — Harici işleyiciler için imza gereksinimleri