HotXLS-dokumentaatio

Excel-laskentamoottori

Yleiskatsaus

HotXLS sisältää sisäänrakennetun moottorin kaavojen jäsentämiseen ja laskemiseen; tämä moottori arvioi solukaavoja ohjelmallisesti prosessisi sisällä, mikä poistaa tarpeen kutsua Exceliä tai ulkoisia OLE-ohjaimia laskettujen työkirja-arvojen ratkaisemiseksi

Laskennan suoritus

Ennen tallentamista tai vientiä käynnistä työkirjan täydellinen uudelleenlaskenta pääasiallisen työkirjarajapinnan avulla

procedure Calculate;

Moottori tukee standardi perheitä matemaattisille, päiväys-, loogisille, merkkijono- ja tilastofunktioille; se ratkaisee soluriippuvuudet peräkkäin ja seuraa referenssiketjuja estääkseen kehäviittaukset

Kontekstikohtainen kaavojen evaluointi

TXLSWorksheet ja TXLSXWorksheet tarjoavat metodin EvaluateFormulaAt, jolla kaavatekstiä voi laskea valitussa, yhdestä alkavassa rivissä ja sarakkeessa kirjoittamatta väliaikaista solua tai muuttamatta työkirjan laskentatilaa

A1- ja R1C1-viittaustyylit, paikalliset nimet, rakenteiset viittaukset, kaavariippuvuudet, taulukkojuuret, tyypitetyt Excel-virhearvot, muuttuneisuustila, ulkoviittausten eksplisiittinen salliminen, keskeytys ja vakaat virheluokat kulkevat kaikki tavallisen työkirjan evaluatorin kautta

CreateFormulaEvaluationTemplate kokoaa muuttumattoman ankkurin kerran ja käyttää sitä uudelleen kaikissa kohdesoluissa; kohderiviin sidotut A1-rakenteiset viittaukset ratkaistaan jokaista kohdekontekstia varten, ja kutsukohtaiset rajat rajoittavat kaavan pituutta, syntaksin osavaiheita, rekursion syvyyttä ja tuotettujen taulukoiden tavumäärää

Tulostyypit, oletusarvoiset resurssirajat, elinkaarisäännöt sekä Delphi- ja C++Builder-esimerkit on kuvattu sivulla kontekstikohtainen kaavojen evaluointi

Taulukkooperaattorit

Aritmeettiset operaattorit, vertailuoperaattorit, ketjutus, unaarinen negaatio ja prosenttioperaattori hyväksyvät sekä lasketut taulukot että skalaariarvot

Skalaari levittäytyy jokaiseen elementtiin, ja yhden rivin tai yhden sarakkeen taulukko levittäytyy yhteensopivan ulottuvuuden yli; yhteensopimattomat muodot palauttavat arvon #VALUE!

Virheet säilytetään kunkin laskun omassa tulosolussa, joten yksittäinen nollalla jakaminen tai virheellinen elementti ei hukkaa muiden solujen laskettuja arvoja

COMBINA ja PERMUTATIONA noudattavat samaa skalaari- ja levitettyjen taulukoiden semantiikkaa katkaistuilla ei-negatiivisilla kokonaislukuargumenteilla ja tarkistetulla ylivuodolla, kun taas MUNIT palauttaa kompaktin kaksiulotteisen Double-tyyppisen identiteettimatriisin

FormulaArrayMemoryLimit on oletuksena 64 MiB ja rajoittaa tuotettujen matriisien datamäärää; MUNIT tarkistaa myös laskentataulukosta jäljellä olevan spill-alueen sen sijaan, että asettaisi kiinteän ulottuvuusrajan

Kaavojen läsnäolon tarkastus

ISFORMULA(reference) tarkistaa kaavan olemassaolon laskematta viitattua solua, joten kaava on havaittavissa myös silloin, kun sen välimuistissa oleva tulos on virhe tai tyhjä merkkijono

Suorakulmainen alue palauttaa samanmuotoisen totuusarvotaulukon: jaetut kaavat sekä klassisten ja XLSX-taulukkokaavojen jäsenet palauttavat toden, kun taas dynaamisessa spillissä vain ankkuri on kaavasolu

Suorat arvot ja skalaariset määritellyt nimet palauttavat arvon #VALUE!, virheelliset viittaukset säilyttävät arvon #REF!, ja tuotettujen totuusarvotaulukoiden kokoa rajoittaa FormulaArrayMemoryLimit

XLSX kirjoittaa nimen _xlfn.ISFORMULA ja palauttaa pelkän nimen avatessa, ODS käyttää vakiintunutta syntaksia of:=ISFORMULA, ja klassinen XLS-tuloste hylkää tukemattoman future-funktion jo ennen tietojen tallentamista

Modernit tekstifunktiot

UNICHAR katkaisee numeeriset syötteet nollaa kohti ja muuntaa kelvolliset Unicode-skaaliarvot UTF-16-muotoon, mukaan lukien surrogate-parit täydentäville tasoille sekä kaikki yksityiskäytön alueet

Nolla ja alueen ulkopuoliset syötteet palauttavat arvon #VALUE!, kun taas eristetyt surrogate-koodipisteet ja Unicode-standardin noncharacter-koodipisteet palauttavat arvon #N/A; alue- ja taulukkosyötteet säilyttävät nämä virheet elementeittäin

