Excel skaičiavimo variklis
Apžvalga
HotXLS apima integruotą variklį formulėms analizuoti ir skaičiuoti; šis variklis programiškai įvertina langelių formules jūsų procese, taip pašalindamas poreikį kviesti Excel ar išorinius OLE valdiklius darbo knygos apskaičiuotoms reikšmėms gauti
Skaičiavimo vykdymas
Prieš išsaugant ar eksportuojant, suaktyvinkite visą darbo knygos perskaičiavimą naudodami pagrindinę darbo knygos sąsają
procedure Calculate;
Variklis palaiko standartines matematinių, datų, loginių, eilučių ir statistinių funkcijų šeimas; jis nuosekliai sprendžia langelių priklausomybes ir seka nuorodų grandines, kad išvengtų ciklinių nuorodų
Kontekstinis formulių vertinimas
TXLSWorksheet ir TXLSXWorksheet atskleidžia EvaluateFormulaAt, skirtą apskaičiuoti formulės tekstą pasirinktoje eilutėje ir stulpelyje, numeruojamuose nuo 1, nerašant laikinojo langelio ir nekeičiant darbo knygos skaičiavimo būsenos
A1 ir R1C1 adresavimo stiliai, vietiniai vardai, struktūrinės nuorodos, formulių priklausomybės, masyvinių formulių šaknys, tipizuotos Excel klaidų reikšmės, nepastoviųjų funkcijų būsena, aiškus išorinių nuorodų įgalinimas, atšaukimas ir stabilios gedimų kategorijos naudoja įprastąjį darbo knygos vertintuvą
CreateFormulaEvaluationTemplate vieną kartą sukompiliuoja nekeičiamą inkarą ir naudoja jį pakartotinai su keliais tiksliniais langeliais; nuo tikslinės eilutės priklausomos A1 struktūrinės nuorodos išspręndžiamos kiekvienam tiksliniam kontekstui atskirai, o vienam iškvietimui skirti apribojimai riboja formulės ilgį, sintaksės elementų žingsnius, rekursijos gylį ir sugeneruoto masyvo baitų kiekį
Dėl rezultatų tipų, numatytųjų limitų, naudojimo trukmės taisyklių ir Delphi arba C++Builder pavyzdžių žr. kontekstinį formulių vertinimą
Masyvų operatoriai
Aritmetikos, palyginimo, sujungimo, unarinio neigimo ir procento operatoriai priima ne tik skaliarines reikšmes, bet ir apskaičiuotus masyvus
Skaliarinė reikšmė platinama visiems elementams, o vienos eilutės ar vieno stulpelio masyvas – per suderinamąjį matmenį; nesuderintos formos grąžina #VALUE!
Klaidos lieka atskiruose rezultatų langeliuose, todėl viena dalyba iš nulio arba vienas netinkamas elementas neišmeta kitų langelių apskaičiuotų reikšmių
COMBINA ir PERMUTATIONA skaliarams ir išplečiamiems masyvams taiko vienodą semantiką – argumentai apkarpojami iki neneigiamų sveikųjų skaičių, o perpildymas tikrinamas; MUNIT grąžina kompaktišką dvimatę Double tipo vienetinę matricą
FormulaArrayMemoryLimit pagal numatytuosius nustatymus lygus 64 MiB ir riboja sugeneruotų matricų duomenų apimtį; MUNIT taip pat patikrina likusią darbalapio spill sritį, o ne taiko fiksuotas matmenų lubas
Formulių buvimo tikrinimas
ISFORMULA(reference) nustato, ar nurodytasis langelis turi formulę, jo nesuskaičiavęs, todėl formulė lieka aptinkama net tada, kai jos podėlio rezultatas yra klaida arba tuščia eilutė
Stačiakampis diapazonas grąžina tokios pat formos Boolean masyvą; bendrosios formulės ir klasikinių ar XLSX masyvinių formulių nariai grąžina true, o dinaminio spill atveju formulės langeliu laikomas tik jos inkaras
Tiesioginės reikšmės ir skaliariniai apibrėžtieji vardai grąžina #VALUE!, netinkamos nuorodos išlaiko #REF!, o sugeneruoti Boolean masyvai ribojami FormulaArrayMemoryLimit
XLSX rašo _xlfn.ISFORMULA ir atvėręs failą atkuria paprastąjį pavadinimą, ODS naudoja standartinę of:=ISFORMULA sintaksę, o Classic XLS išvestis atmeta nepalaikomą būsimąją funkciją dar prieš įrašydama duomenis
Šiuolaikinės teksto funkcijos
UNICHAR skaitines įvestis apkarpo link nulio ir tinkamas Unicode skaliarines reikšmes konvertuoja į UTF-16, įskaitant pakaitinių porų (surrogate pairs) išvestį papildomiesiems plokštumams ir visiems privataus naudojimo diapazonams
Nulis ir už diapazono ribų esančios įvestys grąžina #VALUE!, o pavienės pakaitinės kodo reikšmės (surrogate code points) ir Unicode noncharacters grąžina #N/A; diapazonų ir sugeneruotų masyvų įvestys šias klaidas išlaiko atskirai kiekvienam elementui
BAHTTEXT baigtinius skaičius konvertuoja į tailandės batų ir satangų tekstą, vidurio reikšmes apvalina nuo nulio iki dviejų dešimtainių skaitmenų, išlaiko minuso ženklą, kai apvalintoji reikšmė tampa nuliu, ir išplečia mokslinį užrašą, nesusiaurindamas reikšmės per sveikąjį tipą
XLSX išsaugo UNICHAR kaip _xlfn.UNICHAR ir pakartotinai atvėręs atkuria paprastąjį pavadinimą; BAHTTEXT naudoja standartinę funkcijos tapatybę ir XLS bei XLSX formulėse lieka be priešdėlio
Regresija ir prognozavimas
LINEST ir LOGEST priima vieną ar kelis prognozuotojų stulpelius arba eilutes ir grąžina koeficientus Excel tvarka, o po jų – pasirinktinąjį laisvąjį narį
Kai statistics argumentas yra true, abi funkcijos grąžina pilną penkių eilučių rezultatą, kuriame yra koeficientų klaidos, atitikimo statistika, F statistika, laisvės laipsniai, regresijos kvadratų suma ir liekanų kvadratų suma
TREND ir GROWTH naudoja tą patį daugiakintamį modelį ir išlaiko pateiktų naujųjų prognozuotojų reikšmių eilutės arba stulpelio formą
Klasikinio XLS priklausomybių perskaičiavimas
TXLSWorkbook.Recalculate pirmojo kvietimo metu sukuria formulių priklausomybių grafą ir formules vertina precedentų pirmumo tvarka, o ne fizine langelių tvarka
Vėlesni kvietimai naudoja tą patį grafą ir perskaičiuoja tik pakeistų reikšmių netiesioginius priklausomuosius bei nepastoviąsias formules; formulės redagavimai, vardai, darbalapio struktūra ir perrašytos nuorodos saugiai suardo grafą ir jį perkuria
Ciklinės nuorodos naudoja klasikinės darbo knygos EnableIteration, MaxIterations ir MaxIterationChange parametrus, o UseFullPrecision=False podėlio rezultatams ir jų tolesniems skaičiavimams taiko rodomąjį skaičių tikslumą
Apibrėžtųjų vardų priklausomybės
Inkrementinis skaičiavimas seka darbo knygos ir darbalapio aprėptyje apibrėžtus vardus per įdėtines formules ir kelių sričių nuorodas
Aciklinių vardų formulės pateikia tikslias savo langelių priklausomybes, o rekursyvūs vardų ciklai saugiai grįžta prie nepastoviųjų formulių perskaičiavimo
„What-if“ duomenų lentelės
Tiek klasikinio XLS, tiek naujojo XLSX darbalapiai gali kurti, skaičiuoti, skaityti, rašyti, kopijuoti ir struktūriškai koreguoti vieno arba dviejų kintamųjų „What-if“ duomenų lenteles
function AddDataTable( const AResultRange, ARowInputCell, AColumnInputCell: WideString ): TXLSDataTable;
Rezultatų diapazone yra tik apskaičiuotieji išvesties langeliai, o formulės ir bandomosios reikšmės naudoja gretimus langelius ta pačia tvarka, kaip Excel
- Lentelė su įvestimi stulpelyje — palikite
ARowInputCelltuščią, virš kiekvieno rezultatų stulpelio įrašykite šaltinio formulę, o bandomąsias reikšmes – kairiau rezultatų eilučių - Lentelė su įvestimi eilutėje — palikite
AColumnInputCelltuščią, kairiau kiekvienos rezultatų eilutės įrašykite šaltinio formulę, o bandomąsias reikšmes – virš rezultatų stulpelių - Lentelė su dviem kintamaisiais — nurodykite abu įvesties langelius, šaltinio formulę įrašykite virš ir kairiau rezultatų diapazono, eilutės įvesties bandomąsias reikšmes – virš rezultatų, o stulpelio įvesties – kairiau jų
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;
Šis stulpelio įvesties pavyzdys apskaičiuoja 3, 5 ir 7 langeliuose D2:D4; kiekviena bandomoji reikšmė taikoma per atskirą skaičiavimo kontekstą, todėl teisingai perskaičiuojamos ir tos formulės, kurios iki B1 pasiekia netiesiogiai per kitus formulės langelius
AddDataTable grąžina nil, kai diapazonas arba įvesties nuoroda netinkami, arba kai abi įvesties nuorodos tuščios; darbalapio kolekcija DataTables atskleidžia gautąją apibrėžtį ir žymes, nurodančias pašalintąsias įvestis
Pašalinus nurodytąjį įvesties langelį, lentelės apibrėžtis išlieka, o jos išvestys grąžina #REF! – taip, kaip numato saugomoje darbo knygoje įrašyta semantika
Naudotojo apibrėžtos funkcijos
Papildykite formulių variklį pasirinktine verslo logika; savo funkcijas registruokite naudodami toliau esančius įvykius
Pavojingi išoriniai ir makro stiliaus vardai atmetami dar prieš vykstant argumentams ar dorokliams, nebent darbo knyga arba atskiras kontekstinis vertinimas aiškiai įgalina AllowUnsafeFormulaCallbacks
- Įvykis OnUserFunction — Pagrindinių naudotojo apibrėžtų funkcijų apdorojimas
- Įvykis OnUserFunctionEx — Sudėtingų funkcijų su langelių diapazono parametrais sprendimas
- Naudotojo funkcijos atgalinis iškvietimas — Signatūros reikalavimai išorinių doroklių reikšmėms