
Az Excel APS.NET-es alkalmazásból történő eléréséhez módosítsuk az alapértelmezésben a C:\WINDOWS\Microsoft.NET\Framework\v1.0.3705\CONFIG könyvtárban lévő machine.config állományban a processModel bejegyzésnél a userName attribútumot system értékre, majd indítsuk újra a gépet.
<processModel
...
userName="system"
...
A mellékelt WebForm1.aspx csak egy képet ad vissza, mely tartalmazza a grafikont. Ha tehát egy web oldalba, vagy egy másik ASP.NET-es alkalmazás web lapjára szeretnénk beilleszteni ezt a képet, akkor a mellékelt _teszt.htm-ben látható módon tegyük ezt meg:
<img src="http://localhost/WebChart/WebForm1.aspx">
Természetesen a WebForm1.aspx elérését változtassuk meg az adott környezettől függően.
Térjünk most át a megvalósítás lépéseire.
Az Excel eléréséhez létrehozunk egy Excel alkalmazást a háttérben, melyben nyitunk egy új munkafüzetet.
Excel.Application ea = new Excel.Application();
ea.Visible = false;
Excel.Workbook ew = ea.Workbooks.Add(m);
Ennek első munkalapjára készítünk egy táblázatot, mely tartalmazza azokat az adatokat, amiből grafikon készül. Az egyszerűség kedvéért most csupán egy kettős ciklus által feltöltött táblázatot használunk, de az adatforrás természetesen tetszőleges lehet.
Excel.Worksheet ws = (Excel.Worksheet)ea.Worksheets[1];
for (int l=1; l<=3; l++)
{
for (int i=1; i<=6; i++)
{
ws.Cells[i, l] = i*l*12;
}
}
A táblázat „begépelése” után kijelöljük azt.
ws.get_Range("A1", "C6").Select();
Ezt követően létrehozunk egy grafikont, melynek megadjuk típusát, amit most xl3DColumn-ra választottunk.
Excel.Chart c = (Excel.Chart)ew.Charts.Add(m, m, m, m);
c.ChartType = Excel.XlChartType.xl3DColumn;
Következő lépésben a már elkészült grafikon képét a vágólapra másoljuk és bezárjuk a munkafüzetet, majd az Excel-t is úgy, hogy ne történjen mentés.
c.CopyPicture(Excel.XlPictureAppearance.xlScreen, Excel.XlCopyPictureFormat.xlBitmap, Excel.XlPictureAppearance.xlScreen);
ew.Close(false, m, m);
ea.Quit();
Adott tehát a vágólapon egy kép, mely azt a grafikont tartalmazza, amit a web oldalon meg szeretnénk jeleníteni. Ehhez nincs más dolgunk, mint a vágólapon lévő képet egy Bitmap osztályba másolni.
IDataObject ido = Clipboard.GetDataObject();
if (ido.GetDataPresent(DataFormats.Bitmap))
{
Bitmap bmp = (Bitmap)ido.GetData(DataFormats.Bitmap);
Az alkalmazásunk által visszaadott adathalmaz most nem egy szöveges HTML kód lesz, hanem egy kép, mely ráadásul GIF típusú lesz. Ezért a formátumot image/gif típusúra állítjuk.
Response.ContentType = "image/gif";
Végső lépésként pedig mentjük a Bitmap-en tárolt képet a webes kérést kiszolgáló adatfolyamba.
bmp.Save(Response.OutputStream, ImageFormat.Gif);
}
Ezzel a kérést küldő kap egy GIF típusú képet, melyen az Excel által létrehozott grafikon lesz látható.