Veritabanından excel dosyasına veri aktarımı

AviRa

Üye
12 Eki 2011
230
0
-
Selamün Aleyküm Arkadaşlar;
Konu ile ilgili bir ders olmasına rağmen dersin eksik [-yarım] kaldığını düşündüğüm için ekliyorum bu dersi.
Öncelikle excel dosyasına yazmak için response.Write ile ilgili yöntemler de var;ancak bunlarda sürekli olarak format hatası oluşmaktadır.Ve oluşturduğunuz excel dosyasını başka program ile kullamıyorsunuz.Oysa bu yöntem ile tamamen formatı excel olan,hatalardan arınmış bir excel dosyasını hücre hücre oluşturup kaydedeceğiz.

Neyse konuya geçelim.İlk olarak References/Add Reference/Net kısmından Microsoft.Office.Interop.Excel kütüphanesini ekliyoruz.Excel ile ilgili işlemleri yapmamız için gerekli bir durum bu.

Daha sonra üst kısıma
using Excel = Microsoft.Office.Interop.Excel;
kodunu yazıyoruz ki,her seferinde Microsoft.Office.Interop.Excel yazmak yerine sadece Excel yazabileyim.

Ben veri tabanından datatable'a veri aktarabildiğinizi düşünerek o kısmı es geçiyorum.Bu konuda sıkıntısı olan arkadaşlar buradan sorabileceği gibi,hem bu sitede hem de başka sitelerde bu konu hakkında sayısız örneğe ulaşabilirler.

Şimdi gelelim esas olaya,aşağıya eklediğim fonksiyonda gerekli yerlerde yorum satırlarını kullandım.

public **** fillExcel(DataTable dt, string fileName) { try { //Sistemin karakter dilini geçici olarak inglizceye çeviriyoruz.Olası format hataları yüzünden. System.Globalization.CultureInfo myCultureInfo = System.Threading.Thread.CurrentThread.CurrentCulture; System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en-US"); //Excel uygulaması,dosyası ve sayfası oluşturuyoruz. Excel.Application eApplication = new Excel.Application(); Excel.Workbook eWBook; Excel.Worksheet eWSheet; eApplication.Visible = false; eWBook = eApplication.Workbooks.Add(Type.Missing); eWSheet = (Excel.Worksheet)eWBook.ActiveSheet; //Veritabanındaki kolon isimlerini,excel dosyasında başlık olarak ekliyoruz. //Not : excelde indexler [0,0] değil [1,1] şeklinde başlar. for (int z = 0; z < dt.Columns.Count; z++) { eWSheet.Cells[1, z + 1] = dt.Columns[z].ColumnName.ToString(); } //Excel dosyasını hücre hücre dolaşıp,datatable içeriğini excele dolduruyoruz. for (int iRow = 0; iRow < dt.Rows.Count; iRow++) { for (int jCol = 0; jCol < dt.Columns.Count; jCol++) { eWSheet.Cells[iRow + 2, jCol + 1] = dt.Rows[iRow][jCol].ToString(); } } //En önemli kısım burası.Projemizde "Excel" isminde bir dosya oluşturdum oraya kaydediyorum. //Masaüstü uygulamalarında bu path -> @"C:Excel" + fileName şeklinde verilir. eWSheet.SaveAs(Server.MapPath("~/Excel/") + fileName, Microsoft.Office.Interop.Excel.XlFileFormat.xlExcel8, Type.Missing, Type.Missing, false, Type.Missing , Type.Missing, Type.Missing, Type.Missing, Type.Missing); eApplication.UserControl = true; //sistemin karakter dilini tekrar eski haline getiriyoruz. System.Threading.Thread.CurrentThread.CurrentCulture = myCultureInfo; //bundan sonraki kodları cache'i boşaltmak ve oluşturduğumuz excel dosyasını serbest bırakarak üzerinde işlem yapabilecek duruma getirmek yazıyoruz. //Not : bunların yazılması,excel dosyamızı başka yerde kullanabilmek amacıyla (dosya zaten kullanımda hatası ALMAMAk için) önemlidir. eWBook.Close(true, Type.Missing, Type.Missing); eApplication.Quit(); dt.Dispose(); Marshal.ReleaseComObject(eWSheet); Marshal.ReleaseComObject(eWSheet); Marshal.ReleaseComObject(eWBook); Marshal.ReleaseComObject(eWBook); Marshal.ReleaseComObject(eApplication); GC.GetTotalMemory(false); GC.Collect(); GC.WaitForPendingFinalizers(); GC.Collect(); GC.GetTotalMemory(true); } catch (Exception ex) { //Kendime ait,uyarı vermeye yönelik script kodudur.isterseniz kullanmazsınız. messageBox("Hata : " + ex.Message); } }
MessageBox kodu :
public **** messageBox(string message) { string script = null; script = "<script language='javascript' type='text/javascript'>"; script += "alert('" + message + "');"; script += "</script>"; ScriptManager.RegisterClientScriptBlock(Page, GetType(), "AbrirPagina", script, false); }

Konu ile ilgili sorularınız olması durumunda lütfen sormaktan çekinmeyiniz...
 
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.