HotXLS Docs

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