HyperLink
Bejelentkezés
E-mail: 
Jelszó: 





Skip Navigation Links
 

Szövegesen megadott képlet kiszámítása programból


Példaprogram letöltése

9806 bájt

Mennyi 10+20? És mennyi idő erre programból válaszolni? De úgy, hogy nem számként van megadva a két érték és az elvégzendő művelet, hanem sztringként: „10+20”. És mennyi az értéke ennek a kifejezésnek: „sin(0,05)*30-(cos(0,43)/pi())”? Ha valaki nagyon ráér, biztos szívesen ír algoritmust arra, hogy ilyen sztringeket képes legyen az alkalmazása kiértékelni és az eredményt közölni a felhasználóval. Ha valaki azonban nem ér rá, akkor mutatunk egy nyolc soros függvényt, mely képes bármilyen bonyolultságú sztringként megadott képletet megoldani és az eredményt visszaadni.

A megoldás ismét igen egyszerű, sőt szinte teljesen kézenfekvő: sztringként megadott képletek kiértékelésére használja fel alkalmazásunk a háttérben futtatva az Excel-t. Így a felhasználó észre sem veszi, hogy nem csak a mi programunk fut és az Excel-nek elég bonyolult szövegesen megadott képleteket átadhatunk, hogy értékelje ki azokat. Ennek leprogramozásával így nincs dolgunk. Megoldanunk csak azt kell, hogy elérjük az Excel-t és megkérjük a feladatunk elvégzésére.
Az egészhez készítsünk egy komponenst, így a jövőben igen egyszerűen felhasználhatóvá válik egy ilyen kiértékelés. A komponensünkben egyetlen függvényt hozunk létre, melynek paraméterként kell megadnunk a képletet, melynek meg kell tudni az eredményét. A függvény visszatérési értéke egy double típusú szám lesz, mely képlet eredménye.
Az Excel eléréséhez ne felejtsünk el egy referenciát hozzáadni a projektünkhöz az Excel-ről.
A függvényben létrehozunk egy kapcsolatot az Excel-el és mivel nem állítjuk a Visible property-jét igazra, így a felhasználó ebből semmit sem vesz észre.
    public double Execute(string s)
    {
      Excel.Application ea = new Excel.Application();
Ezt követően létrehozunk egy új munkafüzetet és ennek egy celláját kitesszük egy Range objektumba, hogy a továbbiakban könnyebben elérhessük.
      Excel.Workbook ew = ea.Workbooks.Add(m);
      Excel.Range er = (Excel.Range)ea.Cells[1, 1];
Most ebbe a cellába írjuk a képletet, mely elé egy egyenlőségjelet illesztünk, hiszen az Excel csak ez esetben hajlandó azt képletként értelmezni és az eredményét kiszámolni.
      er.FormulaArray = "="+s;
Miután beírtuk a képletet máris kiolvashatjuk annak az eredményét.
      double result = Convert.ToDouble(er.Value2);
Végül nem maradt más dolgunk, mint zárni a megnyitott munkafüzetet mentés nélkül, majd bezárni az Excel-t és visszaadni a kapott értéket.
      ew.Close(false, m, m);
      ea.Quit();
      return result;
    }
A komponens használatával már csak az Execute függvény hívása marad hátra ahhoz, hogy egy tetszőleges, de csak az Excel által elfogadott képletet megadjunk és kiszámoltassuk az eredményét.
    private void button1_Click(object sender, System.EventArgs e)
    {
      label1.Text = functionComponent1.Execute(textBox1.Text).ToString();
    }

Könyv
Ez a cikk megtalálható ebben a könyvben: C# Software Offline 2002 évkönyv 346. oldal

Felhasználási feltételek
A Software Online szoftverfejlesztői magazin mindegyik cikke, minden megjelent képe, és egyéb publikált anyaga szerzői jog védelme alatt áll! Bármilyen formában történő másodlagos terjesztésük, közzétételük vagy felhasználásuk kizárólag a kiadó előzetes írásbeli engedélyével történhet!

Copyright © 1999-2012 Animare Software Kft. Minden jog fenntartva!
| Készült: Animare Stúdió | Adatvédelem | Kapcsolat |