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ä
ARowInputCelltyhjäksi, sijoita lähdekaava jokaisen tulosarakkeen yläpuolelle ja koearvot tulosrivien vasemmalle puolelle - Rivisyötteen taulukko — jätä
AColumnInputCelltyhjä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
- Tapahtuma OnUserFunction — Käsittele peruskäyttäjän määrittämiä funktioita
- Tapahtuma OnUserFunctionEx — Ratkaise monimutkaiset funktiot, joilla on solualueparametreja
- Käyttäjäfunktion takaisinkutsu — Allekirjoitusvaatimukset ulkoisille käsittelijöille