Készítünk egy példaprogramot, amely a háttérben megnyitja az Excel-t. Néhány cellát feltölt véletlen számokkal, majd ebből grafikont készít. A grafikont, vágólapon keresztül átmásoljuk a Delphi alkalmazásunkba, és ott jelenítjük meg.
Az Excel programhoz és objektumaihoz OleVariant típusú objektumok segítségével kapcsolódhatunk. Az OleVariant típus használatához a uses listában fel kell sorolnunk a ComObj unit nevét is.
Első lépésben elindítjuk a háttérben az Excel programot és létrehozunk egy új munkafüzetet.
ExcelApp:=CreateOleObject('Excel.Application');
ExcelApp.Workbooks.Add;
Hogy diagramot tudjunk készíteni, feltöltünk néhány cellát, véletlen számokkal. Létrehozunk egy kis táblázatot, amely A, B és C oszlopokkal, valamint 5 sorral rendelkezik. Egy cellának a Range objektum segítségével adhatunk értéket.
ExcelApp.Range[Col+'1',Col+'1'].Value:=Chr(64+x);
Ha elkészült a táblázat, akkor már van miből grafikont készítenünk. Először ki kell jelölnünk azt a tartományt, amelyből a grafikon készül. Ehhez szintén a Range objektumot használjuk.
ExcelApp.Range['A1','D6'].Select;
Egy teljes grafikont a Chart objektum képvisel. Az alábbi kóddal létrehozunk egy új diagramot, amelyet elmentünk a MyChart változóba.
MyChart:=ExcelApp.ActiveWorkbook.Charts.Add;
Eddig csak azt adtuk meg az Excel-nek, hogy készítsen egy grafikont, de azt nem adtuk meg, hogy milyet. Ilyenkor automatikusan egy oszlop diagram jön létre, mégpedig a csoportosított oszlop névre hallgató változat.
A Chart objektum ChartType tulajdonságán keresztül lekérdezhetjük egy grafikon típusát, vagy akár módosíthatjuk is azt. Módosítsuk a grafikon típusát 3D-s oszlopdiagramra, kúpos formával.
MyChart.ChartType:=xlConeCol;
Ezzel a háttérben el is készült a grafikon, azonban mi, mint felhasználók, az egészből még semmit nem láttunk.
A Chart objektum rendelkezik egy metódussal, amely segítségével a teljes grafikont kimásolhatjuk a vágólapra. Ez a metódus, a CopyPicture.
A vágólapon lévő képet már könnyedén fel tudjuk használni egy Delphi alkalmazásban.
Image1.Picture.Assign(Clipboard);
Mielőtt a fenti kódot használnánk, az Image komponens Stretch tulajdonságát állítsuk igazra.
Nem maradt más hátra, mint hogy a háttérben futó Excel programot bezárjuk.
ExcelApp.ActiveWorkbook.Close(False);
ExcelApp.Quit;
Használható grafikon típusok
Az Excelben sokféle grafikon létezik. Minden egyes grafikonhoz a rendszerben egy konstans név van rendelve, ha ezeket fel akarjuk használni, ismernünk kell a konstansok neveit és értékeit, valamint hogy melyik mit takar. Az alábbi táblázat ebben segít eligazodni. Az itt szereplő konstans nevek megtalálhatóak a Delphi-hez mellékelt Excel*.pas állományban. Az állomány alapértelmezett helye a Delphi*\Ocx\Servers könyvtár.
| Konstans |
Érték |
Grafikon |
| xlColumnClustered |
$00000033 |
Csoportosított oszlop |
| xlColumnStacked |
$00000034 |
Halmozott oszlop |
| xlColumnStacked100 |
$00000035 |
100%-ig halmozott oszlop |
| xl3DColumnClustered |
$00000036 |
Csoportosított oszlop térhatással |
| xl3DColumnStacked |
$00000037 |
Halmozott oszlop térhatással |
| xl3DColumnStacked100 |
$00000038 |
100%-ig halmozott oszlop térhatással |
| xl3DColumn |
$FFFFEFFC |
3D oszlop |
| xlBarClustered |
$00000039 |
Csoportosított sáv |
| xlBarStacked |
$0000003A |
Halmozott sáv |
| xlBarStacked100 |
$0000003B |
100%-ig halmozott sáv |
| xl3DBarClustered |
$0000003C |
Csoportosított sáv térhatással |
| xl3DBarStacked |
$0000003D |
Halmozott sáv térhatással |
| xl3DBarStacked100 |
$0000003E |
100%-ig halmozott sáv térhatással |
| xlLine |
$00000004 |
Vonal |
| xlLineStacked |
$0000003F |
Halmozott vonal |
| xlLineStacked100 |
$00000040 |
100%-ig halmozott vonal |
| xlLineMarkers |
$00000041 |
Vonal, minden adatértéknél jelölővel |
| xlLineMarkersStacked |
$00000042 |
Halmozott vonal minden adatértéknél jelölővel |
| xlLineMarkersStacked100 |
$00000043 |
100%-ig halmozott vonal minden adatértéknél jelölővel |
| xl3DLine |
$FFFFEFFB |
Szalag vonal térhatással |
| xlPie |
$00000005 |
Kör |
| xl3DPie |
$FFFFEFFA |
Torta |
| xlPieOfPie |
$00000044 |
Kör-kör |
| xlPieExploded |
$00000045 |
Robbantott kör |
| xl3DPieExploded |
$00000046 |
Robbantott torta |
| xlBarOfPie |
$00000047 |
Kör-sáv |
| xlXYScatter |
$FFFFEFB7 |
Pont |
| xlXYScatterSmooth |
$00000048 |
Pont, görbített vonalakkal összekötve |
| xlXYScatterSmoothNoMarkers |
$00000049 |
Pont, görbített vonalakkal összekötve, jelölők nélkül |
| xlXYScatterLines |
$0000004A |
Pont, vonalakkal összekötve |
| xlXYScatterLinesNoMarkers |
$0000004B |
Pont, vonalakkal összekötve, jelölők nélkül |
| xlArea |
$00000001 |
Terület |
| xlAreaStacked |
$0000004C |
Halmozott terület |
| xlAreaStacked100 |
$0000004D |
100%-ig halmozott terület |
| xl3DArea |
$FFFFEFFE |
Terület térhatással |
| xl3DAreaStacked |
$0000004E |
Halmozott terület térhatással |
| xl3DAreaStacked100 |
$0000004F |
100%-ig halmozott terület térhatással |
| xlDoughnut |
$FFFFEFE8 |
Perec |
| xlDoughnutExploded |
$00000050 |
Robbantott perec |
| xlRadar |
$FFFFEFC9 |
Sugár |
| xlRadarMarkers |
$00000051 |
Sugár, jelölőkkel |
| xlRadarFilled |
$00000052 |
Kitöltött sugár |
| xlSurface |
$00000053 |
3D felület |
| xlSurfaceWireframe |
$00000054 |
3d felület-váz |
| xlSurfaceTopView |
$00000055 |
Körvonal |
| xlSurfaceTopViewWireframe |
$00000056 |
Körvonal-váz |
| xlBubble |
$0000000F |
Buborék |
| xlBubble3DEffect |
$00000057 |
Buborék térhatással |
| xlStockHLC |
$00000058 |
Max-Min-Zár |
| xlStockOHLC |
$00000059 |
Nyit-Max-Min-Zár |
| xlStockVHLC |
$0000005A |
Mennyiség-Max-Min-Zár |
| xlStockVOHLC |
$0000005B |
Mennyiség-Max-Min-Zár |
| xlCylinderColClustered |
$0000005C |
Oszlopdiagram hengeres formával |
| xlCylinderColStacked |
$0000005D |
Halmozott oszlopdiagram hengeres formával |
| xlCylinderColStacked100 |
$0000005E |
100%-ig halmozott oszlopdiagram hengeres formával |
| xlCylinderBarClustered |
$0000005F |
Sávdiagram hengeres formával |
| xlCylinderBarStacked |
$00000060 |
Halmozott sávdiagram hengeres formával |
| xlCylinderBarStacked100 |
$00000061 |
100%-ig halmozott sávdiagram hengeres formával |
| xlCylinderCol |
$00000062 |
3D oszlopdiagram hengeres formával |
| xlConeColClustered |
$00000063 |
Oszlopdiagram kúpos formával |
| xlConeColStacked |
$00000064 |
Halmozott oszlopdiagram kúpos formával |
| xlConeColStacked100 |
$00000065 |
100%-ig halmozott oszlopdiagram kúpos formával |
| xlConeBarClustered |
$00000066 |
Sávdiagram kúpos formával |
| xlConeBarStacked |
$00000067 |
Halmozott sávdiagram kúpos formával |
| xlConeBarStacked100 |
$00000068 |
100%-ig halmozott sávdiagram kúpos formával |
| xlConeCol |
$00000069 |
3D oszlopdiagram kúpos formával |
| xlPyramidColClustered |
$0000006A |
Oszlopdiagram kúpos formával |
| xlPyramidColStacked |
$0000006B |
Halmozott oszlopdiagram kúpos formával |
| xlPyramidColStacked100 |
$0000006C |
100%-ig halmozott oszlopdiagram kúpos formával |
| xlPyramidBarClustered |
$0000006D |
Sávdiagram kúpos formával |
| xlPyramidBarStacked |
$0000006E |
Halmozott sávdiagram kúpos formával |
| xlPyramidBarStacked100 |
$0000006F |
100%-ig halmozott sávdiagram kúpos formával |
| xlPyramidCol |
$00000070 |
3D oszlopdiagram kúpos formával |