Bu makalemizde ASP.NET MVC’de oluşturduğumuz bir grid üzerindeki verileri olduğu gibi excel’e nasıl aktaracağımızı göreceğiz.
ASP.NET MVC Excele Aktarma (ASP.NET MVC Export to Excel)
Controller
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | public void GridExportToExcel() { DataTable dt = new DataTable(); dt.Columns.AddRange(new DataColumn[3] { new DataColumn("SiparişId"), new DataColumn("Ürün"), new DataColumn("Adet")}); dt.Rows.Add(101, "Cam bardak", 5); dt.Rows.Add(102, "Pantolon", 2); dt.Rows.Add(103, "Tişört", 12); dt.Rows.Add(104, "Gömlek", 9); string dosyaAdi = "ornek_dosya_adi"; var grid = new GridView(); grid.DataSource = dt; grid.DataBind(); Response.ClearContent(); Response.Charset = "utf-8"; Response.AddHeader("content-disposition", "attachment; filename=" + dosyaAdi + ".xls"); Response.ContentType = "application/vnd.ms-excel"; StringWriter sw = new StringWriter(); HtmlTextWriter htw = new HtmlTextWriter(sw); grid.RenderControl(htw); Response.Write(sw.ToString()); Response.End(); } |
Javascript
1 2 3 4 5 6 7 8 9 10 11 12 | <script> $(document).ready(function () { $("#export").click(function () { ExportToExcel(); }); }); function ExportToExcel() { var url = '@Url.Action("GridExportToExcel", "ExportController")'; window.open(url); } |
Html
1 | <a href="#" id="export">Excele Aktar</a> |
Yaptıklarımızı özetlersek dt adında sanal bir tablo oluşturup içerisine örnek veriler girdik ardından datatable’i grid’e aktardık daha sonra sayfanın içeriği temizleyip contentType(İçerik türü)’ini ‘application/vnd.ms-excel’ mimetype’ini belirterek sayfanın excel içeriğine sahip olmasını sağladık böylelikle otomatik olarak dosya indiriliyormuş şeklinde algılanacaktır ve tarayıcınızın türüne göre otomatik indirecektir excel dosyasını tabi dosya indirme işlemleride şöyle oluyor sayfada Excel’e Aktar adından bir link var siz ona tıkladığınızda jquery’de click olayı çalışacak ve ExportExcel(); adındaki fonksiyonumuz devreye girecek ve excel dosya oluşturma işlemini yapan actionumuza window.open() fonksiyonu kullanılarak yeni pencerede açılacak ve indirme işlemi sağlanacaktır.
Merhaba,
Sütun başlıklarını nasıl kaldırabiliriz?
DataColumn eklerken title olarak boş değer verirseniz sütun başlığı olmamış olur. Bilmiyorum bu ufak ipucu işinizi görür mü?
Türkçe karakter sorununu nasıl çözdünür?
Veriler tablo olarak göri dönüyor. Buraya kadar sıkıntı yok. Fakat ” window.open(url); ” komudunun bir işlevi veya getirisi yok. Yani adres çubuğuna tablo stringini atarsak nasıl bir işlem yapılmasını bekliyebiliriz?
window.open(url)’in bir getirisi yada işlevi yokdan kastınız acaba çalışmıyor anlamında mı yoksa farklı birşey mi söyleniyor açıklık getirebilir misiniz?
Eğer çalışmıyor deniyorsa window.open() komutu ile adresin yeni sekmede açılmaya zorlandığından bazı tarayıcılarda yeni sekmede yada popup açmaya yetki isteniyor. Bu durumu kontrol edebilirsiniz.
Diğer bir konuda tablo stringini adres çubuğuna atarsak nasıl işlem yapabiliriz içinde anladığım kadarıyla html tarafındaki table’ı nasıl export edebileceğini soruyorsunuz bu konuda tool kullanmadan yapabileceğiniz 1-2 yöntem var oda regex kullanarak table nesnesinin tüm kolonlarını gezip bu kolonlara ait değerlere karşılık gelen excel dökümanı oluşturup içeriği table nesnesine göre doldurabilirsiniz diğer yöntem çok sağlıklı bir yöntem değil ama belki işinize yarar diye yazıyorum html table string’ini File.Create() metodu ile xls v.b. excel uzantılı dosya ile direkt olarak table string’ini basarsanız excelde direkt olarak table çıktınızın gözüktüğünü göreceksiniz ama dediğim gibi sağlıklı bir çözüm değildir bu yöntem.