BAHTTEXT muuntaa äärelliset luvut thaimaalaisia bahtteja ja satangeja kuvaavaksi tekstiksi, pyöristää puolivälissä olevat arvot nollasta poispäin kahden desimaalin tarkkuudella, säilyttää miinusmerkin, kun pyöristetty suuruus on nolla, ja purkaa tieteellisen esitystavan ilman kaventamista kokonaislukutyypin kautta

XLSX tallentaa funktion UNICHAR muodossa _xlfn.UNICHAR ja palauttaa pelkän nimen uudelleen avattaessa; BAHTTEXT käyttää vakiotunnistettaan ja pysyy pelkkänä nimenä XLS- ja XLSX-kaavoissa

Regressio ja ennustaminen

LINEST ja LOGEST hyväksyvät yhden tai useamman selittävän sarakkeen tai rivin ja palauttavat kertoimet Excelin järjestyksessä, jota seuraa valinnainen vakiotermi

Kun statistiikka-argumentti on tosi, molemmat funktiot palauttavat täyden viisirivisen tuloksen, joka sisältää kertoimien virheet, sovitusstatistiikat, F-statistiikan, vapausasteet sekä regressio- ja jäännöstermien neliösummat

TREND ja GROWTH käyttävät samaa monimuuttujamallia ja säilyttävät annettujen uusien selittävien arvojen rivi- tai sarakemuodon

Klassisen XLS:n riippuvuuksien uudelleenlaskenta

TXLSWorkbook.Recalculate rakentaa kaavojen riippuvuusgraafin ensimmäisellä kutsulla ja evaluoi kaavat edeltäjät ensin -järjestyksessä solujen fyysisen järjestyksen sijaan

Myöhemmät kutsut käyttävät graafia uudelleen ja laskevat uudelleen vain muuttuneiden arvojen transitiiviset riippuvaiset sekä volatiilit kaavat; kaavamuokkaukset, nimet, laskentataulukon rakenne ja viittausten uudelleenkirjoitus mitätöivät graafin ja rakentavat sen turvallisesti uudelleen

Kehäviittaukset käyttävät klassisen työkirjan asetuksia EnableIteration, MaxIterations ja MaxIterationChange, ja UseFullPrecision=False soveltaa näytettyjen lukujen tarkkuutta välimuistissa oleviin tuloksiin ja niiden jatkolaskentaan

Määriteltyjen nimien riippuvuudet

Inkrementaalinen laskenta seuraa työkirjan ja laskentataulukon laajuisia nimiä sisäkkäisten kaavojen ja monialueisten viittausten läpi

Syklittömät nimikaavat tuottavat tarkat soluriippuvuutensa, kun taas rekursiiviset nimisyklit siirtyvät turvallisesti volatiiliin uudelleenlaskentaan

What If -datataulukot

Sekä klassisen XLS:n että modernin XLSX:n laskentataulukot voivat luoda, laskea, lukea, kirjoittaa, kopioida ja rakenteellisesti muokata yhden tai kahden muuttujan What If -datataulukoita

function AddDataTable(
  const AResultRange, ARowInputCell, AColumnInputCell: WideString
): TXLSDataTable;

Tulosalue sisältää vain lasketut tulossolut, kun taas kaavat ja koearvot käyttävät ympäröiviä soluja samassa asettelussa kuin Excel

  • Sarakesyötteen taulukko — jätä ARowInputCell tyhjäksi, sijoita lähdekaava jokaisen tulosarakkeen yläpuolelle ja koearvot tulosrivien vasemmalle puolelle
  • Rivisyötteen taulukko — jätä AColumnInputCell tyhjäksi, sijoita lähdekaava jokaisen tulosrivin vasemmalle puolelle ja koearvot tulosarakkeiden yläpuolelle
  • Kahden muuttujan taulukko — anna molemmat syöttösolut, sijoita lähdekaava tulosalueen ylä- ja vasemmalle puolelle, rivisyötteen koearvot tulosten yläpuolelle ja sarakesyötteen koearvot vasemmalle puolelle
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;

Tämä sarakesyötteen esimerkki laskee arvot 3, 5 ja 7 alueelle D2:D4; jokainen koearvo sovelletaan eristetyn laskentakontekstin kautta, joten kaavat, jotka pääsevät soluun B1 epäsuorasti muiden kaavasolujen kautta, lasketaan uudelleen oikein

AddDataTable palauttaa arvon nil, jos alue on virheellinen, syöttöviittaus on virheellinen tai molemmat syöttöviittaukset ovat tyhjät; laskentataulukon DataTables-kokoelma näyttää syntyneen määritelmän ja sen poistettujen syöttöjen liput

Viitatun syöttösolun poistaminen säilyttää taulukon määritelmän ja palauttaa sen tuloksille arvon #REF!, mikä vastaa tallennetun työkirjan semantiikkaa

Käyttäjän määrittämät funktiot

Laajenna kaavamoottoria mukautetulla liiketoimintalogiikalla; rekisteröi omat funktiot alla olevien tapahtumien avulla

Vaaralliset ulkoiset ja makrotyyliset nimet estetään ennen argumenttien tai käsittelijöiden suorittamista, ellei työkirja tai yksittäinen kontekstikohtainen evaluointi nimenomaisesti salli AllowUnsafeFormulaCallbacks-asetusta