Pogon za proračune programa Excel
Pregled
HotXLS uključuje ugrađeni pogon za raščlanjivanje i proračun formula; ovaj pogon programski vrednuje formule ćelija unutar vašeg procesa, eliminišući potrebu za pozivanjem programa Excel ili spoljnih OLE kontrolera radi razrešavanja izračunatih vrednosti radne sveske
Izvršavanje proračuna
Pre snimanja ili izvoza pokrenite potpuno ponovno proračunavanje radne sveske pomoću glavnog interfejsa radne sveske
procedure Calculate;
Pogon podržava standardne matematičke, datumske, logičke, znakovne i statističke porodice funkcija; on uzastopno razrešava zavisnosti ćelija i prati lance referenci kako bi sprečio kružne reference
Kontekstualno izračunavanje formula
TXLSWorksheet i TXLSXWorksheet izlažu EvaluateFormulaAt za izračunavanje teksta formule u izabranom redu i koloni sa numeracijom od jedan, bez upisivanja privremene ćelije i bez menjanja stanja proračuna radne sveske
A1 i R1C1 stilovi referenci, lokalna imena, strukturisane reference, zavisnosti formula, koreni nizova, tipizirane Excel vrednosti grešaka, volatilan status, eksplicitno odobrenje spoljnih referenci, otkazivanje i stabilne kategorije neuspeha dele uobičajeni evaluator radne sveske
CreateFormulaEvaluationTemplate jednom kompajlira nepromenljivo sidro i ponovo ga koristi na ciljnim ćelijama; A1 strukturisane reference osetljive na red cilja razrešavaju se za svaki ciljni kontekst, a ograničenja po pozivu vezuju dužinu formule, broj koraka sintaksnih stavki, dubinu rekurzije i broj bajtova generisanih nizova
Pogledajte Kontekstualno izračunavanje formula za tipove rezultata, podrazumevane budžete, pravila životnog veka i primere za Delphi ili C++Builder
Operatori nad nizovima
Aritmetički, poredbeni i operatori konkatenacije, kao i unarna negacija i procentualni operator, prihvataju izračunate nizove pored skalarnih vrednosti
Skalar se primenjuje na svaki element, a niz od jednog reda ili jedne kolone širi se preko kompatibilne dimenzije; nekompatibilni oblici vraćaju #VALUE!
Greške se zadržavaju u svojim pojedinačnim rezultujućim ćelijama, pa jedno deljenje nulom ili jedan nevažeći element ne odbacuje vrednosti izračunate za preostale ćelije
COMBINA i PERMUTATIONA dele skalarnu i broadcast semantiku nad nizovima, sa skraćenim nenegativnim celobrojnim argumentima i proverom prekoračenja, dok MUNIT vraća kompaktnu dvodimenzionalnu jediničnu matricu tipa Double
FormulaArrayMemoryLimit podrazumevano iznosi 64 MiB i ograničava korisni sadržaj generisanih matrica; MUNIT dodatno proverava preostali prostor za spill radnog lista, umesto da nameće fiksni plafon dimenzija
Provera prisustva formula
ISFORMULA(reference) proverava pripadnost formule bez izračunavanja referencirane ćelije, tako da formula ostaje otkrivena i kada je njen keširani rezultat greška ili prazan znakovni niz
Pravougaoni opseg vraća Bulov niz istog oblika; članovi deljene formule i klasičnih ili XLSX nizovnih formula vraćaju true, dok je ćelija sa formulom samo sidro dinamičkog spill-a
Direktno upisane vrednosti i skalarna definisana imena vraćaju #VALUE!, nevažeće reference zadržavaju #REF!, a generisani Bulovi nizovi ograničeni su pomoću FormulaArrayMemoryLimit
XLSX upisuje _xlfn.ISFORMULA i pri otvaranju vraća ime bez prefiksa, ODS koristi standardnu sintaksu of:=ISFORMULA, a klasični XLS izlaz odbija nepodržanu buduću funkciju pre upisa podataka
Moderne tekstualne funkcije
UNICHAR skraćuje numeričke unose ka nuli i konvertuje validne Unicode skalarne vrednosti u UTF-16, uključujući izlazne parove surogata za dopunske ravni i sve raspone za privatnu upotrebu
Unosi koji su nula ili van opsega vraćaju #VALUE!, dok izolovane surogatne kodne tačke i Unicode noncharacter vrednosti vraćaju #N/A; unosi u obliku opsega i generisanih nizova zadržavaju ove greške po elementu
BAHTTEXT konvertuje konačne brojeve u tekst tajlandskih bahta i satanga, zaokružuje srednje (midpoint) vrednosti od nule na dve decimale, zadržava negativan predznak kada zaokružena veličina postane nula i razvija naučnu notaciju bez sužavanja kroz celobrojni tip
XLSX snima UNICHAR kao _xlfn.UNICHAR i pri ponovnom otvaranju vraća ime bez prefiksa; BAHTTEXT zadržava svoj standardni identitet funkcije i ostaje bez prefiksa u XLS i XLSX formulama
Regresija i predviđanje
LINEST i LOGEST prihvataju jednu ili više kolona ili redova prediktora i vraćaju koeficijente u Excel redosledu, a iza njih opcionu konstantu (intercept)
Kada je argument za statistiku true, obe funkcije vraćaju kompletan rezultat od pet redova sa greškama koeficijenata, statistikama pristajanja, F statistikom, stepenima slobode, regresionim zbirom kvadrata i rezidualnim zbirom kvadrata
TREND i GROWTH koriste isti višepromenljivi model i čuvaju oblik po redu ili koloni datih novih vrednosti prediktora
Klasično XLS ponovno proračunavanje zavisnosti
TXLSWorkbook.Recalculate izgrađuje graf zavisnosti formula pri prvom pozivu i izračunava formule redosledom od prethodnika ka zavisnim ćelijama, a ne po fizičkom redosledu ćelija
Kasniji pozivi ponovo koriste graf i proračunavaju samo tranzitivne zavisne od promenjenih vrednosti, plus volatilne formule; izmene formula, imena, struktura radnog lista i prepisivanja referenci bezbedno poništavaju i ponovo izgrađuju graf
Kružne reference koriste klasična podešavanja radne sveske EnableIteration, MaxIterations i MaxIterationChange, dok UseFullPrecision=False primenjuje prikazanu preciznost brojeva na keširane rezultate i njihova nizvodna izračunavanja
Zavisnosti definisanih imena
Inkrementalno proračunavanje prati imena definisana na nivou radne sveske i radnog lista kroz ugnježdene formule i reference sa više oblasti
Aciklične formule imena daju svoje tačne zavisnosti ćelija, dok se rekurzivni ciklusi imena bezbedno vraćaju na volatilno ponovno proračunavanje
What-If tabele podataka
I klasični XLS i moderni XLSX radni listovi mogu da kreiraju, izračunaju, čitaju, upisuju, kopiraju i strukturno prilagođavaju What-If tabele podataka sa jednom ili sa dve promenljive
function AddDataTable( const AResultRange, ARowInputCell, AColumnInputCell: WideString ): TXLSDataTable;
Opseg rezultata sadrži samo izračunate izlazne ćelije, dok formule i probne vrednosti koriste okolne ćelije u istom rasporedu kao Excel
- Tabela sa unosom po koloni — ostavite
ARowInputCellpraznim, smestite izvornu formulu iznad svake kolone rezultata, a probne vrednosti levo od redova rezultata - Tabela sa unosom po redu — ostavite
AColumnInputCellpraznim, smestite izvornu formulu levo od svakog reda rezultata, a probne vrednosti iznad kolona rezultata - Tabela sa dve promenljive — zadaćete obe ulazne ćelije, smestite izvornu formulu iznad i levo od opsega rezultata, probne vrednosti za unos po redu iznad rezultata, a probne vrednosti za unos po koloni levo
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;
Ovaj primer sa unosom po koloni izračunava 3, 5 i 7 u D2:D4; svaka probna vrednost primenjuje se kroz izolovani kontekst proračuna, pa se formule koje do B1 dolaze indirektno preko drugih ćelija sa formulama ispravno proračunavaju
AddDataTable vraća nil za nevažeći opseg, nevažeću ulaznu referencu ili kada su obe ulazne reference prazne; kolekcija DataTables radnog lista izlaže dobijenu definiciju i njene oznake obrisanih ulaza
Brisanje referencirane ulazne ćelije čuva definiciju tabele i vraća #REF! za njene izlaze, u skladu sa semantikom sačuvane radne sveske
Korisnički definisane funkcije
Proširite pogon formula prilagođenom poslovnom logikom; registrujte svoje funkcije pomoću događaja u nastavku
Opasna spoljna imena i imena makro stila odbijaju se pre nego što se pokrenu argumenti ili obrađivači, osim ako radna sveska ili pojedinačno kontekstualno izračunavanje eksplicitno ne omogući AllowUnsafeFormulaCallbacks
- Događaj OnUserFunction — Obrada osnovnih korisnički definisanih funkcija
- Događaj OnUserFunctionEx — Razrešavanje složenih funkcija sa parametrima opsega ćelija
- Povratni poziv korisničke funkcije — Zahtevi potpisa za spoljne obrađivače